Merge "[MEP] the user can't enable the psim when revmovable esim is enabled" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2cd07f51ef
@@ -28,7 +28,6 @@ import android.telephony.UiccSlotMapping;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.telephony.uicc.UiccController;
|
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@@ -273,6 +272,7 @@ public class UiccSlotUtil {
|
|||||||
if (slotId == INVALID_PHYSICAL_SLOT_ID) {
|
if (slotId == INVALID_PHYSICAL_SLOT_ID) {
|
||||||
for (int i = 0; i < slots.length; i++) {
|
for (int i = 0; i < slots.length; i++) {
|
||||||
if (slots[i].isRemovable()
|
if (slots[i].isRemovable()
|
||||||
|
&& !slots[i].getIsEuicc()
|
||||||
&& !slots[i].getPorts().stream().findFirst().get().isActive()
|
&& !slots[i].getPorts().stream().findFirst().get().isActive()
|
||||||
&& slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR
|
&& slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR
|
||||||
&& slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_RESTRICTED) {
|
&& slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_RESTRICTED) {
|
||||||
@@ -413,4 +413,29 @@ public class UiccSlotUtil {
|
|||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(INVALID_LOGICAL_SLOT_ID);
|
.orElse(INVALID_LOGICAL_SLOT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether the removable psim is enabled.
|
||||||
|
*
|
||||||
|
* @param telMgr is a TelephonyManager.
|
||||||
|
* @return whether the removable psim is enabled.
|
||||||
|
*/
|
||||||
|
public static boolean isRemovableSimEnabled(TelephonyManager telMgr) {
|
||||||
|
if (telMgr == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ImmutableList<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(telMgr);
|
||||||
|
boolean isRemovableSimEnabled =
|
||||||
|
slotInfos.stream()
|
||||||
|
.anyMatch(
|
||||||
|
slot -> slot != null
|
||||||
|
&& slot.isRemovable()
|
||||||
|
&& !slot.getIsEuicc()
|
||||||
|
&& slot.getPorts().stream().anyMatch(
|
||||||
|
port -> port.isActive())
|
||||||
|
&& slot.getCardStateInfo()
|
||||||
|
== UiccSlotInfo.CARD_STATE_INFO_PRESENT);
|
||||||
|
Log.i(TAG, "isRemovableSimEnabled: " + isRemovableSimEnabled);
|
||||||
|
return isRemovableSimEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,6 @@ import android.telephony.SubscriptionInfo;
|
|||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.telephony.UiccCardInfo;
|
import android.telephony.UiccCardInfo;
|
||||||
import android.telephony.UiccSlotInfo;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -39,8 +38,6 @@ import com.android.settings.network.SwitchToRemovableSlotSidecar;
|
|||||||
import com.android.settings.network.UiccSlotUtil;
|
import com.android.settings.network.UiccSlotUtil;
|
||||||
import com.android.settings.sim.SimActivationNotifier;
|
import com.android.settings.sim.SimActivationNotifier;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -586,18 +583,7 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRemovableSimEnabled() {
|
private boolean isRemovableSimEnabled() {
|
||||||
ImmutableList<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(mTelMgr);
|
return UiccSlotUtil.isRemovableSimEnabled(mTelMgr);
|
||||||
boolean isRemovableSimEnabled =
|
|
||||||
slotInfos.stream()
|
|
||||||
.anyMatch(
|
|
||||||
slot -> slot != null
|
|
||||||
&& slot.isRemovable()
|
|
||||||
&& slot.getPorts().stream().anyMatch(
|
|
||||||
port -> port.isActive())
|
|
||||||
&& slot.getCardStateInfo()
|
|
||||||
== UiccSlotInfo.CARD_STATE_INFO_PRESENT);
|
|
||||||
Log.i(TAG, "isRemovableSimEnabled: " + isRemovableSimEnabled);
|
|
||||||
return isRemovableSimEnabled;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isMultipleEnabledProfilesSupported() {
|
private boolean isMultipleEnabledProfilesSupported() {
|
||||||
|
@@ -632,6 +632,106 @@ public class UiccSlotUtilTest {
|
|||||||
assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
|
assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_noPsim_returnsFalse() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
oneSimSlotDeviceActiveEsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_activeRemovableEsimAndInactivePsim_returnsFalse() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceActiveRemovableEsimInactivePsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_activeRemovableEsimAndActivePsim_returnsTrue() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceActivePsimActiveRemovableEsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_inactiveRemovableEsimAndActivePsim_returnsTrue() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceInactiveRemovableEsimActivePsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_twoActiveRemovableEsimsAndInactivePsim_returnsFalse() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceTwoActiveRemovableEsimsInactivePsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_oneActiveOneInactiveRemovableEsimActivePsim_returnsTrue() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceOneActiveOneInactiveRemovableEsimsActivePsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_activePsim_returnsTrue() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
oneSimSlotDeviceActivePsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_inactivePsim_returnsFalse() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
oneSimSlotDeviceinactivePsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_activeEsimAndActivePsim_returnsTrue() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceActivePsimActiveEsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isRemovableSimEnabled_activeEsimAndInactivePsim_returnsFalse() {
|
||||||
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
|
twoSimSlotsDeviceInactivePsimActiveEsim());
|
||||||
|
|
||||||
|
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
||||||
|
|
||||||
|
assertThat(testSlot).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
private void compareTwoUiccSlotMappings(Collection<UiccSlotMapping> testUiccSlotMappings,
|
private void compareTwoUiccSlotMappings(Collection<UiccSlotMapping> testUiccSlotMappings,
|
||||||
Collection<UiccSlotMapping> verifyUiccSlotMappings) {
|
Collection<UiccSlotMapping> verifyUiccSlotMappings) {
|
||||||
assertThat(testUiccSlotMappings.size()).isEqualTo(verifyUiccSlotMappings.size());
|
assertThat(testUiccSlotMappings.size()).isEqualTo(verifyUiccSlotMappings.size());
|
||||||
@@ -786,6 +886,10 @@ public class UiccSlotUtilTest {
|
|||||||
return new UiccSlotInfo[]{createUiccSlotInfo(true, false, 1, true)};
|
return new UiccSlotInfo[]{createUiccSlotInfo(true, false, 1, true)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UiccSlotInfo[] oneSimSlotDeviceinactivePsim() {
|
||||||
|
return new UiccSlotInfo[]{createUiccSlotInfo(false, true, -1, false)};
|
||||||
|
}
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveEsim() {
|
private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveEsim() {
|
||||||
return new UiccSlotInfo[]{
|
return new UiccSlotInfo[]{
|
||||||
createUiccSlotInfo(false, true, 0, true),
|
createUiccSlotInfo(false, true, 0, true),
|
||||||
@@ -804,6 +908,30 @@ public class UiccSlotUtilTest {
|
|||||||
createUiccSlotInfo(true, true, 1, true)};
|
createUiccSlotInfo(true, true, 1, true)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UiccSlotInfo[] twoSimSlotsDeviceActiveRemovableEsimInactivePsim() {
|
||||||
|
return new UiccSlotInfo[]{
|
||||||
|
createUiccSlotInfo(true, true, 0, true),
|
||||||
|
createUiccSlotInfo(false, true, -1, false)};
|
||||||
|
}
|
||||||
|
|
||||||
|
private UiccSlotInfo[] twoSimSlotsDeviceInactiveRemovableEsimActivePsim() {
|
||||||
|
return new UiccSlotInfo[]{
|
||||||
|
createUiccSlotInfo(true, true, -1, false),
|
||||||
|
createUiccSlotInfo(false, true, 0, true)};
|
||||||
|
}
|
||||||
|
|
||||||
|
private UiccSlotInfo[] twoSimSlotsDeviceTwoActiveRemovableEsimsInactivePsim() {
|
||||||
|
return new UiccSlotInfo[]{
|
||||||
|
createUiccSlotInfoForRemovableEsimMep(0, true, 1, true),
|
||||||
|
createUiccSlotInfo(false, true, -1, false)};
|
||||||
|
}
|
||||||
|
|
||||||
|
private UiccSlotInfo[] twoSimSlotsDeviceOneActiveOneInactiveRemovableEsimsActivePsim() {
|
||||||
|
return new UiccSlotInfo[]{
|
||||||
|
createUiccSlotInfoForRemovableEsimMep(1, true, -1, false),
|
||||||
|
createUiccSlotInfo(false, true, 0, true)};
|
||||||
|
}
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActivePsim() {
|
private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActivePsim() {
|
||||||
return new UiccSlotInfo[]{
|
return new UiccSlotInfo[]{
|
||||||
createUiccSlotInfo(true, false, 0, true),
|
createUiccSlotInfo(true, false, 0, true),
|
||||||
@@ -866,4 +994,20 @@ public class UiccSlotUtilTest {
|
|||||||
logicalSlotIdx2 /* logicalSlotIdx */,
|
logicalSlotIdx2 /* logicalSlotIdx */,
|
||||||
isActiveEsim2 /* isActive */)));
|
isActiveEsim2 /* isActive */)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UiccSlotInfo createUiccSlotInfoForRemovableEsimMep(int logicalSlotIdx1,
|
||||||
|
boolean isActiveEsim1, int logicalSlotIdx2, boolean isActiveEsim2) {
|
||||||
|
return new UiccSlotInfo(
|
||||||
|
true, /* isEuicc */
|
||||||
|
"123", /* cardId */
|
||||||
|
CARD_STATE_INFO_PRESENT, /* cardStateInfo */
|
||||||
|
true, /* isExtendApduSupported */
|
||||||
|
true, /* isRemovable */
|
||||||
|
Arrays.asList(
|
||||||
|
new UiccPortInfo("" /* iccId */, 0 /* portIdx */,
|
||||||
|
logicalSlotIdx1 /* logicalSlotIdx */, isActiveEsim1 /* isActive */),
|
||||||
|
new UiccPortInfo("" /* iccId */, 1 /* portIdx */,
|
||||||
|
logicalSlotIdx2 /* logicalSlotIdx */,
|
||||||
|
isActiveEsim2 /* isActive */)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user