From 948f51209812f541b2bcbeeb6c027a2e0462a7e5 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Tue, 24 May 2022 18:21:59 +0800 Subject: [PATCH] Changing the condition since the esim may be removable The condition whether the slot is esim slot should use getIsEuicc api since the esim may be removable. Bug: 233338345 Test: atest UiccSlotUtilTest Change-Id: I47dc068e57a0faa7f7ce85af7933a48caa2c93e4 --- .../settings/network/EnableMultiSimSidecar.java | 3 ++- src/com/android/settings/network/UiccSlotUtil.java | 3 ++- .../ToggleSubscriptionDialogActivity.java | 1 + .../sim/receivers/SimSlotChangeHandler.java | 2 +- .../android/settings/network/UiccSlotUtilTest.java | 14 ++++++++++++++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/network/EnableMultiSimSidecar.java b/src/com/android/settings/network/EnableMultiSimSidecar.java index aefd55f00e8..5545a69dd21 100644 --- a/src/com/android/settings/network/EnableMultiSimSidecar.java +++ b/src/com/android/settings/network/EnableMultiSimSidecar.java @@ -190,7 +190,8 @@ public class EnableMultiSimSidecar extends AsyncTaskSidecar { Set activeRemovableLogicalSlotIds = new ArraySet<>(); for (UiccSlotInfo info : infos) { for (UiccPortInfo portInfo :info.getPorts()) { - if (info != null && portInfo.isActive() && info.isRemovable()) { + if (info != null && portInfo.isActive() && info.isRemovable() + && !info.getIsEuicc()) { activeRemovableLogicalSlotIds.add(portInfo.getLogicalSlotIndex()); } } diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java index 813b9d6826d..4c8a7d5f999 100644 --- a/src/com/android/settings/network/UiccSlotUtil.java +++ b/src/com/android/settings/network/UiccSlotUtil.java @@ -193,7 +193,7 @@ public class UiccSlotUtil { if (slotInfo == null) { return false; } - return !slotInfo.isRemovable(); + return slotInfo.getIsEuicc(); }) .findFirst().orElse(-1); @@ -249,6 +249,7 @@ public class UiccSlotUtil { if (slotId == INVALID_PHYSICAL_SLOT_ID) { for (int i = 0; i < slots.length; i++) { if (slots[i].isRemovable() + && !slots[i].getIsEuicc() && !slots[i].getPorts().stream().findFirst().get().isActive() && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_RESTRICTED) { diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java index f5f18b4b9ee..f632a71119d 100644 --- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java +++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java @@ -592,6 +592,7 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc .anyMatch( slot -> slot != null && slot.isRemovable() + && !slot.getIsEuicc() && slot.getPorts().stream().anyMatch( port -> port.isActive()) && slot.getCardStateInfo() diff --git a/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java b/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java index 4a6b96c1fa3..da3db8b1369 100644 --- a/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java +++ b/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java @@ -294,7 +294,7 @@ public class SimSlotChangeHandler { return null; } for (UiccSlotInfo slotInfo : slotInfos) { - if (slotInfo != null && slotInfo.isRemovable()) { + if (slotInfo != null && slotInfo.isRemovable() && !slotInfo.getIsEuicc()) { return slotInfo; } } diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java index 2cf984558be..5aa73eaa308 100644 --- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java +++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java @@ -92,6 +92,14 @@ public class UiccSlotUtilTest { assertThat(testSlot).isEqualTo(0); } + @Test + public void getEsimSlotId_twoSimSlotsDeviceAndRemovableEsimIsSlot1_returnTheCorrectEsimSlot() { + when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( + twoSimSlotsDeviceActivePsimActiveRemovableEsim()); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext); + + assertThat(testSlot).isEqualTo(1); + } @Test public void getEsimSlotId_twoSimSlotsDeviceAndEsimIsSlot1_returnTheCorrectEsimSlot() { @@ -729,6 +737,12 @@ public class UiccSlotUtilTest { createUiccSlotInfo(true, false, 1, true)}; } + private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveRemovableEsim() { + return new UiccSlotInfo[]{ + createUiccSlotInfo(false, true, 0, true), + createUiccSlotInfo(true, true, 1, true)}; + } + private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActivePsim() { return new UiccSlotInfo[]{ createUiccSlotInfo(true, false, 0, true),