Merge "Add telephony API to switch multi sim config"

This commit is contained in:
Nazanin Bakhshi
2019-01-31 03:44:15 +00:00
committed by Gerrit Code Review
4 changed files with 60 additions and 32 deletions

View File

@@ -43097,6 +43097,7 @@ package android.telephony {
method public boolean setVoiceMailNumber(String, String);
method @Deprecated public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri);
method @Deprecated public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void switchMultiSimConfig(int);
method public boolean updateAvailableNetworks(java.util.List<android.telephony.AvailableNetworkInfo>);
field public static final String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL";
field public static final String ACTION_NETWORK_COUNTRY_CHANGED = "android.telephony.action.NETWORK_COUNTRY_CHANGED";

View File

@@ -349,41 +349,30 @@ public class TelephonyManager {
* Returns 0 if none of voice, sms, data is not supported
* Returns 1 for Single standby mode (Single SIM functionality)
* Returns 2 for Dual standby mode.(Dual SIM functionality)
* Returns 3 for Tri standby mode.(Tri SIM functionality)
*/
public int getPhoneCount() {
int phoneCount = 1;
switch (getMultiSimConfiguration()) {
case UNKNOWN:
// if voice or sms or data is supported, return 1 otherwise 0
if (isVoiceCapable() || isSmsCapable()) {
phoneCount = 1;
} else {
// todo: try to clean this up further by getting rid of the nested conditions
if (mContext == null) {
phoneCount = 1;
} else {
// check for data support
ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
Context.CONNECTIVITY_SERVICE);
if (cm == null) {
phoneCount = 1;
} else {
if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) {
phoneCount = 1;
} else {
phoneCount = 0;
}
}
}
int phoneCount = 0;
// check for voice and data support, 0 if not supported
if (!isVoiceCapable() && !isSmsCapable()) {
ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(
Context.CONNECTIVITY_SERVICE);
if (cm != null) {
if (!cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) {
return phoneCount;
}
break;
case DSDS:
case DSDA:
phoneCount = PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM;
break;
case TSTS:
phoneCount = PhoneConstants.MAX_PHONE_COUNT_TRI_SIM;
break;
}
}
phoneCount = 1;
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
phoneCount = telephony.getNumOfActiveSims();
}
} catch (RemoteException ex) {
Rlog.e(TAG, "getNumOfActiveSims RemoteException", ex);
}
return phoneCount;
}
@@ -10051,4 +10040,30 @@ public class TelephonyManager {
*/
public static final String EXTRA_NETWORK_COUNTRY =
"android.telephony.extra.NETWORK_COUNTRY";
/**
* Switch configs to enable multi-sim or switch back to single-sim
* <p>Requires Permission:
* {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the
* calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
* @param numOfSims number of live SIMs we want to switch to
* @throws android.os.RemoteException
*/
@SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public void switchMultiSimConfig(int numOfSims) {
//only proceed if multi-sim is not restricted
if (isMultisimCarrierRestricted()) {
Rlog.e(TAG, "switchMultiSimConfig not possible. It is restricted.");
return;
}
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
telephony.switchMultiSimConfig(numOfSims);
}
} catch (RemoteException ex) {
Rlog.e(TAG, "switchMultiSimConfig RemoteException", ex);
}
}
}

View File

@@ -1829,4 +1829,15 @@ interface ITelephony {
* @hide
*/
boolean isMultisimCarrierRestricted();
/**
* Switch configs to enable multi-sim or switch back to single-sim
* @hide
*/
void switchMultiSimConfig(int numOfSims);
/**
* Get how many modems have been activated on the phone
* @hide
*/
int getNumOfActiveSims();
}

View File

@@ -404,6 +404,7 @@ public interface RILConstants {
int RIL_REQUEST_SET_PREFERRED_DATA_MODEM = 204;
int RIL_REQUEST_EMERGENCY_DIAL = 205;
int RIL_REQUEST_GET_PHONE_CAPABILITY = 206;
int RIL_REQUEST_SWITCH_DUAL_SIM_CONFIG = 207;
/* Responses begin */
int RIL_RESPONSE_ACKNOWLEDGEMENT = 800;