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

Commit 1cc7d75d authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge changes I07d964b9,Ifa5928e1 into udc-dev

* changes:
  Fix flicker in SIM card page
  Clean up DefaultSubscriptionController.getSummary
parents 91053048 29011256
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -26,25 +26,17 @@ import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;

public class CallsDefaultSubscriptionController extends DefaultSubscriptionController {

    private SubscriptionInfoEntity mSubscriptionInfoEntity;

    public CallsDefaultSubscriptionController(Context context, String preferenceKey,
            Lifecycle lifecycle, LifecycleOwner lifecycleOwner) {
        super(context, preferenceKey, lifecycle, lifecycleOwner);
    }

    @Override
    protected SubscriptionInfoEntity getDefaultSubscriptionInfo() {
        return mSubscriptionInfoEntity;
    }

    @Override
    protected int getDefaultSubscriptionId() {
        int defaultCallSubId = SubscriptionManager.getDefaultVoiceSubscriptionId();
        for (SubscriptionInfoEntity subInfo : mSubInfoEntityList) {
            int subId = subInfo.getSubId();
            if (subInfo.isActiveSubscriptionId && subId == defaultCallSubId) {
                mSubscriptionInfoEntity = subInfo;
                return subId;
            }
        }
+4 −104
Original line number Diff line number Diff line
@@ -19,11 +19,7 @@ package com.android.settings.network.telephony;
import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;

import android.content.ComponentName;
import android.content.Context;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.SubscriptionManager;
import android.view.View;

@@ -57,15 +53,10 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere

    protected ListPreference mPreference;
    protected SubscriptionManager mManager;
    protected TelecomManager mTelecomManager;
    protected MobileNetworkRepository mMobileNetworkRepository;
    protected LifecycleOwner mLifecycleOwner;
    private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver;

    private static final String EMERGENCY_ACCOUNT_HANDLE_ID = "E";
    private static final ComponentName PSTN_CONNECTION_SERVICE_COMPONENT =
            new ComponentName("com.android.phone",
                    "com.android.services.telephony.TelephonyConnectionService");
    private boolean mIsRtlMode;

    List<SubscriptionInfoEntity> mSubInfoEntityList = new ArrayList<>();
@@ -84,10 +75,6 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
        }
    }

    /** @return SubscriptionInfo for the default subscription for the service, or null if there
     * isn't one. */
    protected abstract SubscriptionInfoEntity getDefaultSubscriptionInfo();

    /** @return the id of the default subscription for the service, or
     * SubscriptionManager.INVALID_SUBSCRIPTION_ID if there isn't one. */
    protected abstract int getDefaultSubscriptionId();
@@ -125,6 +112,8 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
        // Set a summary placeholder to reduce flicker.
        mPreference.setSummaryProvider(pref -> mContext.getString(R.string.summary_placeholder));
        updateEntries();
    }

@@ -133,31 +122,11 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
        // Currently, cannot use ListPreference.setSummary() when the summary contains user
        // generated string, because ListPreference.getSummary() is using String.format() to format
        // the summary when the summary is set by ListPreference.setSummary().
        if (preference != null) {
        if (preference != null && !mSubInfoEntityList.isEmpty()) {
            preference.setSummaryProvider(pref -> getSummary());
        }
    }

    @Override
    public CharSequence getSummary() {
        final PhoneAccountHandle handle = getDefaultCallingAccountHandle();
        if ((handle != null) && (!isCallingAccountBindToSubscription(handle))) {
            // display VoIP account in summary when configured through settings within dialer
            return getLabelFromCallingAccount(handle);
        }
        final SubscriptionInfoEntity info = getDefaultSubscriptionInfo();
        if (info != null) {
            // display subscription based account
            return info.uniqueName;
        } else {
            if (isAskEverytimeSupported()) {
                return mContext.getString(R.string.calls_and_sms_ask_every_time);
            } else {
                return "";
            }
        }
    }

    @VisibleForTesting
    void updateEntries() {
        if (mPreference == null) {
@@ -179,6 +148,7 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
        final ArrayList<CharSequence> displayNames = new ArrayList<>();
        final ArrayList<CharSequence> subscriptionIds = new ArrayList<>();
        List<SubscriptionInfoEntity> list = getSubscriptionInfoList();
        if (list.isEmpty()) return;

        if (list.size() == 1) {
            mPreference.setEnabled(false);
@@ -218,76 +188,6 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
        }
    }

    /**
     * Get default calling account
     *
     * @return current calling account {@link PhoneAccountHandle}
     */
    public PhoneAccountHandle getDefaultCallingAccountHandle() {
        final PhoneAccountHandle currentSelectPhoneAccount =
                getTelecomManager().getUserSelectedOutgoingPhoneAccount();
        if (currentSelectPhoneAccount == null) {
            return null;
        }
        final List<PhoneAccountHandle> accountHandles =
                getTelecomManager().getCallCapablePhoneAccounts(false);
        final PhoneAccountHandle emergencyAccountHandle = new PhoneAccountHandle(
                PSTN_CONNECTION_SERVICE_COMPONENT, EMERGENCY_ACCOUNT_HANDLE_ID);
        if (currentSelectPhoneAccount.equals(emergencyAccountHandle)) {
            return null;
        }
        for (PhoneAccountHandle handle : accountHandles) {
            if (currentSelectPhoneAccount.equals(handle)) {
                return currentSelectPhoneAccount;
            }
        }
        return null;
    }

    @VisibleForTesting
    TelecomManager getTelecomManager() {
        if (mTelecomManager == null) {
            mTelecomManager = mContext.getSystemService(TelecomManager.class);
        }
        return mTelecomManager;
    }

    @VisibleForTesting
    PhoneAccount getPhoneAccount(PhoneAccountHandle handle) {
        return getTelecomManager().getPhoneAccount(handle);
    }

    /**
     * Check if calling account bind to subscription
     *
     * @param handle {@link PhoneAccountHandle} for specific calling account
     */
    public boolean isCallingAccountBindToSubscription(PhoneAccountHandle handle) {
        final PhoneAccount account = getPhoneAccount(handle);
        if (account == null) {
            return false;
        }
        return account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
    }

    /**
     * Get label from calling account
     *
     * @param handle to get label from {@link PhoneAccountHandle}
     * @return label of calling account
     */
    public CharSequence getLabelFromCallingAccount(PhoneAccountHandle handle) {
        CharSequence label = null;
        final PhoneAccount account = getPhoneAccount(handle);
        if (account != null) {
            label = account.getLabel();
        }
        if (label != null) {
            label = mContext.getPackageManager().getUserBadgedLabel(label, handle.getUserHandle());
        }
        return (label != null) ? label : "";
    }

    @VisibleForTesting
    protected List<SubscriptionInfoEntity> getSubscriptionInfoList() {
        return mSubInfoEntityList;
+0 −14
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.settings.network.telephony;

import android.content.Context;
import android.telecom.PhoneAccountHandle;
import android.telephony.SubscriptionManager;

import androidx.lifecycle.LifecycleOwner;
@@ -28,7 +27,6 @@ import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
public class SmsDefaultSubscriptionController extends DefaultSubscriptionController {

    private final boolean mIsAskEverytimeSupported;
    private SubscriptionInfoEntity mSubscriptionInfoEntity;

    public SmsDefaultSubscriptionController(Context context, String preferenceKey,
            Lifecycle lifecycle, LifecycleOwner lifecycleOwner) {
@@ -37,18 +35,12 @@ public class SmsDefaultSubscriptionController extends DefaultSubscriptionControl
                .getBoolean(com.android.internal.R.bool.config_sms_ask_every_time_support);
    }

    @Override
    protected SubscriptionInfoEntity getDefaultSubscriptionInfo() {
        return mSubscriptionInfoEntity;
    }

    @Override
    protected int getDefaultSubscriptionId() {
        int defaultSmsSubId = SubscriptionManager.getDefaultSmsSubscriptionId();
        for (SubscriptionInfoEntity subInfo : mSubInfoEntityList) {
            int subId = subInfo.getSubId();
            if (subInfo.isActiveSubscriptionId && subId == defaultSmsSubId) {
                mSubscriptionInfoEntity = subInfo;
                return subId;
            }
        }
@@ -65,12 +57,6 @@ public class SmsDefaultSubscriptionController extends DefaultSubscriptionControl
        return mIsAskEverytimeSupported;
    }

    @Override
    public PhoneAccountHandle getDefaultCallingAccountHandle() {
        // Not supporting calling account override by VoIP
        return null;
    }

    @Override
    public CharSequence getSummary() {
        return MobileNetworkUtils.getPreferredStatus(isRtlMode(), mContext, false,
+70 −70
Original line number Diff line number Diff line
@@ -16,15 +16,10 @@

package com.android.settings.network.telephony;

import static androidx.lifecycle.Lifecycle.Event;

import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;

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

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -52,7 +47,6 @@ import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -133,14 +127,12 @@ public class DefaultSubscriptionControllerTest {
        SubscriptionUtil.setActiveSubscriptionsForTesting(null);
    }

    private SubscriptionInfoEntity setupSubscriptionInfoEntity(String subId, int slotId,
            int carrierId, String displayName, String mcc, String mnc, String countryIso,
            int cardId, boolean isValid, boolean isActive, boolean isAvailable) {
        return new SubscriptionInfoEntity(subId, slotId, carrierId,
                displayName, displayName, 0, mcc, mnc, countryIso, false, cardId,
                TelephonyManager.DEFAULT_PORT_INDEX, false, null,
                SubscriptionManager.SUBSCRIPTION_TYPE_LOCAL_SIM, displayName, false,
                "1234567890", true, false, isValid, true, isActive, isAvailable, false);
    private SubscriptionInfoEntity setupSubscriptionInfoEntity(
            String subId, String displayName, String mcc, String mnc, String countryIso) {
        return new SubscriptionInfoEntity(subId, 1, 1, displayName, displayName, 0, mcc, mnc,
                countryIso, false, 1, TelephonyManager.DEFAULT_PORT_INDEX, false, null,
                SubscriptionManager.SUBSCRIPTION_TYPE_LOCAL_SIM, displayName, false, "1234567890",
                true, false, true, true, true, true, false);
    }

    @Test
@@ -152,22 +144,44 @@ public class DefaultSubscriptionControllerTest {
    }

    @Test
    public void isCallingAccountBindToSubscription_invalidAccount_withoutCrash() {
        doReturn(null).when(mTelecomManager).getPhoneAccount(any());
    public void getSummary_singleSub() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mController.displayPreference(mScreen);

        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);

        assertThat(mListPreference.getSummary().toString()).isEqualTo(SUB_ID_1);
    }

    @Test
    public void getSummary_twoSubs() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mSubscriptionInfoEntityList.add(mSubInfo2);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mController.displayPreference(mScreen);

        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);

        mController.isCallingAccountBindToSubscription(null);
        assertThat(mListPreference.getSummary().toString()).isEqualTo(SUB_ID_1);
    }

    @Test
    public void onPreferenceChange_prefChangedToSub2_callbackCalledCorrectly() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mSubscriptionInfoEntityList.add(mSubInfo2);
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);

        mController.displayPreference(mScreen);
        mListPreference.setValue("222");
@@ -177,14 +191,14 @@ public class DefaultSubscriptionControllerTest {

    @Test
    public void onPreferenceChange_prefChangedToAlwaysAsk_callbackCalledCorrectly() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mSubscriptionInfoEntityList.add(mSubInfo2);
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);

        mController.displayPreference(mScreen);
        mListPreference.setValue(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
@@ -197,14 +211,14 @@ public class DefaultSubscriptionControllerTest {
    @Test
    public void onPreferenceChange_prefBecomesAvailable_onPreferenceChangeCallbackNotNull() {
        // Start with only one sub active, so the pref is not available
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);
        mController.displayPreference(mScreen);
        assertThat(mController.isAvailable()).isTrue();

@@ -218,13 +232,12 @@ public class DefaultSubscriptionControllerTest {
        assertThat(mController.getDefaultSubscriptionId()).isEqualTo(2);
    }

    @Ignore
    @Test
    public void onSubscriptionsChanged_twoSubscriptionsDefaultChanges_selectedEntryGetsUpdated() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mSubscriptionInfoEntityList.add(mSubInfo2);
@@ -237,19 +250,19 @@ public class DefaultSubscriptionControllerTest {
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo2.subId));
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);
        assertThat(mListPreference.getEntry()).isEqualTo(DISPLAY_NAME_2);
        assertThat(mListPreference.getValue()).isEqualTo(mSubInfo2);
        assertThat(mListPreference.getValue()).isEqualTo(mSubInfo2.subId);
    }

    @Test
    public void onSubscriptionsChanged_goFromTwoSubscriptionsToOne_prefDisappears() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mSubscriptionInfoEntityList.add(mSubInfo2);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);
        mController.displayPreference(mScreen);

        mController.displayPreference(mScreen);
@@ -258,7 +271,6 @@ public class DefaultSubscriptionControllerTest {
        assertThat(mListPreference.isEnabled()).isTrue();

        mSubscriptionInfoEntityList.remove(mSubInfo2);
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);

        assertThat(mController.isAvailable()).isTrue();
@@ -269,20 +281,19 @@ public class DefaultSubscriptionControllerTest {
    @Test
    @UiThreadTest
    public void onSubscriptionsChanged_goFromOneSubscriptionToTwo_prefAppears() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);
        mController.displayPreference(mScreen);
        assertThat(mController.isAvailable()).isTrue();
        assertThat(mListPreference.isVisible()).isTrue();
        assertThat(mListPreference.isEnabled()).isFalse();

        mSubscriptionInfoEntityList.add(mSubInfo2);
        mController.setSubscriptionInfoList(mSubscriptionInfoEntityList);
        mController.onActiveSubInfoChanged(mSubscriptionInfoEntityList);

        assertThat(mController.isAvailable()).isTrue();
@@ -290,15 +301,14 @@ public class DefaultSubscriptionControllerTest {
        assertThat(mListPreference.isEnabled()).isTrue();
    }

    @Ignore
    @Test
    public void onSubscriptionsChanged_goFromTwoToThreeSubscriptions_listGetsUpdated() {
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, 1, 1, DISPLAY_NAME_1, SUB_MCC_1,
                SUB_MNC_1, SUB_COUNTRY_ISO_1, 1, true, true, true);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, 1, 1, DISPLAY_NAME_2, SUB_MCC_2,
                SUB_MNC_2, SUB_COUNTRY_ISO_2, 1, true, true, true);
        mSubInfo3 = setupSubscriptionInfoEntity(SUB_ID_3, 1, 1, DISPLAY_NAME_3, SUB_MCC_3,
                SUB_MNC_3, SUB_COUNTRY_ISO_3, 1, true, true, true);
        mSubInfo1 = setupSubscriptionInfoEntity(SUB_ID_1, DISPLAY_NAME_1, SUB_MCC_1, SUB_MNC_1,
                SUB_COUNTRY_ISO_1);
        mSubInfo2 = setupSubscriptionInfoEntity(SUB_ID_2, DISPLAY_NAME_2, SUB_MCC_2, SUB_MNC_2,
                SUB_COUNTRY_ISO_2);
        mSubInfo3 = setupSubscriptionInfoEntity(SUB_ID_3, DISPLAY_NAME_3, SUB_MCC_3, SUB_MNC_3,
                SUB_COUNTRY_ISO_3);
        mController.setDefaultSubscription(Integer.parseInt(mSubInfo1.subId));
        mSubscriptionInfoEntityList.add(mSubInfo1);
        mSubscriptionInfoEntityList.add(mSubInfo2);
@@ -334,20 +344,14 @@ public class DefaultSubscriptionControllerTest {
        return sub;
    }

    private class TestDefaultSubscriptionController extends DefaultSubscriptionController {
    private static class TestDefaultSubscriptionController extends DefaultSubscriptionController {
        int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        private List<SubscriptionInfoEntity> mSubscriptionInfoEntity;

        TestDefaultSubscriptionController(Context context, String preferenceKey,
                Lifecycle lifecycle, LifecycleOwner lifecycleOwner) {
            super(context, preferenceKey, lifecycle, lifecycleOwner);
        }

        @Override
        protected SubscriptionInfoEntity getDefaultSubscriptionInfo() {
            return null;
        }

        @Override
        protected int getDefaultSubscriptionId() {
            return mSubId;
@@ -359,12 +363,8 @@ public class DefaultSubscriptionControllerTest {
        }

        @Override
        protected List<SubscriptionInfoEntity> getSubscriptionInfoList() {
            return mSubscriptionInfoEntity;
        }

        public void setSubscriptionInfoList(List<SubscriptionInfoEntity> list) {
            mSubscriptionInfoEntity = list;
        public CharSequence getSummary() {
            return String.valueOf(mSubId);
        }
    }
}