diff options
| author | 2019-04-26 18:39:50 -0700 | |
|---|---|---|
| committer | 2019-04-29 19:15:08 +0000 | |
| commit | b0941aa5f9ce2abc2dfa5f7c4099aae7c51c4953 (patch) | |
| tree | 4f873746bef54338c0e58025e514a1f3b9cef1ae | |
| parent | 5ad5cdc394a11cf31f65602f5fd1c0721c54a366 (diff) | |
Don't trigger data alert before carrier configs load.
Bug: 129011739
Test: Manual verification. Also added a test to
NetworkPolicyManagerServiceTest.
Change-Id: I6921dea600df551a16f0b42962eac5f4e9b097a5
| -rw-r--r-- | services/core/java/com/android/server/net/NetworkPolicyManagerService.java | 9 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java | 31 |
2 files changed, 39 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index c6f6c50a308d..19ff2c11d14c 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1164,6 +1164,15 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // Carrier might want to manage notifications themselves final PersistableBundle config = mCarrierConfigManager.getConfigForSubId(subId); + if (!CarrierConfigManager.isConfigForIdentifiedCarrier(config)) { + if (LOGV) Slog.v(TAG, "isConfigForIdentifiedCarrier returned false"); + // Don't show notifications until we confirm that the loaded config is from an + // identified carrier, which may want to manage their own notifications. This method + // should be called every time the carrier config changes anyways, and there's no + // reason to alert if there isn't a carrier. + return; + } + final boolean notifyWarning = getBooleanDefeatingNullable(config, KEY_DATA_WARNING_NOTIFICATION_BOOL, true); final boolean notifyLimit = getBooleanDefeatingNullable(config, 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 99b827c11853..bdc46ec808c1 100644 --- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java @@ -263,6 +263,7 @@ public class NetworkPolicyManagerServiceTest { private static final int INVALID_CARRIER_CONFIG_VALUE = -9999; private long mDefaultWarningBytes; // filled in with the actual default before tests are run private long mDefaultLimitBytes; // filled in with the actual default before tests are run + private PersistableBundle mCarrierConfig = CarrierConfigManager.getDefaultConfig(); private static final int APP_ID_A = android.os.Process.FIRST_APPLICATION_UID + 4; private static final int APP_ID_B = android.os.Process.FIRST_APPLICATION_UID + 8; @@ -409,6 +410,9 @@ public class NetworkPolicyManagerServiceTest { doNothing().when(mConnectivityManager) .registerNetworkCallback(any(), mNetworkCallbackCaptor.capture()); + // Create the expected carrier config + mCarrierConfig.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true); + // Prepare NPMS. mService.systemReady(mService.networkScoreAndNetworkManagementServiceReady()); @@ -1086,6 +1090,25 @@ public class NetworkPolicyManagerServiceTest { isA(Notification.class), eq(UserHandle.ALL)); } + // Push over warning, but with a config that isn't from an identified carrier + { + history.clear(); + history.recordData(start, end, + new NetworkStats.Entry(DataUnit.MEGABYTES.toBytes(1799), 0L, 0L, 0L, 0)); + + reset(mTelephonyManager, mNetworkManager, mNotifManager); + expectMobileDefaults(); + expectDefaultCarrierConfig(); + + mService.updateNetworks(); + + verify(mTelephonyManager, atLeastOnce()).setPolicyDataEnabled(true, TEST_SUB_ID); + verify(mNetworkManager, atLeastOnce()).setInterfaceQuota(TEST_IFACE, + DataUnit.MEGABYTES.toBytes(1800 - 1799)); + // Since this isn't from the identified carrier, there should be no notifications + verify(mNotifManager, never()).notifyAsUser(any(), anyInt(), any(), any()); + } + // Push over limit { history.clear(); @@ -1812,7 +1835,7 @@ public class NetworkPolicyManagerServiceTest { private void expectNetworkState(boolean roaming) throws Exception { when(mCarrierConfigManager.getConfigForSubId(eq(TEST_SUB_ID))) - .thenReturn(CarrierConfigManager.getDefaultConfig()); + .thenReturn(mCarrierConfig); when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[] { new NetworkState(buildNetworkInfo(), buildLinkProperties(TEST_IFACE), @@ -1821,10 +1844,16 @@ public class NetworkPolicyManagerServiceTest { }); } + private void expectDefaultCarrierConfig() throws Exception { + when(mCarrierConfigManager.getConfigForSubId(eq(TEST_SUB_ID))) + .thenReturn(CarrierConfigManager.getDefaultConfig()); + } + private void expectMobileDefaults() throws Exception { when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn( new int[] { TEST_SUB_ID }); when(mTelephonyManager.getSubscriberId(TEST_SUB_ID)).thenReturn(TEST_IMSI); + doNothing().when(mTelephonyManager).setPolicyDataEnabled(anyBoolean(), anyInt()); expectNetworkState(false /* roaming */); } |