Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 514010fc authored by Mark Chien's avatar Mark Chien Committed by android-build-merger
Browse files

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

am: 36538bb3

Change-Id: Idf1e5c33560845095028127d6bc3f384471bd4a1
parents 34198fac 36538bb3
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -247,7 +247,14 @@ public class Tethering extends BaseNetworkObserver {
                (Intent ignored) -> {
                    mLog.log("OBSERVED default data subscription change");
                    updateConfiguration();
                    // 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();

+16 −5
Original line number Diff line number Diff line
@@ -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.
+11 −0
Original line number Diff line number Diff line
@@ -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();