Refact the allowed network type
- If api's caller set the same allowed network type, then api return success directly.
- Reset the User's allowed network type and clear other reason's allowed
network type.
- change the getAllowedNetworkTypesForReason's permission as READ_PRECISE_PHONE_STATE
Bug: 180903931
Bug: 179814490
Test: atest cts/tests/tests/telephony/current/src/android/telephony/cts/TelephonyManagerTest.java#testSetAllowedNetworkTypesForReason_moreReason
atest cts/tests/tests/telephony/current/src/android/telephony/cts/TelephonyManagerTest.java#testSetAllowedNetworkTypesForReason
atest android.telephony.cts.TelephonyCallbackTest
Change-Id: Idc456b0a3d7504c95172a5960378cf5e25149649
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index c48f0fe..fea8b69 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -163,6 +163,7 @@
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.ProxyController;
import com.android.internal.telephony.RIL;
+import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.RadioInterfaceCapabilityController;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.SmsController;
@@ -6124,9 +6125,8 @@
@Override
public long getAllowedNetworkTypesForReason(int subId,
@TelephonyManager.AllowedNetworkTypesReason int reason) {
- TelephonyPermissions
- .enforeceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
- mApp, subId, "getAllowedNetworkTypesForReason");
+ TelephonyPermissions.enforeceCallingOrSelfReadPrecisePhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "getAllowedNetworkTypesForReason");
final long identity = Binder.clearCallingIdentity();
try {
return getPhoneFromSubId(subId).getAllowedNetworkTypes(reason);
@@ -6229,10 +6229,15 @@
return false;
}
- if (DBG) {
- log("setAllowedNetworkTypesForReason: " + reason
- + " value: " + allowedNetworkTypes);
+ log("setAllowedNetworkTypesForReason: " + reason + " value: "
+ + TelephonyManager.convertNetworkTypeBitmaskToString(allowedNetworkTypes));
+
+
+ if (allowedNetworkTypes == getPhoneFromSubId(subId).getAllowedNetworkTypes(reason)) {
+ log("setAllowedNetworkTypesForReason: " + reason + "does not change value");
+ return true;
}
+
final long identity = Binder.clearCallingIdentity();
try {
Boolean success = (Boolean) sendRequest(
@@ -7401,18 +7406,14 @@
setDataEnabledForReason(subId, TelephonyManager.DATA_ENABLED_REASON_USER,
getDefaultDataEnabled());
setNetworkSelectionModeAutomatic(subId);
- setAllowedNetworkTypesForReason(subId,
- TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER,
- RadioAccessFamily.getRafFromNetworkType(getDefaultNetworkType(subId)));
- setAllowedNetworkTypesForReason(subId,
- TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_CARRIER,
- RadioAccessFamily.getRafFromNetworkType(getDefaultNetworkType(subId)));
- setAllowedNetworkTypesForReason(subId,
- TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_POWER,
- RadioAccessFamily.getRafFromNetworkType(getDefaultNetworkType(subId)));
- setAllowedNetworkTypesForReason(subId,
- TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G,
- RadioAccessFamily.getRafFromNetworkType(getDefaultNetworkType(subId)));
+ Phone phone = getPhone(subId);
+ if (phone != null) {
+ SubscriptionManager.setSubscriptionProperty(subId,
+ SubscriptionManager.ALLOWED_NETWORK_TYPES,
+ "user=" + RadioAccessFamily.getRafFromNetworkType(
+ RILConstants.PREFERRED_NETWORK_MODE));
+ phone.loadAllowedNetworksFromSubscriptionDatabase();
+ }
setDataRoamingEnabled(subId, getDefaultDataRoamingEnabled(subId));
CarrierInfoManager.deleteAllCarrierKeysForImsiEncryption(mApp);
}