diff --git a/api/system-current.txt b/api/system-current.txt index 054afb8748aff..cbb64cae85105 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -10131,6 +10131,7 @@ package android.telephony { 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 setOpportunisticNetworkState(boolean); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPolicyDataEnabled(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setPreferredNetworkTypeBitmask(long); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadio(boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRadioEnabled(boolean); diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index fbbc67c10a6a7..4a45730ccca53 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1780,7 +1780,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); for (int i = 0; i < matchingSubIds.size(); i++) { final int subId = matchingSubIds.get(i); - tm.setPolicyDataEnabled(enabled, subId); + tm.createForSubscriptionId(subId).setPolicyDataEnabled(enabled); } } } @@ -1819,7 +1819,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final List mergedSubscriberIdsList = new ArrayList(); final SparseArray subIdToSubscriberId = new SparseArray<>(subList.size()); - for (SubscriptionInfo sub : subList) { + for (final SubscriptionInfo sub : subList) { final TelephonyManager tmSub = tm.createForSubscriptionId(sub.getSubscriptionId()); final String subscriberId = tmSub.getSubscriberId(); if (!TextUtils.isEmpty(subscriberId)) { diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java index 7529bc5cf6399..28e6830515f00 100644 --- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java @@ -1138,11 +1138,11 @@ public class NetworkPolicyManagerServiceTest { new NetworkStats.Entry(DataUnit.MEGABYTES.toBytes(360), 0L, 0L, 0L, 0)); reset(mTelephonyManager, mNetworkManager, mNotifManager); - expectMobileDefaults(); + TelephonyManager tmSub = expectMobileDefaults(); mService.updateNetworks(); - verify(mTelephonyManager, atLeastOnce()).setPolicyDataEnabled(true, TEST_SUB_ID); + verify(tmSub, atLeastOnce()).setPolicyDataEnabled(true); verify(mNetworkManager, atLeastOnce()).setInterfaceQuota(TEST_IFACE, DataUnit.MEGABYTES.toBytes(1800 - 360)); verify(mNotifManager, never()).notifyAsUser(any(), anyInt(), any(), any()); @@ -1155,11 +1155,11 @@ public class NetworkPolicyManagerServiceTest { new NetworkStats.Entry(DataUnit.MEGABYTES.toBytes(1799), 0L, 0L, 0L, 0)); reset(mTelephonyManager, mNetworkManager, mNotifManager); - expectMobileDefaults(); + TelephonyManager tmSub = expectMobileDefaults(); mService.updateNetworks(); - verify(mTelephonyManager, atLeastOnce()).setPolicyDataEnabled(true, TEST_SUB_ID); + verify(tmSub, atLeastOnce()).setPolicyDataEnabled(true); verify(mNetworkManager, atLeastOnce()).setInterfaceQuota(TEST_IFACE, DataUnit.MEGABYTES.toBytes(1800 - 1799)); verify(mNotifManager, atLeastOnce()).notifyAsUser(any(), eq(TYPE_WARNING), @@ -1173,12 +1173,12 @@ public class NetworkPolicyManagerServiceTest { new NetworkStats.Entry(DataUnit.MEGABYTES.toBytes(1799), 0L, 0L, 0L, 0)); reset(mTelephonyManager, mNetworkManager, mNotifManager); - expectMobileDefaults(); + TelephonyManager tmSub = expectMobileDefaults(); expectDefaultCarrierConfig(); mService.updateNetworks(); - verify(mTelephonyManager, atLeastOnce()).setPolicyDataEnabled(true, TEST_SUB_ID); + verify(tmSub, atLeastOnce()).setPolicyDataEnabled(true); verify(mNetworkManager, atLeastOnce()).setInterfaceQuota(TEST_IFACE, DataUnit.MEGABYTES.toBytes(1800 - 1799)); // Since this isn't from the identified carrier, there should be no notifications @@ -1192,11 +1192,11 @@ public class NetworkPolicyManagerServiceTest { new NetworkStats.Entry(DataUnit.MEGABYTES.toBytes(1810), 0L, 0L, 0L, 0)); reset(mTelephonyManager, mNetworkManager, mNotifManager); - expectMobileDefaults(); + TelephonyManager tmSub = expectMobileDefaults(); mService.updateNetworks(); - verify(mTelephonyManager, atLeastOnce()).setPolicyDataEnabled(false, TEST_SUB_ID); + verify(tmSub, atLeastOnce()).setPolicyDataEnabled(false); verify(mNetworkManager, atLeastOnce()).setInterfaceQuota(TEST_IFACE, 1); verify(mNotifManager, atLeastOnce()).notifyAsUser(any(), eq(TYPE_LIMIT), isA(Notification.class), eq(UserHandle.ALL)); @@ -1205,12 +1205,12 @@ public class NetworkPolicyManagerServiceTest { // Snooze limit { reset(mTelephonyManager, mNetworkManager, mNotifManager); - expectMobileDefaults(); + TelephonyManager tmSub = expectMobileDefaults(); mService.snoozeLimit(NetworkTemplate.buildTemplateMobileAll(TEST_IMSI)); mService.updateNetworks(); - verify(mTelephonyManager, atLeastOnce()).setPolicyDataEnabled(true, TEST_SUB_ID); + verify(tmSub, atLeastOnce()).setPolicyDataEnabled(true); verify(mNetworkManager, atLeastOnce()).setInterfaceQuota(TEST_IFACE, Long.MAX_VALUE); verify(mNotifManager, atLeastOnce()).notifyAsUser(any(), eq(TYPE_LIMIT_SNOOZED), @@ -1928,10 +1928,11 @@ public class NetworkPolicyManagerServiceTest { .thenReturn(CarrierConfigManager.getDefaultConfig()); } - private void expectMobileDefaults() throws Exception { - setupTelephonySubscriptionManagers(TEST_SUB_ID, TEST_IMSI); - doNothing().when(mTelephonyManager).setPolicyDataEnabled(anyBoolean(), anyInt()); + private TelephonyManager expectMobileDefaults() throws Exception { + TelephonyManager tmSub = setupTelephonySubscriptionManagers(TEST_SUB_ID, TEST_IMSI); + doNothing().when(tmSub).setPolicyDataEnabled(anyBoolean()); expectNetworkState(false /* roaming */); + return tmSub; } private void verifyAdvisePersistThreshold() throws Exception { @@ -2090,8 +2091,10 @@ public class NetworkPolicyManagerServiceTest { /** * Creates a mock {@link TelephonyManager} and {@link SubscriptionManager}. + * */ - private void setupTelephonySubscriptionManagers(int subscriptionId, String subscriberId) { + private TelephonyManager setupTelephonySubscriptionManagers(int subscriptionId, + String subscriberId) { when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn( createSubscriptionInfoList(subscriptionId)); @@ -2101,6 +2104,7 @@ public class NetworkPolicyManagerServiceTest { when(subTelephonyManager.getSubscriberId()).thenReturn(subscriberId); when(mTelephonyManager.createForSubscriptionId(subscriptionId)) .thenReturn(subTelephonyManager); + return subTelephonyManager; } /** diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index a778f023c4a35..209d6fd6239a2 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -10520,14 +10520,15 @@ public class TelephonyManager { /** * Policy control of data connection. Usually used when data limit is passed. * @param enabled True if enabling the data, otherwise disabling. - * @param subId sub id * @hide */ - public void setPolicyDataEnabled(boolean enabled, int subId) { + @SystemApi + @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + public void setPolicyDataEnabled(boolean enabled) { try { ITelephony service = getITelephony(); if (service != null) { - service.setPolicyDataEnabled(enabled, subId); + service.setPolicyDataEnabled(enabled, getSubId()); } } catch (RemoteException e) { Log.e(TAG, "Error calling ITelephony#setPolicyDataEnabled", e);