1a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal/*
2a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Copyright (C) 2014 The Android Open Source Project
3a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal *
4a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Licensed under the Apache License, Version 2.0 (the "License");
5a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * you may not use this file except in compliance with the License.
6a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * You may obtain a copy of the License at
7a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal *
8a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal *      http://www.apache.org/licenses/LICENSE-2.0
9a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal *
10a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Unless required by applicable law or agreed to in writing, software
11a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * distributed under the License is distributed on an "AS IS" BASIS,
12a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * See the License for the specific language governing permissions and
14a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * limitations under the License.
15a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal */
16a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
17a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawalpackage android.telephony;
18a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
19a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawalimport android.os.Parcel;
20a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawalimport android.os.Parcelable;
21a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
22a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
23a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal/**
24a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal * Response to the {@link TelephonyManager#iccOpenLogicalChannel} command.
25a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal */
26a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawalpublic class IccOpenLogicalChannelResponse implements Parcelable {
27ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal    /**
28ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     * Indicates an invalid channel.
29ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     */
30ed62dd4e7f873ac9681658ad92c3c008f373e23bShishir Agrawal    public static final int INVALID_CHANNEL = -1;
31a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
32ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal    /**
33ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     * Possible status values returned by open channel command.
34ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     *
35ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     * STATUS_NO_ERROR: Open channel command returned successfully.
36ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     * STATUS_MISSING_RESOURCE: No logical channels available.
37ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     * STATUS_NO_SUCH_ELEMENT: AID not found on UICC.
38ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     * STATUS_UNKNOWN_ERROR: Unknown error in open channel command.
39ef489ef8ef1ccb283485d2c308cef58067654cb2Shishir Agrawal     */
40ed62dd4e7f873ac9681658ad92c3c008f373e23bShishir Agrawal    public static final int STATUS_NO_ERROR = 1;
41ed62dd4e7f873ac9681658ad92c3c008f373e23bShishir Agrawal    public static final int STATUS_MISSING_RESOURCE = 2;
42ed62dd4e7f873ac9681658ad92c3c008f373e23bShishir Agrawal    public static final int STATUS_NO_SUCH_ELEMENT = 3;
43ed62dd4e7f873ac9681658ad92c3c008f373e23bShishir Agrawal    public static final int STATUS_UNKNOWN_ERROR = 4;
44a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
45a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    private final int mChannel;
46a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    private final int mStatus;
47a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    private final byte[] mSelectResponse;
48a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
49a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    /**
50a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     * Constructor.
51a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     *
52a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     * @hide
53a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     */
54a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public IccOpenLogicalChannelResponse(int channel, int status, byte[] selectResponse) {
55a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        mChannel = channel;
56a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        mStatus = status;
57a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        mSelectResponse = selectResponse;
58a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
59a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
60a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    /**
61a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     * Construct a IccOpenLogicalChannelResponse from a given parcel.
62a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     */
63a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    private IccOpenLogicalChannelResponse(Parcel in) {
64a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        mChannel = in.readInt();
65a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        mStatus = in.readInt();
66a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        int arrayLength = in.readInt();
67a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        if (arrayLength > 0) {
68a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal            mSelectResponse = new byte[arrayLength];
69a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal            in.readByteArray(mSelectResponse);
70a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        } else {
71a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal            mSelectResponse = null;
72a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        }
73a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
74a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
75a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    /**
76a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     * @return the channel id.
77a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     */
78a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public int getChannel() {
79a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        return mChannel;
80a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
81a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
82a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    /**
83a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     * @return the status of the command.
84a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     */
85a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public int getStatus() {
86a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        return mStatus;
87a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
88a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
89a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    /**
90a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     * @return the select response.
91a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     */
92a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public byte[] getSelectResponse() {
93a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        return mSelectResponse;
94a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
95a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
96a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    @Override
97a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public int describeContents() {
98a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        return 0;
99a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
100a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
101a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    @Override
102a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public void writeToParcel(Parcel out, int flags) {
103a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        out.writeInt(mChannel);
104a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        out.writeInt(mStatus);
1051521e5ad31125d39eec6e8a27711a983f633b662Shishir Agrawal        if (mSelectResponse != null && mSelectResponse.length > 0) {
106a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal            out.writeInt(mSelectResponse.length);
107a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal            out.writeByteArray(mSelectResponse);
108a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        } else {
109a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal            out.writeInt(0);
110a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        }
111a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
112a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
113a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public static final Parcelable.Creator<IccOpenLogicalChannelResponse> CREATOR
114a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal             = new Parcelable.Creator<IccOpenLogicalChannelResponse>() {
115a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
116a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        @Override
117a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        public IccOpenLogicalChannelResponse createFromParcel(Parcel in) {
118a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal             return new IccOpenLogicalChannelResponse(in);
119a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal         }
120a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
121a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal         public IccOpenLogicalChannelResponse[] newArray(int size) {
122a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal             return new IccOpenLogicalChannelResponse[size];
123a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal         }
124a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal     };
125a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
126a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    @Override
127a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    public String toString() {
128a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal        return "Channel: " + mChannel + " Status: " + mStatus;
129a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal    }
130a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal}
131