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