[Settings] Fix crash and UI error when turn ON/OFF SIM

1. Should update the UI when turn off SIM
2. Fix ConcurrentModificationException

Bug: 259487637
Test: manual
Change-Id: If30a6b6323ac0237c92dc210bf3953ce86a199ae
diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java
index 5de4c72..42f15c8 100644
--- a/src/com/android/settings/network/MobileNetworkRepository.java
+++ b/src/com/android/settings/network/MobileNetworkRepository.java
@@ -264,8 +264,7 @@
                         mIsActive = portInfo.isActive();
                         mPortIndex = portInfo.getPortIndex();
                     } else if (DEBUG) {
-                        Log.d(TAG,
-                                "Can not get port index and physicalSlotIndex for subId "
+                        Log.d(TAG, "Can not get port index and physicalSlotIndex for subId "
                                         + mSubId);
                     }
                 });
@@ -297,8 +296,7 @@
         setActiveSubInfoList(mActiveSubInfoEntityList);
     }
 
-    private void setActiveSubInfoList(
-            List<SubscriptionInfoEntity> activeSubInfoEntityList) {
+    private void setActiveSubInfoList(List<SubscriptionInfoEntity> activeSubInfoEntityList) {
         if (DEBUG) {
             Log.d(TAG,
                     "onActiveSubInfoChanged, activeSubInfoEntityList = " + activeSubInfoEntityList);
@@ -460,11 +458,16 @@
             if (DEBUG) {
                 Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs");
             }
-            for (SubscriptionInfoEntity info : mAvailableSubInfoEntityList) {
+
+            SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray(
+                    new SubscriptionInfoEntity[0]);
+            for (SubscriptionInfoEntity info : availableInfoArray) {
                 deleteAllInfoBySubId(info.subId);
             }
+
         } else if (availableInfoList != null) {
-            for (SubscriptionInfo subInfo : availableInfoList) {
+            SubscriptionInfo[] infoArray = availableInfoList.toArray(new SubscriptionInfo[0]);
+            for (SubscriptionInfo subInfo : infoArray) {
                 mSubscriptionInfoMap.remove(subInfo.getSubscriptionId());
                 if (DEBUG) {
                     Log.d(TAG,
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index 88c3656..60f35cd 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -464,10 +464,6 @@
 
     @Override
     public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
-    }
-
-    @Override
-    public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
         if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) {
 
             // Check the current subId is existed or not, if so, finish it.
@@ -500,6 +496,10 @@
     }
 
     @Override
+    public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
+    }
+
+    @Override
     public void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {
     }