Merge "Fix the race between carrier config and DDS change"

This commit is contained in:
Mark Chien
2019-03-25 03:48:02 +00:00
committed by Gerrit Code Review
3 changed files with 35 additions and 6 deletions

View File

@@ -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();

View File

@@ -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.

View File

@@ -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
@@ -198,6 +199,16 @@ public final class EntitlementManagerTest {
assertTrue(mEnMgr.isTetherProvisioningRequired());
}
@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();