From 4c206e1a11897289d1e6f750929f70d126e65fc2 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Wed, 12 Apr 2023 17:51:52 +0800 Subject: [PATCH] Fix the IndexOutOfBoundsException Bug: 276460284 Test: build pass Change-Id: If70bd4624b9b94aafa0930f0deba106cff5a2212 --- .../settings/network/SubscriptionUtil.java | 1 + .../sim/receivers/SimSlotChangeHandler.java | 22 +++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 9c4ac0307d6..9d953bf3139 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -438,6 +438,7 @@ public class SubscriptionUtil { } } + Log.d(TAG, "getSelectableSubscriptionInfoList: " + selectableList); return selectableList; } } diff --git a/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java b/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java index f6c9cc42e15..dabb08896c8 100644 --- a/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java +++ b/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java @@ -43,7 +43,6 @@ import com.android.settings.sim.SwitchToEsimConfirmDialogActivity; import com.google.common.collect.ImmutableList; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -100,6 +99,9 @@ public class SimSlotChangeHandler { int lastRemovableSlotState = getLastRemovableSimSlotState(mContext); int currentRemovableSlotState = removableSlotInfo.getCardStateInfo(); + Log.i(TAG, + "lastRemovableSlotState: " + lastRemovableSlotState + ",currentRemovableSlotState: " + + currentRemovableSlotState); boolean isRemovableSimInserted = lastRemovableSlotState == UiccSlotInfo.CARD_STATE_INFO_ABSENT && currentRemovableSlotState == UiccSlotInfo.CARD_STATE_INFO_PRESENT; @@ -259,7 +261,7 @@ public class SimSlotChangeHandler { } List subscriptionInfos = getAvailableRemovableSubscription(); - if (subscriptionInfos == null || subscriptionInfos.get(0) == null) { + if (subscriptionInfos.isEmpty()) { Log.e(TAG, "Unable to find the removable subscriptionInfo. Do nothing."); return; } @@ -275,6 +277,7 @@ public class SimSlotChangeHandler { private void setRemovableSimSlotState(Context context, int state) { final SharedPreferences prefs = context.getSharedPreferences(EUICC_PREFS, MODE_PRIVATE); prefs.edit().putInt(KEY_REMOVABLE_SLOT_STATE, state).apply(); + Log.d(TAG, "setRemovableSimSlotState: " + state); } private int getSuwRemovableSlotAction(Context context) { @@ -332,13 +335,14 @@ public class SimSlotChangeHandler { } protected List getAvailableRemovableSubscription() { - List subList = new ArrayList<>(); - for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mContext)) { - if (!info.isEmbedded()) { - subList.add(info); - } - } - return subList; + List removableSubscriptions = + SubscriptionUtil.getAvailableSubscriptions(mContext); + return ImmutableList.copyOf( + removableSubscriptions.stream() + // ToDo: This condition is for psim only. If device supports removable + // esim, it needs an new condition. + .filter(sub -> !sub.isEmbedded()) + .collect(Collectors.toList())); } private void startChooseSimActivity(boolean psimInserted) {