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