[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
Merged-In: I6871db6c2d8d7b9f3cb334bb5cd2c7978b5b3b85
This commit is contained in:
SongFerngWang
2022-03-11 02:58:55 +08:00
parent ccd55cc5c9
commit ef80331fb0
2 changed files with 52 additions and 3 deletions

View File

@@ -369,6 +369,7 @@ public class UiccSlotUtil {
} }
return true; return true;
}) })
.sorted(Comparator.comparingInt(UiccSlotMapping::getLogicalSlotIndex))
.mapToInt(uiccSlotMapping -> uiccSlotMapping.getLogicalSlotIndex()) .mapToInt(uiccSlotMapping -> uiccSlotMapping.getLogicalSlotIndex())
.findFirst() .findFirst()
.orElse(INVALID_LOGICAL_SLOT_ID); .orElse(INVALID_LOGICAL_SLOT_ID);

View File

@@ -454,7 +454,7 @@ public class UiccSlotUtilTest {
@Test @Test
public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsAToPsimAndPort0_logicalSlot1() { public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsAToPsimAndPort0_logicalSlot1() {
// There is only one enabled esimPort0 before user enables the psim. // There is only one enabled esimPort0 before user enables the psim.
Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingPsimAndPort1(); Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsA();
Collection<SubscriptionInfo> activeSubscriptionInfoList = Collection<SubscriptionInfo> activeSubscriptionInfoList =
createActiveSubscriptionInfoListOneSim(0, 0); createActiveSubscriptionInfoListOneSim(0, 0);
SubscriptionInfo removedSubInfo = null; SubscriptionInfo removedSubInfo = null;
@@ -469,7 +469,7 @@ public class UiccSlotUtilTest {
@Test @Test
public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsBToPsimAndPort1_logicalSlot1() { public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsBToPsimAndPort1_logicalSlot1() {
// There is only one enabled esimPort1 before user enables the psim. // There is only one enabled esimPort1 before user enables the psim.
Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingPsimAndPort1(); Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsB();
Collection<SubscriptionInfo> activeSubscriptionInfoList = Collection<SubscriptionInfo> activeSubscriptionInfoList =
createActiveSubscriptionInfoListOneSim(0, 1); createActiveSubscriptionInfoListOneSim(0, 1);
SubscriptionInfo removedSubInfo = null; SubscriptionInfo removedSubInfo = null;
@@ -484,7 +484,7 @@ public class UiccSlotUtilTest {
@Test @Test
public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsBToPsimAndPort0_logicalSlot0() { public void getExcludedLogicalSlotIndex_oneEsimAndFromDualPortsBToPsimAndPort0_logicalSlot0() {
// There is only one enabled esimPort0 before user enables the psim. // There is only one enabled esimPort0 before user enables the psim.
Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingPsimAndPort1(); Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsB();
Collection<SubscriptionInfo> activeSubscriptionInfoList = Collection<SubscriptionInfo> activeSubscriptionInfoList =
createActiveSubscriptionInfoListOneSim(1, 0); createActiveSubscriptionInfoListOneSim(1, 0);
SubscriptionInfo removedSubInfo = null; SubscriptionInfo removedSubInfo = null;
@@ -552,6 +552,48 @@ public class UiccSlotUtilTest {
assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex); 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, private void compareTwoUiccSlotMappings(Collection<UiccSlotMapping> testUiccSlotMappings,
Collection<UiccSlotMapping> verifyUiccSlotMappings) { Collection<UiccSlotMapping> verifyUiccSlotMappings) {
assertThat(testUiccSlotMappings.size()).isEqualTo(verifyUiccSlotMappings.size()); assertThat(testUiccSlotMappings.size()).isEqualTo(verifyUiccSlotMappings.size());
@@ -656,7 +698,13 @@ public class UiccSlotUtilTest {
return slotMap; 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 * The "oneSimSlotDevice" has below cases
* 1) The device is one psim slot and no esim slot * 1) The device is one psim slot and no esim slot