From bdd9eb3ba7481071f0b79b476198ab34030dc221 Mon Sep 17 00:00:00 2001 From: Antony Sargent Date: Tue, 23 Apr 2019 10:55:51 -0700 Subject: [PATCH] Always show disabled pSIMs in single-sim mode In single-sim mode, you can have both an eSIM subscription and a pSIM inserted into the device, and only one of them can be enabled. It turns out that if the pSIM is the disabled one, we would not show it in the settings UI; this CL fixes that. It also fixes a somewhat related problem that I noticed while testing this, that if you have only one subscription that happens to be disabled, we were not showing the on/off switch at the top of the page, which would leave you with no way to enable it. Bug: 129864878 Test: make RunSettingsRoboTests Change-Id: I4214ad34c59ac2df429772c066c51a9318f5baa7 --- .../network/MobileNetworkListController.java | 2 +- .../MobileNetworkSummaryController.java | 6 +- .../settings/network/SubscriptionUtil.java | 53 +++++++- .../telephony/MobileNetworkActivity.java | 3 +- .../MobileNetworkSwitchController.java | 5 +- .../MobileNetworkSummaryControllerTest.java | 6 +- .../network/SubscriptionUtilTest.java | 126 +++++++++++++++--- .../telephony/MobileNetworkActivityTest.java | 15 ++- .../MobileNetworkSwitchControllerTest.java | 12 +- 9 files changed, 197 insertions(+), 31 deletions(-) diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java index a2e4116fd8b..d0e14ce2168 100644 --- a/src/com/android/settings/network/MobileNetworkListController.java +++ b/src/com/android/settings/network/MobileNetworkListController.java @@ -98,7 +98,7 @@ public class MobileNetworkListController extends AbstractPreferenceController im mPreferences = new ArrayMap<>(); final List 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 ae115ebb727..9498c4e61e0 100644 --- a/src/com/android/settings/network/MobileNetworkSummaryController.java +++ b/src/com/android/settings/network/MobileNetworkSummaryController.java @@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; 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 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController @Override public CharSequence getSummary() { final List subs = SubscriptionUtil.getAvailableSubscriptions( - mSubscriptionManager); + mContext); if (subs.isEmpty()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) { return mContext.getResources().getString( @@ -132,7 +133,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController mPreference.setEnabled(!mChangeListener.isAirplaneModeOn()); final List subs = SubscriptionUtil.getAvailableSubscriptions( - mSubscriptionManager); + mContext); if (subs.isEmpty()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) { @@ -154,6 +155,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController 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 5f1becaf54d..86655d4ff38 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.Iterator; import java.util.List; public class SubscriptionUtil { + private static final String TAG = "SubscriptionUtil"; private static List sAvailableResultsForTesting; private static List sActiveResultsForTesting; @@ -44,21 +52,56 @@ public class SubscriptionUtil { if (sActiveResultsForTesting != null) { return sActiveResultsForTesting; } - List subscriptions = manager.getActiveSubscriptionInfoList(true); + final List subscriptions = manager.getActiveSubscriptionInfoList(true); if (subscriptions == null) { return new ArrayList<>(); } return subscriptions; } - public static List getAvailableSubscriptions(SubscriptionManager manager) { + private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) { + return !slotInfo.getIsEuicc() && !slotInfo.getIsActive() && + slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT; + } + + public static List getAvailableSubscriptions(Context context) { if (sAvailableResultsForTesting != null) { return sAvailableResultsForTesting; } - List subscriptions = manager.getSelectableSubscriptionInfoList(); - if (subscriptions == null) { - subscriptions = new ArrayList<>(); + final SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class); + final TelephonyManager telMgr = context.getSystemService(TelephonyManager.class); + + List subscriptions = + new ArrayList<>(emptyIfNull(subMgr.getSelectableSubscriptionInfoList())); + + // Look for inactive but present physical SIMs that are missing from the selectable list. + final List 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 47eb66be400..b8ed31f94b8 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.R; 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 @@ public class MobileNetworkActivity extends SettingsBaseActivity { 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 fd296ecc86e..2037adce4b5 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.java @@ -94,8 +94,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl return; } final List 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 b8ba63c752c..a6238505756 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.net.ConnectivityManager; 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 @@ public class MobileNetworkSummaryControllerTest { mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference); final ArgumentCaptor 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 c074466b789..28a390d5a98 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 @@ import java.util.List; @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 subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(null); + final List subs = SubscriptionUtil.getAvailableSubscriptions(mContext); assertThat(subs).isNotNull(); assertThat(subs).isEmpty(); } @@ -58,8 +73,8 @@ public class SubscriptionUtilTest { 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 subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info)); + final List subs = SubscriptionUtil.getAvailableSubscriptions(mContext); assertThat(subs).isNotNull(); assertThat(subs).hasSize(1); } @@ -70,8 +85,8 @@ public class SubscriptionUtilTest { 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 subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2)); + final List subs = SubscriptionUtil.getAvailableSubscriptions(mContext); assertThat(subs).isNotNull(); assertThat(subs).hasSize(2); } @@ -83,9 +98,9 @@ public class SubscriptionUtilTest { 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 subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + final List subs = SubscriptionUtil.getAvailableSubscriptions(mContext); assertThat(subs).isNotNull(); assertThat(subs).hasSize(1); assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1); @@ -101,19 +116,96 @@ public class SubscriptionUtilTest { 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 subs = SubscriptionUtil.getAvailableSubscriptions(mManager); + final List subs = SubscriptionUtil.getAvailableSubscriptions(mContext); assertThat(subs).isNotNull(); assertThat(subs).hasSize(2); assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1); assertThat(subs.get(1).getSubscriptionId()).isEqualTo(4); } + @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 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 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 subs = SubscriptionUtil.getActiveSubscriptions(mManager); + when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null); + final List subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr); assertThat(subs).isNotNull(); assertThat(subs).isEmpty(); } @@ -121,8 +213,8 @@ public class SubscriptionUtilTest { @Test public void getActiveSubscriptions_oneSubscription_oneResult() { final SubscriptionInfo info = mock(SubscriptionInfo.class); - when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info)); - final List subs = SubscriptionUtil.getActiveSubscriptions(mManager); + when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info)); + final List subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr); assertThat(subs).isNotNull(); assertThat(subs).hasSize(1); } @@ -131,9 +223,9 @@ public class SubscriptionUtilTest { 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 subs = SubscriptionUtil.getActiveSubscriptions(mManager); + final List 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 68f8c912972..f38f2a2bb0c 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.os.Bundle; 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.RobolectricTestRunner; 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 @@ public class MobileNetworkActivityTest { @Mock private SubscriptionManager mSubscriptionManager; @Mock + private TelephonyManager mTelephonyManager; + @Mock private SubscriptionInfo mSubscriptionInfo; @Mock private SubscriptionInfo mSubscriptionInfo2; @@ -99,6 +105,8 @@ public class MobileNetworkActivityTest { 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 @@ public class MobileNetworkActivityTest { 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 @@ public class MobileNetworkActivityTest { 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 6d85826ade4..a10227f5924 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 com.google.common.truth.Truth.assertThat; 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,12 +100,21 @@ public class MobileNetworkSwitchControllerTest { } @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);