From 233d6b292fdede0c1f38c3284996e23158142546 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 Merged-In: I5e3e5ff41927e43ead4a30988630cf9125d5a048 (cherry picked from commit 398d5d91136d6e2146bf56ad3bdbb326a835c8ef) --- 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 97094c7b62b53..097cb70b911fd 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6316,6 +6316,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(); @@ -6332,6 +6333,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 setRadio(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadioPower(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerState(int); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 9a279d3ecfe9c..5c86efb2d678f 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -9981,4 +9981,52 @@ public class TelephonyManager { } return ret; } + + /** + * 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 77a63bdc3649f..a12792a8cfa66 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1817,4 +1817,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(); }