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
This commit is contained in:
@@ -98,7 +98,7 @@ public class MobileNetworkListController extends AbstractPreferenceController im
|
||||
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);
|
||||
|
@@ -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<SubscriptionInfo> 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<SubscriptionInfo> 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;
|
||||
});
|
||||
|
@@ -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<SubscriptionInfo> sAvailableResultsForTesting;
|
||||
private static List<SubscriptionInfo> sActiveResultsForTesting;
|
||||
|
||||
@@ -44,21 +52,56 @@ public class SubscriptionUtil {
|
||||
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.
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -94,8 +94,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl
|
||||
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;
|
||||
}
|
||||
|
@@ -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<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
|
||||
|
@@ -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<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 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<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 @@ 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<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 @@ 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<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,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<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);
|
||||
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<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 @@ 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<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 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<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
|
||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
|
||||
assertThat(subs).isNotNull();
|
||||
assertThat(subs).hasSize(2);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user