From 2ebfca0f618e835033c14bc2f9c7d3b9043a7e03 Mon Sep 17 00:00:00 2001 From: Rambo Wang Date: Fri, 12 Nov 2021 08:03:13 -0800 Subject: [PATCH] Introduce mutable parcelable request to open/close logical channel With a simple parcelable defines in aidl file, ITelephony can unify all the ways on how to open/close ICC logical channels. This leaves a stable ITelephony interface and extendable space in request parcelable to introduce new features. The request parcelable can also serve as the data wrapper when all request info need to pass to the handler of PhoneInterfaceManager, or out side of phone process (e.g. TelephonyRegistry) to resist phone process crash. Bug: 197658986 Test: atest IccOpenLogicalChannelRequestTest Change-Id: I15f920024d3ca3e630d16900e341ff41ee13d7d9 --- .../android/telephony/TelephonyManager.java | 35 ++++++++++--- .../internal/telephony/ITelephony.aidl | 44 ++-------------- .../telephony/IccLogicalChannelRequest.aidl | 52 +++++++++++++++++++ 3 files changed, 84 insertions(+), 47 deletions(-) create mode 100644 telephony/java/com/android/internal/telephony/IccLogicalChannelRequest.aidl diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 5f21e878254ba..0267b686d54e9 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -117,6 +117,7 @@ import com.android.internal.telephony.ISms; import com.android.internal.telephony.ISub; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.IUpdateAvailableNetworksCallback; +import com.android.internal.telephony.IccLogicalChannelRequest; import com.android.internal.telephony.OperatorInfo; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.RILConstants; @@ -6774,8 +6775,13 @@ public class TelephonyManager { try { ITelephony telephony = getITelephony(); if (telephony != null) { - return telephony.iccOpenLogicalChannelByPort(slotIndex, DEFAULT_PORT_INDEX, - getOpPackageName(), aid, p2); + IccLogicalChannelRequest request = new IccLogicalChannelRequest(); + request.slotIndex = slotIndex; + request.aid = aid; + request.p2 = p2; + request.callingPackage = getOpPackageName(); + request.binder = new Binder(); + return telephony.iccOpenLogicalChannel(request); } } catch (RemoteException ex) { } catch (NullPointerException ex) { @@ -6842,8 +6848,15 @@ public class TelephonyManager { public IccOpenLogicalChannelResponse iccOpenLogicalChannel(int subId, String AID, int p2) { try { ITelephony telephony = getITelephony(); - if (telephony != null) - return telephony.iccOpenLogicalChannel(subId, getOpPackageName(), AID, p2); + if (telephony != null) { + IccLogicalChannelRequest request = new IccLogicalChannelRequest(); + request.subId = subId; + request.callingPackage = getOpPackageName(); + request.aid = AID; + request.p2 = p2; + request.binder = new Binder(); + return telephony.iccOpenLogicalChannel(request); + } } catch (RemoteException ex) { } catch (NullPointerException ex) { } @@ -6873,8 +6886,10 @@ public class TelephonyManager { try { ITelephony telephony = getITelephony(); if (telephony != null) { - return telephony.iccCloseLogicalChannelByPort(slotIndex, DEFAULT_PORT_INDEX, - channel); + IccLogicalChannelRequest request = new IccLogicalChannelRequest(); + request.slotIndex = slotIndex; + request.channel = channel; + return telephony.iccCloseLogicalChannel(request); } } catch (RemoteException ex) { } catch (NullPointerException ex) { @@ -6917,8 +6932,12 @@ public class TelephonyManager { public boolean iccCloseLogicalChannel(int subId, int channel) { try { ITelephony telephony = getITelephony(); - if (telephony != null) - return telephony.iccCloseLogicalChannel(subId, channel); + if (telephony != null) { + IccLogicalChannelRequest request = new IccLogicalChannelRequest(); + request.subId = subId; + request.channel = channel; + return telephony.iccCloseLogicalChannel(request); + } } catch (RemoteException ex) { } catch (NullPointerException ex) { } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 00b57e665481c..d5c9ec44b9608 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -67,6 +67,7 @@ import com.android.ims.internal.IImsServiceFeatureCallback; import com.android.internal.telephony.CellNetworkScanResult; import com.android.internal.telephony.IBooleanConsumer; import com.android.internal.telephony.ICallForwardingInfoCallback; +import com.android.internal.telephony.IccLogicalChannelRequest; import com.android.internal.telephony.IImsStateCallback; import com.android.internal.telephony.IIntegerConsumer; import com.android.internal.telephony.INumberVerificationCallback; @@ -583,60 +584,25 @@ interface ITelephony { */ void setCellInfoListRate(int rateInMillis); - /** - * Opens a logical channel to the ICC card using the physical slot index and port index. - * - * Input parameters equivalent to TS 27.007 AT+CCHO command. - * - * @param slotIndex The physical slot index of the target ICC card - * @param portIndex The unique index referring to a port belonging to the SIM slot - * @param callingPackage the name of the package making the call. - * @param AID Application id. See ETSI 102.221 and 101.220. - * @param p2 P2 parameter (described in ISO 7816-4). - * @return an IccOpenLogicalChannelResponse object. - */ - IccOpenLogicalChannelResponse iccOpenLogicalChannelByPort( - int slotIndex, int portIndex, String callingPackage, String AID, int p2); - /** * Opens a logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHO command. * - * @param subId The subscription to use. - * @param callingPackage the name of the package making the call. - * @param AID Application id. See ETSI 102.221 and 101.220. - * @param p2 P2 parameter (described in ISO 7816-4). + * @param request the parcelable used to indicate how to open the logical channel. * @return an IccOpenLogicalChannelResponse object. */ - IccOpenLogicalChannelResponse iccOpenLogicalChannel( - int subId, String callingPackage, String AID, int p2); - - /** - * Closes a previously opened logical channel to the ICC card using the physical slot index and port index. - * - * Input parameters equivalent to TS 27.007 AT+CCHC command. - * - * @param slotIndex The physical slot index of the target ICC card - * @param portIndex The unique index referring to a port belonging to the SIM slot - * @param channel is the channel id to be closed as returned by a - * successful iccOpenLogicalChannel. - * @return true if the channel was closed successfully. - */ - boolean iccCloseLogicalChannelByPort(int slotIndex, int portIndex, int channel); + IccOpenLogicalChannelResponse iccOpenLogicalChannel(in IccLogicalChannelRequest request); /** * Closes a previously opened logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHC command. * - * @param subId The subscription to use. - * @param channel is the channel id to be closed as returned by a - * successful iccOpenLogicalChannel. + * @param request the parcelable used to indicate how to close the logical channel. * @return true if the channel was closed successfully. */ - @UnsupportedAppUsage(trackingBug = 171933273) - boolean iccCloseLogicalChannel(int subId, int channel); + boolean iccCloseLogicalChannel(in IccLogicalChannelRequest request); /** * Transmit an APDU to the ICC card over a logical channel using the physical slot index and port index. diff --git a/telephony/java/com/android/internal/telephony/IccLogicalChannelRequest.aidl b/telephony/java/com/android/internal/telephony/IccLogicalChannelRequest.aidl new file mode 100644 index 0000000000000..a84e752a98b37 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/IccLogicalChannelRequest.aidl @@ -0,0 +1,52 @@ +/* +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package com.android.internal.telephony; + +import android.os.IBinder; + +/** + * A request to open or close a logical channel to the ICC card. + * + * @hide + */ +@JavaDerive(toString=true, equals=true) +parcelable IccLogicalChannelRequest { + + /** Subscription id. */ + int subId = -1; + + /** Physical slot index of the ICC card. */ + int slotIndex = -1; + + /** The unique index referring to a port belonging to the ICC card slot. */ + int portIndex = 0; + + /** Package name for the calling app, used only when open channel. */ + @nullable String callingPackage; + + /** Application id, used only when open channel. */ + @nullable String aid; + + /** The P2 parameter described in ISO 7816-4, used only when open channel. */ + int p2 = 0; + + /** Channel number */ + int channel = -1; + + /** A IBinder object for server side to check if the request client is still living. */ + @nullable IBinder binder; +}