diff options
| author | 2019-03-24 21:19:35 -0700 | |
|---|---|---|
| committer | 2019-03-24 21:19:35 -0700 | |
| commit | a50d69cccce55a9de0bdb8e10400e760b3fd1edc (patch) | |
| tree | 62bb36e776eee4e2fd6dee03dc5ed459d2fc730b | |
| parent | 98b50b348ecc6b64f9275843bb482d76b6be11ee (diff) | |
| parent | 594ee80cb1f47ed1b46a1799267ae68898259e12 (diff) | |
Merge "Fix the race between carrier config and DDS change" am: 36538bb38c am: 514010fc25
am: 594ee80cb1
Change-Id: Ie45c9b2ccb986ec92d4efbe99e9682e01304c28c
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)) |