From 398d5d91136d6e2146bf56ad3bdbb326a835c8ef Mon Sep 17 00:00:00 2001 From: Michele Date: Fri, 21 Dec 2018 14:51:01 -0800 Subject: [PATCH] Add APIs to get/set if usage of multiple SIMs is restricted. Add API that indicates if the usage of multiple SIMs at the same time is allowed or restricted in order to support requirements from carriers for dual SIM devices Bug: 123537730 Test: Verified with test application. Change-Id: I5e3e5ff41927e43ead4a30988630cf9125d5a048 --- api/system-current.txt | 2 + .../android/telephony/TelephonyManager.java | 48 +++++++++++++++++++ .../internal/telephony/ITelephony.aidl | 12 +++++ 3 files changed, 62 insertions(+) diff --git a/api/system-current.txt b/api/system-current.txt index e0af359c999bd..ee41ee580c036 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7802,6 +7802,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCurrentPotentialEmergencyNumber(@NonNull String); method public boolean isDataConnectivityPossible(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle(); + method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isMultisimCarrierRestricted(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRadioOn(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); @@ -7818,6 +7819,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataActivationState(int); method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabled(int, boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataRoamingEnabled(boolean); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMultisimCarrierRestriction(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setPreferredNetworkTypeBitmap(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadio(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadioPower(boolean); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 80ee0a72799ef..9dd5a36031f18 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -10156,4 +10156,52 @@ public class TelephonyManager { */ public static final String EXTRA_NETWORK_COUNTRY = "android.telephony.extra.NETWORK_COUNTRY"; + + /** + * Indicate if the user is allowed to use multiple SIM cards at the same time to register + * on the network (e.g. Dual Standby or Dual Active) when the device supports it, or if the + * usage is restricted. This API is used to prevent usage of multiple SIM card, based on + * policies of the carrier. + *

Note: the API does not prevent access to the SIM cards for operations that don't require + * access to the network. + * + * @param isMultisimCarrierRestricted true if usage of multiple SIMs is restricted, false + * otherwise. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + public void setMultisimCarrierRestriction(boolean isMultisimCarrierRestricted) { + try { + ITelephony service = getITelephony(); + if (service != null) { + service.setMultisimCarrierRestriction(isMultisimCarrierRestricted); + } + } catch (RemoteException e) { + Log.e(TAG, "setMultisimCarrierRestriction RemoteException", e); + } + } + + /** + * Returns if the usage of multiple SIM cards at the same time to register on the network + * (e.g. Dual Standby or Dual Active) is restricted. + * + * @return true if usage of multiple SIMs is restricted, false otherwise. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + public boolean isMultisimCarrierRestricted() { + try { + ITelephony service = getITelephony(); + if (service != null) { + return service.isMultisimCarrierRestricted(); + } + } catch (RemoteException e) { + Log.e(TAG, "isMultisimCarrierRestricted RemoteException", e); + } + return true; + } } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 8237d39c4c3d8..b610050f69220 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1816,4 +1816,16 @@ interface ITelephony { * Enable or disable a logical modem stack associated with the slotIndex. */ boolean enableModemForSlot(int slotIndex, boolean enable); + + /** + * Indicate if the enablement of multi SIM functionality is restricted. + * @hide + */ + void setMultisimCarrierRestriction(boolean isMultisimCarrierRestricted); + + /** + * Returns if the usage of multiple SIM cards at the same time is restricted. + * @hide + */ + boolean isMultisimCarrierRestricted(); }