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

Commit 36538bb3 authored by Mark Chien's avatar Mark Chien Committed by Gerrit Code Review
Browse files

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

parents bcd3bed5 29a650c9
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();