Redesign the setPreferredNetworkType
Some APPs(like OMA DM) might enable or disable 5G settings, so redesign the setPreferredNetworkType behavior. 1. Create allowed_network_type in telephonyprovider 2. Create get/set allowed network type API 3. When APPs call setPreferredNetworkType() that will AND with allowed network type. Bug: 136730709 Test: By Manual 1. setAllowedNetwork to disable 5G 2. setPreferredNetworkTypeBitmask to set NR_LTE_GSM_WCDMA 3. framework set LTE_GSM_WCDMA to modem Change-Id: Ia257e6ddaa33c32bc09340a59c9daf71ce1fa8cf
This commit is contained in:
@@ -8248,6 +8248,7 @@ package android.provider {
|
||||
public static final class Telephony.SimInfo {
|
||||
field public static final String ACCESS_RULES = "access_rules";
|
||||
field public static final String ACCESS_RULES_FROM_CARRIER_CONFIGS = "access_rules_from_carrier_configs";
|
||||
field public static final String ALLOWED_NETWORK_TYPES = "allowed_network_types";
|
||||
field public static final String CARD_ID = "card_id";
|
||||
field public static final String CARRIER_ID = "carrier_id";
|
||||
field public static final String CARRIER_NAME = "carrier_name";
|
||||
@@ -10589,6 +10590,7 @@ package android.telephony {
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enableVideoCalling(boolean);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int);
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers(int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypes();
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.ImsiEncryptionInfo getCarrierInfoForImsiEncryption(int);
|
||||
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
|
||||
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int);
|
||||
@@ -10671,6 +10673,7 @@ package android.telephony {
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean resetRadioConfig();
|
||||
method @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) public void resetSettings();
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setAllowedNetworkTypes(long);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setAlwaysAllowMmsData(boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCarrierDataEnabled(boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setCarrierRestrictionRules(@NonNull android.telephony.CarrierRestrictionRules);
|
||||
|
||||
@@ -5374,5 +5374,11 @@ public final class Telephony {
|
||||
|
||||
/** Whether uicc applications is set to be enabled or disabled. By default it's enabled. */
|
||||
public static final String UICC_APPLICATIONS_ENABLED = "uicc_applications_enabled";
|
||||
|
||||
/**
|
||||
* TelephonyProvider column name for allowed network types. Indicate which network types
|
||||
* are allowed. Default is -1.
|
||||
*/
|
||||
public static final String ALLOWED_NETWORK_TYPES = "allowed_network_types";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -781,6 +781,12 @@ public class SubscriptionManager {
|
||||
*/
|
||||
public static final String UICC_APPLICATIONS_ENABLED = SimInfo.UICC_APPLICATIONS_ENABLED;
|
||||
|
||||
/**
|
||||
* Indicate which network type is allowed. By default it's enabled.
|
||||
* @hide
|
||||
*/
|
||||
public static final String ALLOWED_NETWORK_TYPES = SimInfo.ALLOWED_NETWORK_TYPES;
|
||||
|
||||
/**
|
||||
* Broadcast Action: The user has changed one of the default subs related to
|
||||
* data, phone calls, or sms</p>
|
||||
@@ -2433,7 +2439,28 @@ public class SubscriptionManager {
|
||||
try {
|
||||
return Integer.parseInt(result);
|
||||
} catch (NumberFormatException err) {
|
||||
logd("getBooleanSubscriptionProperty NumberFormat exception");
|
||||
logd("getIntegerSubscriptionProperty NumberFormat exception");
|
||||
}
|
||||
}
|
||||
return defValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns long value corresponding to query result.
|
||||
* @param subId Subscription Id of Subscription
|
||||
* @param propKey Column name in SubscriptionInfo database
|
||||
* @param defValue Default long value to be returned
|
||||
* @return long result value to be returned
|
||||
* @hide
|
||||
*/
|
||||
public static long getLongSubscriptionProperty(int subId, String propKey, long defValue,
|
||||
Context context) {
|
||||
String result = getSubscriptionProperty(subId, propKey, context);
|
||||
if (result != null) {
|
||||
try {
|
||||
return Long.parseLong(result);
|
||||
} catch (NumberFormatException err) {
|
||||
logd("getLongSubscriptionProperty NumberFormat exception");
|
||||
}
|
||||
}
|
||||
return defValue;
|
||||
|
||||
@@ -7658,7 +7658,9 @@ public class TelephonyManager {
|
||||
*
|
||||
* @return the preferred network type.
|
||||
* @hide
|
||||
* @deprecated Use {@link #getPreferredNetworkTypeBitmask} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@RequiresPermission((android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE))
|
||||
@UnsupportedAppUsage
|
||||
public @PrefNetworkMode int getPreferredNetworkType(int subId) {
|
||||
@@ -7702,6 +7704,30 @@ public class TelephonyManager {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the allowed network types.
|
||||
*
|
||||
* <p>Requires Permission:
|
||||
* {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE}
|
||||
* or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
|
||||
*
|
||||
* @return the allowed network type bitmask
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
@SystemApi
|
||||
public @NetworkTypeBitMask long getAllowedNetworkTypes() {
|
||||
try {
|
||||
ITelephony telephony = getITelephony();
|
||||
if (telephony != null) {
|
||||
return telephony.getAllowedNetworkTypes(getSubId());
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
Rlog.e(TAG, "getAllowedNetworkTypes RemoteException", ex);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the network selection mode to automatic.
|
||||
*
|
||||
@@ -7953,7 +7979,9 @@ public class TelephonyManager {
|
||||
* @param networkType the preferred network type
|
||||
* @return true on success; false on any failure.
|
||||
* @hide
|
||||
* @deprecated Use {@link #setPreferredNetworkTypeBitmask} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@UnsupportedAppUsage
|
||||
public boolean setPreferredNetworkType(int subId, @PrefNetworkMode int networkType) {
|
||||
try {
|
||||
@@ -7968,7 +7996,8 @@ public class TelephonyManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the preferred network type bitmask.
|
||||
* Set the preferred network type bitmask but if {@link #setAllowedNetworkTypes} has been set,
|
||||
* only the allowed network type will set to the modem.
|
||||
*
|
||||
* <p>If this object has been created with {@link #createForSubscriptionId}, applies to the
|
||||
* given subId. Otherwise, applies to {@link SubscriptionManager#getDefaultSubscriptionId()}
|
||||
@@ -7997,6 +8026,29 @@ public class TelephonyManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the allowed network types of the device. This is for carrier or privileged apps to
|
||||
* enable/disable certain network types on the device. The user preferred network types should
|
||||
* be set through {@link #setPreferredNetworkTypeBitmask}.
|
||||
*
|
||||
* @param allowedNetworkTypes The bitmask of allowed network types.
|
||||
* @return true on success; false on any failure.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
|
||||
@SystemApi
|
||||
public boolean setAllowedNetworkTypes(@NetworkTypeBitMask long allowedNetworkTypes) {
|
||||
try {
|
||||
ITelephony telephony = getITelephony();
|
||||
if (telephony != null) {
|
||||
return telephony.setAllowedNetworkTypes(getSubId(), allowedNetworkTypes);
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
Rlog.e(TAG, "setAllowedNetworkTypes RemoteException", ex);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the preferred network type to global mode which includes LTE, CDMA, EvDo and GSM/WCDMA.
|
||||
*
|
||||
|
||||
@@ -921,6 +921,23 @@ interface ITelephony {
|
||||
boolean setNetworkSelectionModeManual(
|
||||
int subId, in OperatorInfo operatorInfo, boolean persisSelection);
|
||||
|
||||
/**
|
||||
* Get the allowed network types that store in the telephony provider.
|
||||
*
|
||||
* @param subId the id of the subscription.
|
||||
* @return allowedNetworkTypes the allowed network types.
|
||||
*/
|
||||
long getAllowedNetworkTypes(int subId);
|
||||
|
||||
/**
|
||||
* Set the allowed network types.
|
||||
*
|
||||
* @param subId the id of the subscription.
|
||||
* @param allowedNetworkTypes the allowed network types.
|
||||
* @return true on success; false on any failure.
|
||||
*/
|
||||
boolean setAllowedNetworkTypes(int subId, long allowedNetworkTypes);
|
||||
|
||||
/**
|
||||
* Set the preferred network type.
|
||||
* Used for device configuration by some CDMA operators.
|
||||
|
||||
Reference in New Issue
Block a user