1f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang/* 2f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * Copyright (C) 2014 The Android Open Source Project 3f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * 4f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * you may not use this file except in compliance with the License. 6f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * You may obtain a copy of the License at 7f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * 8f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * http://www.apache.org/licenses/LICENSE-2.0 9f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * 10f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * Unless required by applicable law or agreed to in writing, software 11f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * distributed under the License is distributed on an "AS IS" BASIS, 12f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * See the License for the specific language governing permissions and 14f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * limitations under the License. 15f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang */ 16f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 17b72eb97e4bca1e4fd68e79f9d04e9a6a15aebd21Cheuksan Wangpackage android.service.carrier; 18f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 19d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastryimport android.annotation.NonNull; 20f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wangimport android.os.Parcel; 21f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wangimport android.os.Parcelable; 22f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 23f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wangimport java.util.ArrayList; 24f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wangimport java.util.List; 25f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 26f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang/** 27f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * A parcelable list of PDUs representing contents of a possibly multi-part SMS. 28f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang */ 29f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wangpublic final class MessagePdu implements Parcelable { 30f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang private static final int NULL_LENGTH = -1; 31f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 32f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang private final List<byte[]> mPduList; 33f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 34f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang /** 35d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry * Constructs a MessagePdu with the list of message PDUs. 36d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry * 37f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * @param pduList the list of message PDUs 38f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang */ 39d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry public MessagePdu(@NonNull List<byte[]> pduList) { 40d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry if (pduList == null || pduList.contains(null)) { 41d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry throw new IllegalArgumentException("pduList must not be null or contain nulls"); 42d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry } 43f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang mPduList = pduList; 44f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 45f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 46f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang /** 47f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * Returns the contents of a possibly multi-part SMS. 48f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * 49f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * @return the list of PDUs 50f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang */ 51d7a305bd43f6188b40ddea644a70c4685ae48fcfAbhijith Shastry public @NonNull List<byte[]> getPdus() { 52f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang return mPduList; 53f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 54f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 55f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang @Override 56f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang public int describeContents() { 57f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang return 0; 58f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 59f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 60f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang @Override 61f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang public void writeToParcel(Parcel dest, int flags) { 62f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang if (mPduList == null) { 63f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang dest.writeInt(NULL_LENGTH); 64f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } else { 65f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang dest.writeInt(mPduList.size()); 66f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang for (byte[] messagePdu : mPduList) { 67f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang dest.writeByteArray(messagePdu); 68f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 69f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 70f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 71f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 72f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang /** 73f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang * Constructs a {@link MessagePdu} from a {@link Parcel}. 74f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang */ 75f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang public static final Parcelable.Creator<MessagePdu> CREATOR 76f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang = new Parcelable.Creator<MessagePdu>() { 77f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang @Override 78f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang public MessagePdu createFromParcel(Parcel source) { 79f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang int size = source.readInt(); 80f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang List<byte[]> pduList; 81f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang if (size == NULL_LENGTH) { 82f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang pduList = null; 83f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } else { 84f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang pduList = new ArrayList<>(size); 85f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang for (int i = 0; i < size; i++) { 86f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang pduList.add(source.createByteArray()); 87f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 88f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 89f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang return new MessagePdu(pduList); 90f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 91f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang 92f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang @Override 93f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang public MessagePdu[] newArray(int size) { 94f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang return new MessagePdu[size]; 95f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang } 96f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang }; 97f9c50c45c615338bf9bfe57cd1ecff490051c997Cheuksan Wang} 98