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

Commit c142fbe7 authored by tom hsu's avatar tom hsu Committed by Tom Hsu
Browse files

Avoid fetch all carrierconfig to cache.

Flag: EXEMPT bug fix
Fix: b/411026956
Test: atest pass
Change-Id: Ia25a966c42b6c0cf0ebbc69539300365adf534bd
parent 5653337b
Loading
Loading
Loading
Loading
+29 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.telephony.CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANG
import static android.telephony.SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;

import android.annotation.Nullable;
import android.annotation.TestApi;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -154,6 +155,33 @@ public class CarrierConfigCache {
        }
    }

    /**
     * Gets the specific Carrier-Configurations for a particular subscription, which is associated
     * with a specific SIM card. If an invalid subId is used, the returned config will contain
     * default values.
     *
     * @param subId the subscription ID, normally obtained from {@link SubscriptionManager}.
     * @return A {@link PersistableBundle} containing the config for the given subId, or default
     * values for an invalid subId.
     */
    public @Nullable PersistableBundle getSpecificConfigsForSubId(int subId,
            @NonNull String... keys) {
        if (sCarrierConfigManager == null) return null;

        synchronized (sCarrierConfigs) {
            if (sCarrierConfigs.containsKey(subId)) {
                return sCarrierConfigs.get(subId);
            }
            final PersistableBundle config = sCarrierConfigManager.getConfigForSubId(subId, keys);
            if (config == null) {
                Log.e(TAG, "Could not get carrier config, subId:" + subId);
                return null;
            }
            sCarrierConfigs.put(subId, config);
            return config;
        }
    }

    /**
     * Gets the Carrier-Configuration for the default subscription.
     *
+17 −4
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@ public class SatelliteSettingPreferenceController extends
    public SatelliteSettingPreferenceController(@NonNull Context context, @NonNull String key) {
        super(context, key);
        mCarrierConfigCache = CarrierConfigCache.getInstance(mContext);
        mSatelliteManager = mContext.getSystemService(SatelliteManager.class);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
    }

    /**
@@ -79,12 +81,15 @@ public class SatelliteSettingPreferenceController extends
    public void initialize(int subId) {
        logd("initialize(), subId=" + subId);
        mSubId = subId;
        mSatelliteManager = mContext.getSystemService(SatelliteManager.class);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
        if (mTelephonyManager != null) {
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
        }
        mCarrierConfigs = mCarrierConfigCache.getConfigForSubId(subId);
        if (mCarrierConfigs == null) {
            return;
        }
        mCarrierConfigs = mCarrierConfigCache.getSpecificConfigsForSubId(
                subId, KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
                KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT);
    }

    @Override
@@ -93,7 +98,15 @@ public class SatelliteSettingPreferenceController extends
            return UNSUPPORTED_ON_DEVICE;
        }

        if (!mCarrierConfigs.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL)) {
        if (mCarrierConfigs.isEmpty()) {
            // for search
            mCarrierConfigs = mCarrierConfigCache.getSpecificConfigsForSubId(
                    subId,
                    KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
                    KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT);
        }

        if (!mCarrierConfigs.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false)) {
            return CONDITIONALLY_UNAVAILABLE;
        }

+16 −5
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ public class SatelliteSettingsPreferenceCategoryController extends
    public SatelliteSettingsPreferenceCategoryController(Context context, String key) {
        super(context, key);
        mCarrierConfigCache = CarrierConfigCache.getInstance(mContext);
        mSatelliteManager = mContext.getSystemService(SatelliteManager.class);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
    }

    /**
@@ -75,8 +77,9 @@ public class SatelliteSettingsPreferenceCategoryController extends
    public void init(int subId) {
        Log.d(TAG, "init(), subId=" + subId);
        mSubId = subId;
        mSatelliteManager = mContext.getSystemService(SatelliteManager.class);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
        if (mTelephonyManager != null) {
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
        }
        requestIsSatelliteSupported();
    }

@@ -99,7 +102,14 @@ public class SatelliteSettingsPreferenceCategoryController extends
        if (!com.android.internal.telephony.flags.Flags.carrierEnabledSatelliteFlag()) {
            return UNSUPPORTED_ON_DEVICE;
        }
        final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId);
        PersistableBundle carrierConfig =
                mCarrierConfigCache.getSpecificConfigsForSubId(
                        subId, KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
                        KEY_SATELLITE_ESOS_SUPPORTED_BOOL, KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);

        if (carrierConfig == null) {
            carrierConfig = new PersistableBundle();
        }

        boolean isSatelliteConnectedTypeIsAuto =
                CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC == carrierConfig.getInt(
@@ -114,10 +124,11 @@ public class SatelliteSettingsPreferenceCategoryController extends

        boolean isSatelliteSosSupported = false;
        if (Flags.satelliteOemSettingsUxMigration()) {
            isSatelliteSosSupported = carrierConfig.getBoolean(KEY_SATELLITE_ESOS_SUPPORTED_BOOL);
            isSatelliteSosSupported = carrierConfig.getBoolean(KEY_SATELLITE_ESOS_SUPPORTED_BOOL,
                    false);
        }

        if (!carrierConfig.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL)) {
        if (!carrierConfig.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false)) {
            return UNSUPPORTED_ON_DEVICE;
        }

+4 −2
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -87,7 +88,8 @@ public class SatelliteSettingPreferenceControllerTest {
        when(mContext.getSystemService(SatelliteManager.class)).thenReturn(satelliteManager);
        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
        when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)).thenReturn(mTelephonyManager);
        when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig);
        when(mCarrierConfigCache.getSpecificConfigsForSubId(eq(TEST_SUB_ID), any())).thenReturn(
                mCarrierConfig);
        mController = new SatelliteSettingPreferenceController(mContext, KEY);
    }

+4 −1
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

@@ -76,7 +78,8 @@ public class SatelliteSettingsPreferenceCategoryControllerTest {
        SatelliteManager satelliteManager = new SatelliteManager(mContext);
        CarrierConfigCache.setTestInstance(mContext, mCarrierConfigCache);
        mController = new SatelliteSettingsPreferenceCategoryController(mContext, KEY);
        when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mPersistableBundle);
        when(mCarrierConfigCache.getSpecificConfigsForSubId(eq(TEST_SUB_ID), any())).thenReturn(
                mPersistableBundle);
        mPersistableBundle.putInt(KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
                CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
        when(mContext.getSystemService(SatelliteManager.class)).thenReturn(satelliteManager);