To avoid the NullPointerException of UiccSlotInfo
Bug: 307599094
Test: Build pass
Change-Id: Ia3b8d29b37f2c9616856e9448c9f346b81229534
diff --git a/src/com/android/settings/network/EnableMultiSimSidecar.java b/src/com/android/settings/network/EnableMultiSimSidecar.java
index aefd55f..6bc38ef 100644
--- a/src/com/android/settings/network/EnableMultiSimSidecar.java
+++ b/src/com/android/settings/network/EnableMultiSimSidecar.java
@@ -171,8 +171,11 @@
}
int activePorts = 0;
for (UiccSlotInfo slotInfo : slotsInfo) {
+ if (slotInfo == null) {
+ continue;
+ }
for (UiccPortInfo portInfo : slotInfo.getPorts()) {
- if (slotInfo != null && portInfo.isActive()) {
+ if (portInfo.isActive()) {
activePorts++;
}
}
@@ -189,8 +192,11 @@
}
Set<Integer> activeRemovableLogicalSlotIds = new ArraySet<>();
for (UiccSlotInfo info : infos) {
- for (UiccPortInfo portInfo :info.getPorts()) {
- if (info != null && portInfo.isActive() && info.isRemovable()) {
+ if (info == null) {
+ continue;
+ }
+ for (UiccPortInfo portInfo : info.getPorts()) {
+ if (portInfo.isActive() && info.isRemovable()) {
activeRemovableLogicalSlotIds.add(portInfo.getLogicalSlotIndex());
}
}
diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java
index 54c571b..f69b63f 100644
--- a/src/com/android/settings/network/MobileNetworkRepository.java
+++ b/src/com/android/settings/network/MobileNetworkRepository.java
@@ -378,11 +378,11 @@
return mMobileNetworkInfoDao.queryMobileNetworkInfoBySubId(subId);
}
- private void getUiccInfoBySubscriptionInfo(UiccSlotInfo[] uiccSlotInfos,
+ private void getUiccInfoBySubscriptionInfo(@NonNull UiccSlotInfo[] uiccSlotInfos,
SubscriptionInfo subInfo) {
for (int i = 0; i < uiccSlotInfos.length; i++) {
UiccSlotInfo curSlotInfo = uiccSlotInfos[i];
- if (curSlotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT) {
+ if (curSlotInfo != null && curSlotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT) {
final int index = i;
mIsEuicc = curSlotInfo.getIsEuicc();
mCardState = curSlotInfo.getCardStateInfo();
diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java
index 49a1a85..e329c74 100644
--- a/src/com/android/settings/network/UiccSlotUtil.java
+++ b/src/com/android/settings/network/UiccSlotUtil.java
@@ -301,7 +301,8 @@
}
if (slotId == INVALID_PHYSICAL_SLOT_ID) {
for (int i = 0; i < slots.length; i++) {
- if (slots[i].isRemovable()
+ if (slots[i] != null
+ && slots[i].isRemovable()
&& !slots[i].getIsEuicc()
&& !slots[i].getPorts().stream().findFirst().get().isActive()
&& slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR
@@ -310,8 +311,9 @@
}
}
} else {
- if (slotId >= slots.length || !slots[slotId].isRemovable()) {
- throw new UiccSlotsException("The given slotId is not a removable slot: " + slotId);
+ if (slotId >= slots.length || slots[slotId] == null || !slots[slotId].isRemovable()) {
+ Log.d(TAG, "The given slotId is not a removable slot: " + slotId);
+ return INVALID_PHYSICAL_SLOT_ID;
}
if (!slots[slotId].getPorts().stream().findFirst().get().isActive()) {
return slotId;