summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mark Chien <markchien@google.com> 2019-03-24 21:19:35 -0700
committer android-build-merger <android-build-merger@google.com> 2019-03-24 21:19:35 -0700
commita50d69cccce55a9de0bdb8e10400e760b3fd1edc (patch)
tree62bb36e776eee4e2fd6dee03dc5ed459d2fc730b
parent98b50b348ecc6b64f9275843bb482d76b6be11ee (diff)
parent594ee80cb1f47ed1b46a1799267ae68898259e12 (diff)
Merge "Fix the race between carrier config and DDS change" am: 36538bb38c am: 514010fc25
am: 594ee80cb1 Change-Id: Ie45c9b2ccb986ec92d4efbe99e9682e01304c28c
-rw-r--r--services/core/java/com/android/server/connectivity/Tethering.java9
-rw-r--r--services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java21
-rw-r--r--tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java11
3 files changed, 35 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index 35704d404ff3..37fe3d094179 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -247,7 +247,14 @@ public class Tethering extends BaseNetworkObserver {
(Intent ignored) -> {
mLog.log("OBSERVED default data subscription change");
updateConfiguration();
- mEntitlementMgr.reevaluateSimCardProvisioning();
+ // To avoid launch unexpected provisioning checks, ignore re-provisioning when
+ // no CarrierConfig loaded yet. Assume reevaluateSimCardProvisioning() will be
+ // triggered again when CarrierConfig is loaded.
+ if (mEntitlementMgr.getCarrierConfig() != null) {
+ mEntitlementMgr.reevaluateSimCardProvisioning();
+ } else {
+ mLog.log("IGNORED reevaluate provisioning due to no carrier config loaded");
+ }
});
mStateReceiver = new StateReceiver();
diff --git a/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java b/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java
index 65cc51610e72..70ab38983446 100644
--- a/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java
+++ b/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java
@@ -158,6 +158,21 @@ public class EntitlementManager {
}
}
+ /** Get carrier configuration bundle. */
+ public PersistableBundle getCarrierConfig() {
+ final CarrierConfigManager configManager = (CarrierConfigManager) mContext
+ .getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (configManager == null) return null;
+
+ final PersistableBundle carrierConfig = configManager.getConfig();
+
+ if (CarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfig)) {
+ return carrierConfig;
+ }
+
+ return null;
+ }
+
// The logic here is aimed solely at confirming that a CarrierConfig exists
// and affirms that entitlement checks are not required.
//
@@ -165,11 +180,7 @@ public class EntitlementManager {
// entirely so that this is more intuitive.
private boolean carrierConfigAffirmsEntitlementCheckNotRequired() {
// Check carrier config for entitlement checks
- final CarrierConfigManager configManager = (CarrierConfigManager) mContext
- .getSystemService(Context.CARRIER_CONFIG_SERVICE);
- if (configManager == null) return false;
-
- final PersistableBundle carrierConfig = configManager.getConfig();
+ final PersistableBundle carrierConfig = getCarrierConfig();
if (carrierConfig == null) return false;
// A CarrierConfigManager was found and it has a config.
diff --git a/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java b/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java
index 3944fad2ac9e..bac509802258 100644
--- a/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java
+++ b/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java
@@ -166,6 +166,7 @@ public final class EntitlementManagerTest {
.thenReturn(mCarrierConfigManager);
when(mCarrierConfigManager.getConfig()).thenReturn(mCarrierConfig);
mCarrierConfig.putBoolean(CarrierConfigManager.KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL, true);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true);
}
@Test
@@ -199,6 +200,16 @@ public final class EntitlementManagerTest {
}
@Test
+ public void toleratesCarrierConfigNotLoaded() {
+ setupForRequiredProvisioning();
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, false);
+ mEnMgr.updateConfiguration(
+ new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID));
+ // We still have a provisioning app configured, so still require provisioning.
+ assertTrue(mEnMgr.isTetherProvisioningRequired());
+ }
+
+ @Test
public void provisioningNotRequiredWhenAppNotFound() {
setupForRequiredProvisioning();
when(mResources.getStringArray(R.array.config_mobile_hotspot_provision_app))