Merge "Always show disabled pSIMs in single-sim mode" into qt-dev am: cd07aa1cc4
am: 4d9ff1e113

Change-Id: I7b0a4bd4d0ac01c17998784bbf8ff49e025a28a6
diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java
index a2e4116..d0e14ce 100644
--- a/src/com/android/settings/network/MobileNetworkListController.java
+++ b/src/com/android/settings/network/MobileNetworkListController.java
@@ -98,7 +98,7 @@
         mPreferences = new ArrayMap<>();
 
         final List<SubscriptionInfo> subscriptions = SubscriptionUtil.getAvailableSubscriptions(
-                mSubscriptionManager);
+                mContext);
         for (SubscriptionInfo info : subscriptions) {
             final int subId = info.getSubscriptionId();
             Preference pref = existingPreferences.remove(subId);
diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java
index ae115eb..9498c4e 100644
--- a/src/com/android/settings/network/MobileNetworkSummaryController.java
+++ b/src/com/android/settings/network/MobileNetworkSummaryController.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.UserManager;
+import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.euicc.EuiccManager;
@@ -99,7 +100,7 @@
     @Override
     public CharSequence getSummary() {
         final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
-                mSubscriptionManager);
+                mContext);
         if (subs.isEmpty()) {
             if (MobileNetworkUtils.showEuiccSettings(mContext)) {
                 return mContext.getResources().getString(
@@ -132,7 +133,7 @@
         mPreference.setEnabled(!mChangeListener.isAirplaneModeOn());
 
         final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
-                mSubscriptionManager);
+                mContext);
 
         if (subs.isEmpty()) {
             if (MobileNetworkUtils.showEuiccSettings(mContext)) {
@@ -154,6 +155,7 @@
             if (subs.size() == 1) {
                 mPreference.setOnPreferenceClickListener((Preference pref) -> {
                     final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
+                    intent.putExtra(Settings.EXTRA_SUB_ID, subs.get(0).getSubscriptionId());
                     mContext.startActivity(intent);
                     return true;
                 });
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 5f1beca..86655d4 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -16,8 +16,15 @@
 
 package com.android.settings.network;
 
+import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
+
+import static com.android.internal.util.CollectionUtils.emptyIfNull;
+
+import android.content.Context;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.UiccSlotInfo;
 import android.text.TextUtils;
 
 import androidx.annotation.VisibleForTesting;
@@ -27,6 +34,7 @@
 import java.util.List;
 
 public class SubscriptionUtil {
+    private static final String TAG = "SubscriptionUtil";
     private static List<SubscriptionInfo> sAvailableResultsForTesting;
     private static List<SubscriptionInfo> sActiveResultsForTesting;
 
@@ -44,21 +52,56 @@
         if (sActiveResultsForTesting != null) {
             return sActiveResultsForTesting;
         }
-        List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
+        final List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
         if (subscriptions == null) {
             return new ArrayList<>();
         }
         return subscriptions;
     }
 
-    public static List<SubscriptionInfo> getAvailableSubscriptions(SubscriptionManager manager) {
+    private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) {
+        return !slotInfo.getIsEuicc() && !slotInfo.getIsActive() &&
+                slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT;
+    }
+
+    public static List<SubscriptionInfo> getAvailableSubscriptions(Context context) {
         if (sAvailableResultsForTesting != null) {
             return sAvailableResultsForTesting;
         }
-        List<SubscriptionInfo> subscriptions = manager.getSelectableSubscriptionInfoList();
-        if (subscriptions == null) {
-            subscriptions = new ArrayList<>();
+        final SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class);
+        final TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
+
+        List<SubscriptionInfo> subscriptions =
+                new ArrayList<>(emptyIfNull(subMgr.getSelectableSubscriptionInfoList()));
+
+        // Look for inactive but present physical SIMs that are missing from the selectable list.
+        final List<UiccSlotInfo> missing = new ArrayList<>();
+        UiccSlotInfo[] slotsInfo =  telMgr.getUiccSlotsInfo();
+        for (int i = 0; slotsInfo != null && i < slotsInfo.length; i++) {
+            final UiccSlotInfo slotInfo = slotsInfo[i];
+            if (isInactiveInsertedPSim(slotInfo)) {
+                final int index = slotInfo.getLogicalSlotIdx();
+                final String cardId = slotInfo.getCardId();
+
+                final boolean found = subscriptions.stream().anyMatch(info ->
+                        index == info.getSimSlotIndex() && cardId.equals(info.getCardString()));
+                if (!found) {
+                    missing.add(slotInfo);
+                }
+            }
         }
+        if (!missing.isEmpty()) {
+            for (SubscriptionInfo info : subMgr.getAllSubscriptionInfoList()) {
+                for (UiccSlotInfo slotInfo : missing) {
+                    if (info.getSimSlotIndex() == slotInfo.getLogicalSlotIdx() &&
+                    info.getCardString().equals(slotInfo.getCardId())) {
+                        subscriptions.add(info);
+                        break;
+                    }
+                }
+            }
+        }
+
         // With some carriers such as Google Fi which provide a sort of virtual service that spans
         // across multiple underlying networks, we end up with subscription entries for the
         // underlying networks that need to be hidden from the user in the UI.
diff --git a/src/com/android/settings/network/telephony/MobileNetworkActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
index 47eb66b..b8ed31f 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkActivity.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
@@ -40,6 +40,7 @@
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.SettingsBaseActivity;
 import com.android.settings.development.featureflags.FeatureFlagPersistent;
+import com.android.settings.network.SubscriptionUtil;
 
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 
@@ -165,7 +166,7 @@
             final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
             if (subId != SUB_ID_NULL) {
                 for (SubscriptionInfo subscription :
-                        mSubscriptionManager.getSelectableSubscriptionInfoList()) {
+                        SubscriptionUtil.getAvailableSubscriptions(this)) {
                     if (subscription.getSubscriptionId() == subId) {
                         return subscription;
                     }
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
index fd296ec..2037adc 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java
@@ -94,8 +94,9 @@
             return;
         }
         final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
-                mSubscriptionManager);
-        if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || subs.size() < 2) {
+                mContext);
+        if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID ||
+                mSubscriptionManager.isSubscriptionEnabled(mSubId) && subs.size() < 2) {
             mSwitchBar.hide();
             return;
         }
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
index b8ba63c..a623850 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
@@ -34,6 +34,7 @@
 import android.os.UserManager;
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.telephony.euicc.EuiccManager;
 import android.text.TextUtils;
@@ -151,8 +152,11 @@
         mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
         final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
         verify(mContext).startActivity(intentCaptor.capture());
-        assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
+        Intent intent = intentCaptor.getValue();
+        assertThat(intent.getComponent().getClassName()).isEqualTo(
                 MobileNetworkActivity.class.getName());
+        assertThat(intent.getIntExtra(Settings.EXTRA_SUB_ID,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID)).isEqualTo(sub1.getSubscriptionId());
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
index c074466..28a390d 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -16,14 +16,21 @@
 
 package com.android.settings.network;
 
+import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_ABSENT;
+import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.UiccSlotInfo;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -39,17 +46,25 @@
 @RunWith(RobolectricTestRunner.class)
 public class SubscriptionUtilTest {
     @Mock
-    private SubscriptionManager mManager;
+    private Context mContext;
+    @Mock
+    private SubscriptionManager mSubMgr;
+    @Mock
+    private TelephonyManager mTelMgr;
+
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        doReturn(mSubMgr).when(mContext).getSystemService(SubscriptionManager.class);
+        doReturn(mTelMgr).when(mContext).getSystemService(TelephonyManager.class);
+        when(mTelMgr.getUiccSlotsInfo()).thenReturn(null);
     }
 
     @Test
     public void getAvailableSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
-        when(mManager.getSelectableSubscriptionInfoList()).thenReturn(null);
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(null);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
         assertThat(subs).isEmpty();
     }
@@ -58,8 +73,8 @@
     public void getAvailableSubscriptions_oneSubscription_oneResult() {
         final SubscriptionInfo info = mock(SubscriptionInfo.class);
         when(info.getMncString()).thenReturn("fake1234");
-        when(mManager.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(1);
     }
@@ -70,8 +85,8 @@
         final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
         when(info1.getMncString()).thenReturn("fake1234");
         when(info2.getMncString()).thenReturn("fake5678");
-        when(mManager.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(2);
     }
@@ -83,9 +98,9 @@
         final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
         when(info1.getSubscriptionId()).thenReturn(1);
         when(info1.getMncString()).thenReturn("fake1234");
-        when(mManager.getSelectableSubscriptionInfoList()).thenReturn(
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(
                 new ArrayList<>(Arrays.asList(info1, info2, info3)));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(1);
         assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
@@ -101,9 +116,9 @@
         when(info1.getMncString()).thenReturn("fake1234");
         when(info4.getSubscriptionId()).thenReturn(4);
         when(info4.getMncString()).thenReturn("fake5678");
-        when(mManager.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
                 Arrays.asList(info1, info2, info3, info4)));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(2);
         assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
@@ -111,9 +126,86 @@
     }
 
     @Test
+    public void getAvailableSubscriptions_oneSelectableOneDisabledPSim_twoResults() {
+        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
+        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
+
+        when(info1.getSubscriptionId()).thenReturn(111);
+        when(info1.getMncString()).thenReturn("fake111");
+        when(info1.getSimSlotIndex()).thenReturn(-1);
+        when(info1.getCardString()).thenReturn("info1_cardid");
+
+        when(info2.getSubscriptionId()).thenReturn(222);
+        when(info2.getMncString()).thenReturn("fake222");
+        when(info2.getSimSlotIndex()).thenReturn(0);
+        when(info2.getCardString()).thenReturn("info2_cardid");
+
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
+        when(mSubMgr.getAllSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
+
+        final UiccSlotInfo info2slot = mock(UiccSlotInfo.class);
+        when(info2slot.getCardStateInfo()).thenReturn(CARD_STATE_INFO_PRESENT);
+        when(info2slot.getLogicalSlotIdx()).thenReturn(0);
+        when(info2slot.getCardId()).thenReturn("info2_cardid");
+
+        final UiccSlotInfo[] slotInfos = {info2slot};
+        when(mTelMgr.getUiccSlotsInfo()).thenReturn(slotInfos);
+
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
+        assertThat(subs).hasSize(2);
+        assertThat(subs.get(0).getSubscriptionId()).isEqualTo(111);
+        assertThat(subs.get(1).getSubscriptionId()).isEqualTo(222);
+    }
+
+
+    @Test
+    public void getAvailableSubscriptions_oneSelectableTwoDisabledPSimsOneAbsent_twoResults() {
+        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
+        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
+        final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
+
+        when(info1.getSubscriptionId()).thenReturn(111);
+        when(info1.getMncString()).thenReturn("fake111");
+        when(info1.getSimSlotIndex()).thenReturn(-1);
+        when(info1.getCardString()).thenReturn("info1_cardid");
+
+        when(info2.getSubscriptionId()).thenReturn(222);
+        when(info2.getMncString()).thenReturn("fake222");
+        when(info2.getSimSlotIndex()).thenReturn(-1);
+        when(info2.getCardString()).thenReturn("info2_cardid");
+
+        when(info3.getSubscriptionId()).thenReturn(333);
+        when(info3.getMncString()).thenReturn("fake333");
+        when(info3.getSimSlotIndex()).thenReturn(0);
+        when(info3.getCardString()).thenReturn("info3_cardid");
+
+        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
+        when(mSubMgr.getAllSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2, info3));
+
+        final UiccSlotInfo info2slot = mock(UiccSlotInfo.class);
+        final UiccSlotInfo info3slot = mock(UiccSlotInfo.class);
+
+        when(info2slot.getLogicalSlotIdx()).thenReturn(-1);
+        when(info2slot.getCardStateInfo()).thenReturn(CARD_STATE_INFO_ABSENT);
+        when(info2slot.getCardId()).thenReturn("info2_cardid");
+
+        when(info3slot.getLogicalSlotIdx()).thenReturn(0);
+        when(info3slot.getCardStateInfo()).thenReturn(CARD_STATE_INFO_PRESENT);
+        when(info3slot.getCardId()).thenReturn("info3_cardid");
+
+        final UiccSlotInfo[] slotInfos = {info2slot, info3slot};
+        when(mTelMgr.getUiccSlotsInfo()).thenReturn(slotInfos);
+
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
+        assertThat(subs).hasSize(2);
+        assertThat(subs.get(0).getSubscriptionId()).isEqualTo(111);
+        assertThat(subs.get(1).getSubscriptionId()).isEqualTo(333);
+    }
+
+    @Test
     public void getActiveSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
-        when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+        when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
         assertThat(subs).isNotNull();
         assertThat(subs).isEmpty();
     }
@@ -121,8 +213,8 @@
     @Test
     public void getActiveSubscriptions_oneSubscription_oneResult() {
         final SubscriptionInfo info = mock(SubscriptionInfo.class);
-        when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+        when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(1);
     }
@@ -131,9 +223,9 @@
     public void getActiveSubscriptions_twoSubscriptions_twoResults() {
         final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
         final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
-        when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
+        when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
                 Arrays.asList(info1, info2));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(2);
     }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
index 68f8c91..f38f2a2 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
@@ -33,15 +33,18 @@
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
 import android.view.Menu;
 import android.view.View;
 
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.view.menu.ContextMenuBuilder;
 import com.android.settings.R;
+import com.android.settings.network.SubscriptionUtil;
 
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -52,6 +55,7 @@
 import org.robolectric.RuntimeEnvironment;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import androidx.fragment.app.Fragment;
@@ -73,6 +77,8 @@
     @Mock
     private SubscriptionManager mSubscriptionManager;
     @Mock
+    private TelephonyManager mTelephonyManager;
+    @Mock
     private SubscriptionInfo mSubscriptionInfo;
     @Mock
     private SubscriptionInfo mSubscriptionInfo2;
@@ -99,6 +105,8 @@
 
         doReturn(mSubscriptionManager).when(mMobileNetworkActivity).getSystemService(
                 SubscriptionManager.class);
+        doReturn(mTelephonyManager).when(mMobileNetworkActivity).getSystemService(
+                TelephonyManager.class);
         doReturn(mBottomNavigationView).when(mMobileNetworkActivity).findViewById(R.id.bottom_nav);
         doReturn(mFragmentManager).when(mMobileNetworkActivity).getSupportFragmentManager();
         doReturn(mFragmentTransaction).when(mFragmentManager).beginTransaction();
@@ -108,6 +116,11 @@
                 MOBILE_SETTINGS_TAG + CURRENT_SUB_ID);
     }
 
+    @After
+    public void tearDown() {
+        SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
+    }
+
     @Test
     public void updateBottomNavigationView_oneSubscription_shouldBeGone() {
         mSubscriptionInfos.add(mSubscriptionInfo);
@@ -169,7 +182,7 @@
         doReturn(intent).when(mMobileNetworkActivity).getIntent();
         mSubscriptionInfos.add(mSubscriptionInfo);
         mSubscriptionInfos.add(mSubscriptionInfo2);
-        doReturn(mSubscriptionInfos).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
+        SubscriptionUtil.setAvailableSubscriptionsForTesting(mSubscriptionInfos);
         doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
 
         assertThat(mMobileNetworkActivity.getSubscriptionId()).isEqualTo(CURRENT_SUB_ID);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java
index 6d85826..a10227f 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSwitchControllerTest.java
@@ -20,6 +20,7 @@
 
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -99,13 +100,22 @@
     }
 
     @Test
-    public void displayPreference_onlyOneSubscription_switchBarHidden() {
+    public void displayPreference_oneEnabledSubscription_switchBarHidden() {
+        doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(mSubId);
         SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
         mController.displayPreference(mScreen);
         assertThat(mSwitchBar.isShowing()).isFalse();
     }
 
     @Test
+    public void displayPreference_oneDisabledSubscription_switchBarNotHidden() {
+        doReturn(false).when(mSubscriptionManager).isSubscriptionEnabled(mSubId);
+        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
+        mController.displayPreference(mScreen);
+        assertThat(mSwitchBar.isShowing()).isTrue();
+    }
+
+    @Test
     public void displayPreference_subscriptionEnabled_switchIsOn() {
         when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true);
         mController.displayPreference(mScreen);