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