Merge "Always show disabled pSIMs in single-sim mode" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
cd07aa1cc4
@@ -98,7 +98,7 @@ public class MobileNetworkListController extends AbstractPreferenceController im
|
|||||||
mPreferences = new ArrayMap<>();
|
mPreferences = new ArrayMap<>();
|
||||||
|
|
||||||
final List<SubscriptionInfo> subscriptions = SubscriptionUtil.getAvailableSubscriptions(
|
final List<SubscriptionInfo> subscriptions = SubscriptionUtil.getAvailableSubscriptions(
|
||||||
mSubscriptionManager);
|
mContext);
|
||||||
for (SubscriptionInfo info : subscriptions) {
|
for (SubscriptionInfo info : subscriptions) {
|
||||||
final int subId = info.getSubscriptionId();
|
final int subId = info.getSubscriptionId();
|
||||||
Preference pref = existingPreferences.remove(subId);
|
Preference pref = existingPreferences.remove(subId);
|
||||||
|
@@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.euicc.EuiccManager;
|
import android.telephony.euicc.EuiccManager;
|
||||||
@@ -99,7 +100,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
|
|||||||
@Override
|
@Override
|
||||||
public CharSequence getSummary() {
|
public CharSequence getSummary() {
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
|
||||||
mSubscriptionManager);
|
mContext);
|
||||||
if (subs.isEmpty()) {
|
if (subs.isEmpty()) {
|
||||||
if (MobileNetworkUtils.showEuiccSettings(mContext)) {
|
if (MobileNetworkUtils.showEuiccSettings(mContext)) {
|
||||||
return mContext.getResources().getString(
|
return mContext.getResources().getString(
|
||||||
@@ -132,7 +133,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
|
|||||||
mPreference.setEnabled(!mChangeListener.isAirplaneModeOn());
|
mPreference.setEnabled(!mChangeListener.isAirplaneModeOn());
|
||||||
|
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
|
||||||
mSubscriptionManager);
|
mContext);
|
||||||
|
|
||||||
if (subs.isEmpty()) {
|
if (subs.isEmpty()) {
|
||||||
if (MobileNetworkUtils.showEuiccSettings(mContext)) {
|
if (MobileNetworkUtils.showEuiccSettings(mContext)) {
|
||||||
@@ -154,6 +155,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
|
|||||||
if (subs.size() == 1) {
|
if (subs.size() == 1) {
|
||||||
mPreference.setOnPreferenceClickListener((Preference pref) -> {
|
mPreference.setOnPreferenceClickListener((Preference pref) -> {
|
||||||
final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
|
final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
|
||||||
|
intent.putExtra(Settings.EXTRA_SUB_ID, subs.get(0).getSubscriptionId());
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
@@ -16,8 +16,15 @@
|
|||||||
|
|
||||||
package com.android.settings.network;
|
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.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
|
import android.telephony.UiccSlotInfo;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
@@ -27,6 +34,7 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class SubscriptionUtil {
|
public class SubscriptionUtil {
|
||||||
|
private static final String TAG = "SubscriptionUtil";
|
||||||
private static List<SubscriptionInfo> sAvailableResultsForTesting;
|
private static List<SubscriptionInfo> sAvailableResultsForTesting;
|
||||||
private static List<SubscriptionInfo> sActiveResultsForTesting;
|
private static List<SubscriptionInfo> sActiveResultsForTesting;
|
||||||
|
|
||||||
@@ -44,21 +52,56 @@ public class SubscriptionUtil {
|
|||||||
if (sActiveResultsForTesting != null) {
|
if (sActiveResultsForTesting != null) {
|
||||||
return sActiveResultsForTesting;
|
return sActiveResultsForTesting;
|
||||||
}
|
}
|
||||||
List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
|
final List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
|
||||||
if (subscriptions == null) {
|
if (subscriptions == null) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
return subscriptions;
|
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) {
|
if (sAvailableResultsForTesting != null) {
|
||||||
return sAvailableResultsForTesting;
|
return sAvailableResultsForTesting;
|
||||||
}
|
}
|
||||||
List<SubscriptionInfo> subscriptions = manager.getSelectableSubscriptionInfoList();
|
final SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class);
|
||||||
if (subscriptions == null) {
|
final TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
|
||||||
subscriptions = new ArrayList<>();
|
|
||||||
|
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
|
// 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
|
// 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.
|
// 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.FeatureFlags;
|
||||||
import com.android.settings.core.SettingsBaseActivity;
|
import com.android.settings.core.SettingsBaseActivity;
|
||||||
import com.android.settings.development.featureflags.FeatureFlagPersistent;
|
import com.android.settings.development.featureflags.FeatureFlagPersistent;
|
||||||
|
import com.android.settings.network.SubscriptionUtil;
|
||||||
|
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
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);
|
final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
|
||||||
if (subId != SUB_ID_NULL) {
|
if (subId != SUB_ID_NULL) {
|
||||||
for (SubscriptionInfo subscription :
|
for (SubscriptionInfo subscription :
|
||||||
mSubscriptionManager.getSelectableSubscriptionInfoList()) {
|
SubscriptionUtil.getAvailableSubscriptions(this)) {
|
||||||
if (subscription.getSubscriptionId() == subId) {
|
if (subscription.getSubscriptionId() == subId) {
|
||||||
return subscription;
|
return subscription;
|
||||||
}
|
}
|
||||||
|
@@ -94,8 +94,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
|
||||||
mSubscriptionManager);
|
mContext);
|
||||||
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || subs.size() < 2) {
|
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID ||
|
||||||
|
mSubscriptionManager.isSubscriptionEnabled(mSubId) && subs.size() < 2) {
|
||||||
mSwitchBar.hide();
|
mSwitchBar.hide();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@ import android.net.ConnectivityManager;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.telephony.euicc.EuiccManager;
|
import android.telephony.euicc.EuiccManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -151,8 +152,11 @@ public class MobileNetworkSummaryControllerTest {
|
|||||||
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
|
mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
|
||||||
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
|
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
|
||||||
verify(mContext).startActivity(intentCaptor.capture());
|
verify(mContext).startActivity(intentCaptor.capture());
|
||||||
assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
|
Intent intent = intentCaptor.getValue();
|
||||||
|
assertThat(intent.getComponent().getClassName()).isEqualTo(
|
||||||
MobileNetworkActivity.class.getName());
|
MobileNetworkActivity.class.getName());
|
||||||
|
assertThat(intent.getIntExtra(Settings.EXTRA_SUB_ID,
|
||||||
|
SubscriptionManager.INVALID_SUBSCRIPTION_ID)).isEqualTo(sub1.getSubscriptionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -16,14 +16,21 @@
|
|||||||
|
|
||||||
package com.android.settings.network;
|
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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
|
import android.telephony.UiccSlotInfo;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -39,17 +46,25 @@ import java.util.List;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class SubscriptionUtilTest {
|
public class SubscriptionUtilTest {
|
||||||
@Mock
|
@Mock
|
||||||
private SubscriptionManager mManager;
|
private Context mContext;
|
||||||
|
@Mock
|
||||||
|
private SubscriptionManager mSubMgr;
|
||||||
|
@Mock
|
||||||
|
private TelephonyManager mTelMgr;
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
doReturn(mSubMgr).when(mContext).getSystemService(SubscriptionManager.class);
|
||||||
|
doReturn(mTelMgr).when(mContext).getSystemService(TelephonyManager.class);
|
||||||
|
when(mTelMgr.getUiccSlotsInfo()).thenReturn(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAvailableSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
|
public void getAvailableSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
|
||||||
when(mManager.getSelectableSubscriptionInfoList()).thenReturn(null);
|
when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(null);
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
|
||||||
assertThat(subs).isNotNull();
|
assertThat(subs).isNotNull();
|
||||||
assertThat(subs).isEmpty();
|
assertThat(subs).isEmpty();
|
||||||
}
|
}
|
||||||
@@ -58,8 +73,8 @@ public class SubscriptionUtilTest {
|
|||||||
public void getAvailableSubscriptions_oneSubscription_oneResult() {
|
public void getAvailableSubscriptions_oneSubscription_oneResult() {
|
||||||
final SubscriptionInfo info = mock(SubscriptionInfo.class);
|
final SubscriptionInfo info = mock(SubscriptionInfo.class);
|
||||||
when(info.getMncString()).thenReturn("fake1234");
|
when(info.getMncString()).thenReturn("fake1234");
|
||||||
when(mManager.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
|
when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
|
||||||
assertThat(subs).isNotNull();
|
assertThat(subs).isNotNull();
|
||||||
assertThat(subs).hasSize(1);
|
assertThat(subs).hasSize(1);
|
||||||
}
|
}
|
||||||
@@ -70,8 +85,8 @@ public class SubscriptionUtilTest {
|
|||||||
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
|
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
|
||||||
when(info1.getMncString()).thenReturn("fake1234");
|
when(info1.getMncString()).thenReturn("fake1234");
|
||||||
when(info2.getMncString()).thenReturn("fake5678");
|
when(info2.getMncString()).thenReturn("fake5678");
|
||||||
when(mManager.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
|
when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
|
||||||
assertThat(subs).isNotNull();
|
assertThat(subs).isNotNull();
|
||||||
assertThat(subs).hasSize(2);
|
assertThat(subs).hasSize(2);
|
||||||
}
|
}
|
||||||
@@ -83,9 +98,9 @@ public class SubscriptionUtilTest {
|
|||||||
final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
|
final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
|
||||||
when(info1.getSubscriptionId()).thenReturn(1);
|
when(info1.getSubscriptionId()).thenReturn(1);
|
||||||
when(info1.getMncString()).thenReturn("fake1234");
|
when(info1.getMncString()).thenReturn("fake1234");
|
||||||
when(mManager.getSelectableSubscriptionInfoList()).thenReturn(
|
when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(
|
||||||
new ArrayList<>(Arrays.asList(info1, info2, info3)));
|
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).isNotNull();
|
||||||
assertThat(subs).hasSize(1);
|
assertThat(subs).hasSize(1);
|
||||||
assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
|
assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
|
||||||
@@ -101,19 +116,96 @@ public class SubscriptionUtilTest {
|
|||||||
when(info1.getMncString()).thenReturn("fake1234");
|
when(info1.getMncString()).thenReturn("fake1234");
|
||||||
when(info4.getSubscriptionId()).thenReturn(4);
|
when(info4.getSubscriptionId()).thenReturn(4);
|
||||||
when(info4.getMncString()).thenReturn("fake5678");
|
when(info4.getMncString()).thenReturn("fake5678");
|
||||||
when(mManager.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
|
when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
|
||||||
Arrays.asList(info1, info2, info3, info4)));
|
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).isNotNull();
|
||||||
assertThat(subs).hasSize(2);
|
assertThat(subs).hasSize(2);
|
||||||
assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
|
assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
|
||||||
assertThat(subs.get(1).getSubscriptionId()).isEqualTo(4);
|
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
|
@Test
|
||||||
public void getActiveSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
|
public void getActiveSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
|
||||||
when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
|
when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
|
||||||
assertThat(subs).isNotNull();
|
assertThat(subs).isNotNull();
|
||||||
assertThat(subs).isEmpty();
|
assertThat(subs).isEmpty();
|
||||||
}
|
}
|
||||||
@@ -121,8 +213,8 @@ public class SubscriptionUtilTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getActiveSubscriptions_oneSubscription_oneResult() {
|
public void getActiveSubscriptions_oneSubscription_oneResult() {
|
||||||
final SubscriptionInfo info = mock(SubscriptionInfo.class);
|
final SubscriptionInfo info = mock(SubscriptionInfo.class);
|
||||||
when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
|
when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
|
||||||
assertThat(subs).isNotNull();
|
assertThat(subs).isNotNull();
|
||||||
assertThat(subs).hasSize(1);
|
assertThat(subs).hasSize(1);
|
||||||
}
|
}
|
||||||
@@ -131,9 +223,9 @@ public class SubscriptionUtilTest {
|
|||||||
public void getActiveSubscriptions_twoSubscriptions_twoResults() {
|
public void getActiveSubscriptions_twoSubscriptions_twoResults() {
|
||||||
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
|
final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
|
||||||
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
|
final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
|
||||||
when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
|
when(mSubMgr.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
|
||||||
Arrays.asList(info1, info2));
|
Arrays.asList(info1, info2));
|
||||||
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
|
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mSubMgr);
|
||||||
assertThat(subs).isNotNull();
|
assertThat(subs).isNotNull();
|
||||||
assertThat(subs).hasSize(2);
|
assertThat(subs).hasSize(2);
|
||||||
}
|
}
|
||||||
|
@@ -33,15 +33,18 @@ import android.os.Bundle;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.android.internal.telephony.TelephonyIntents;
|
import com.android.internal.telephony.TelephonyIntents;
|
||||||
import com.android.internal.view.menu.ContextMenuBuilder;
|
import com.android.internal.view.menu.ContextMenuBuilder;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.network.SubscriptionUtil;
|
||||||
|
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -52,6 +55,7 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
@@ -73,6 +77,8 @@ public class MobileNetworkActivityTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private SubscriptionManager mSubscriptionManager;
|
private SubscriptionManager mSubscriptionManager;
|
||||||
@Mock
|
@Mock
|
||||||
|
private TelephonyManager mTelephonyManager;
|
||||||
|
@Mock
|
||||||
private SubscriptionInfo mSubscriptionInfo;
|
private SubscriptionInfo mSubscriptionInfo;
|
||||||
@Mock
|
@Mock
|
||||||
private SubscriptionInfo mSubscriptionInfo2;
|
private SubscriptionInfo mSubscriptionInfo2;
|
||||||
@@ -99,6 +105,8 @@ public class MobileNetworkActivityTest {
|
|||||||
|
|
||||||
doReturn(mSubscriptionManager).when(mMobileNetworkActivity).getSystemService(
|
doReturn(mSubscriptionManager).when(mMobileNetworkActivity).getSystemService(
|
||||||
SubscriptionManager.class);
|
SubscriptionManager.class);
|
||||||
|
doReturn(mTelephonyManager).when(mMobileNetworkActivity).getSystemService(
|
||||||
|
TelephonyManager.class);
|
||||||
doReturn(mBottomNavigationView).when(mMobileNetworkActivity).findViewById(R.id.bottom_nav);
|
doReturn(mBottomNavigationView).when(mMobileNetworkActivity).findViewById(R.id.bottom_nav);
|
||||||
doReturn(mFragmentManager).when(mMobileNetworkActivity).getSupportFragmentManager();
|
doReturn(mFragmentManager).when(mMobileNetworkActivity).getSupportFragmentManager();
|
||||||
doReturn(mFragmentTransaction).when(mFragmentManager).beginTransaction();
|
doReturn(mFragmentTransaction).when(mFragmentManager).beginTransaction();
|
||||||
@@ -108,6 +116,11 @@ public class MobileNetworkActivityTest {
|
|||||||
MOBILE_SETTINGS_TAG + CURRENT_SUB_ID);
|
MOBILE_SETTINGS_TAG + CURRENT_SUB_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateBottomNavigationView_oneSubscription_shouldBeGone() {
|
public void updateBottomNavigationView_oneSubscription_shouldBeGone() {
|
||||||
mSubscriptionInfos.add(mSubscriptionInfo);
|
mSubscriptionInfos.add(mSubscriptionInfo);
|
||||||
@@ -169,7 +182,7 @@ public class MobileNetworkActivityTest {
|
|||||||
doReturn(intent).when(mMobileNetworkActivity).getIntent();
|
doReturn(intent).when(mMobileNetworkActivity).getIntent();
|
||||||
mSubscriptionInfos.add(mSubscriptionInfo);
|
mSubscriptionInfos.add(mSubscriptionInfo);
|
||||||
mSubscriptionInfos.add(mSubscriptionInfo2);
|
mSubscriptionInfos.add(mSubscriptionInfo2);
|
||||||
doReturn(mSubscriptionInfos).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
|
SubscriptionUtil.setAvailableSubscriptionsForTesting(mSubscriptionInfos);
|
||||||
doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
|
doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
|
||||||
|
|
||||||
assertThat(mMobileNetworkActivity.getSubscriptionId()).isEqualTo(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.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -99,12 +100,21 @@ public class MobileNetworkSwitchControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void displayPreference_onlyOneSubscription_switchBarHidden() {
|
public void displayPreference_oneEnabledSubscription_switchBarHidden() {
|
||||||
|
doReturn(true).when(mSubscriptionManager).isSubscriptionEnabled(mSubId);
|
||||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
|
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscription));
|
||||||
mController.displayPreference(mScreen);
|
mController.displayPreference(mScreen);
|
||||||
assertThat(mSwitchBar.isShowing()).isFalse();
|
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
|
@Test
|
||||||
public void displayPreference_subscriptionEnabled_switchIsOn() {
|
public void displayPreference_subscriptionEnabled_switchIsOn() {
|
||||||
when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true);
|
when(mSubscriptionManager.isSubscriptionEnabled(mSubId)).thenReturn(true);
|
||||||
|
Reference in New Issue
Block a user