[MEP] sort the simSlotMapping by logcal slot id
The modem assign the simSlotMapping like UiccSlotMapping[
(mPortIndex=0, mPhysicalSlotIndex=0, mLogicalSlotIndex=1),
UiccSlotMapping (mPortIndex=1, mPhysicalSlotIndex=0,
mLogicalSlotIndex=0)]. The settings replace the first one
UiccSlotMapping when user insert psim and the both of esim
profile are not enabled. It is not correct. The root cause is that
the settings did not sort the simSlotMapping by logcal slot id.
Bug: 223662007
Test: atest UiccSlotUtilTest (PASS)
Change-Id: I6871db6c2d8d7b9f3cb334bb5cd2c7978b5b3b85
diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java
index 9a157d6..8fdc370 100644
--- a/src/com/android/settings/network/UiccSlotUtil.java
+++ b/src/com/android/settings/network/UiccSlotUtil.java
@@ -369,6 +369,7 @@
}
return true;
})
+ .sorted(Comparator.comparingInt(UiccSlotMapping::getLogicalSlotIndex))
.mapToInt(uiccSlotMapping -> uiccSlotMapping.getLogicalSlotIndex())
.findFirst()
.orElse(INVALID_LOGICAL_SLOT_ID);
diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java
index cc9bdfc..2cf9845 100644
--- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java
@@ -454,7 +454,7 @@
@Test
public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsAToPsimAndPort0_logicalSlot1() {
// There is only one enabled esimPort0 before user enables the psim.
- Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingPsimAndPort1();
+ Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsA();
Collection<SubscriptionInfo> activeSubscriptionInfoList =
createActiveSubscriptionInfoListOneSim(0, 0);
SubscriptionInfo removedSubInfo = null;
@@ -469,7 +469,7 @@
@Test
public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsBToPsimAndPort1_logicalSlot1() {
// There is only one enabled esimPort1 before user enables the psim.
- Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingPsimAndPort1();
+ Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsB();
Collection<SubscriptionInfo> activeSubscriptionInfoList =
createActiveSubscriptionInfoListOneSim(0, 1);
SubscriptionInfo removedSubInfo = null;
@@ -484,7 +484,7 @@
@Test
public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsBToPsimAndPort0_logicalSlot0() {
// There is only one enabled esimPort0 before user enables the psim.
- Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingPsimAndPort1();
+ Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsB();
Collection<SubscriptionInfo> activeSubscriptionInfoList =
createActiveSubscriptionInfoListOneSim(1, 0);
SubscriptionInfo removedSubInfo = null;
@@ -552,6 +552,48 @@
assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
}
+ @Test
+ public void getExcludedLogicalSlotIndex_noEsimAndFromDualPortsAToPsimAndPort1_logicalSlot0() {
+ // There is no profiles enabled on either esim port before user enables the psim.
+ Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsA();
+ Collection<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<>();
+ SubscriptionInfo removedSubInfo = null;
+ int verifyExcludedLogicalSlotIndex = 0;
+
+ int testExcludedLogicalSlotIndex = UiccSlotUtil.getExcludedLogicalSlotIndex(
+ uiccSlotMappings, activeSubscriptionInfoList, removedSubInfo, true);
+
+ assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
+ }
+
+ @Test
+ public void getExcludedLogicalSlotIndex_noEsimAndFromDualPortsBToPsimAndPort0_logicalSlot0() {
+ // There is no profiles enabled on either esim port before user enables the psim.
+ Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsB();
+ Collection<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<>();
+ SubscriptionInfo removedSubInfo = null;
+ int verifyExcludedLogicalSlotIndex = 0;
+
+ int testExcludedLogicalSlotIndex = UiccSlotUtil.getExcludedLogicalSlotIndex(
+ uiccSlotMappings, activeSubscriptionInfoList, removedSubInfo, true);
+
+ assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
+ }
+
+ @Test
+ public void getExcludedLogicalSlotIndex_noEsimNoOrdingFromDualPortsBToPsimAndPort1_logical0() {
+ // There is no profiles enabled on either esim port before user enables the psim.
+ Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsBNoOrding();
+ Collection<SubscriptionInfo> activeSubscriptionInfoList = new ArrayList<>();
+ SubscriptionInfo removedSubInfo = null;
+ int verifyExcludedLogicalSlotIndex = 0;
+
+ int testExcludedLogicalSlotIndex = UiccSlotUtil.getExcludedLogicalSlotIndex(
+ uiccSlotMappings, activeSubscriptionInfoList, removedSubInfo, true);
+
+ assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
+ }
+
private void compareTwoUiccSlotMappings(Collection<UiccSlotMapping> testUiccSlotMappings,
Collection<UiccSlotMapping> verifyUiccSlotMappings) {
assertThat(testUiccSlotMappings.size()).isEqualTo(verifyUiccSlotMappings.size());
@@ -656,7 +698,13 @@
return slotMap;
}
+ private List<UiccSlotMapping> createUiccSlotMappingDualPortsBNoOrding() {
+ List<UiccSlotMapping> slotMap = new ArrayList<>();
+ slotMap.add(new UiccSlotMapping(0, ESIM_PHYSICAL_SLOT, 1));
+ slotMap.add(new UiccSlotMapping(1, ESIM_PHYSICAL_SLOT, 0));
+ return slotMap;
+ }
/**
* The "oneSimSlotDevice" has below cases
* 1) The device is one psim slot and no esim slot