[Settings] Avoid from crash when pull out SIM

Avoid from crash when pull out SIM under SimStatusDialogController.

Bug: 153512823
Test: manual
Merged-In: I3869326bdfb65368827f25469ae83539a68e171f
Change-Id: I60500c058cf15bc432e46e27fe4b9fb1ae2989b7
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index 3906fc8..9e706c4 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -415,14 +415,16 @@
         if (signalStrength == null) {
             return;
         }
-        final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
-        final PersistableBundle carrierConfig =
-                mCarrierConfigManager.getConfigForSubId(subscriptionId);
         // by default we show the signal strength
         boolean showSignalStrength = true;
-        if (carrierConfig != null) {
-            showSignalStrength = carrierConfig.getBoolean(
-                    CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL);
+        if (mSubscriptionInfo != null) {
+            final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
+            final PersistableBundle carrierConfig =
+                    mCarrierConfigManager.getConfigForSubId(subscriptionId);
+            if (carrierConfig != null) {
+                showSignalStrength = carrierConfig.getBoolean(
+                        CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL);
+            }
         }
         if (!showSignalStrength) {
             mDialog.removeSettingFromScreen(SIGNAL_STRENGTH_LABEL_ID);
@@ -455,6 +457,14 @@
     }
 
     private void updateNetworkType() {
+        if (mSubscriptionInfo == null) {
+            final String unknownNetworkType =
+                    getNetworkTypeName(TelephonyManager.NETWORK_TYPE_UNKNOWN);
+            mDialog.setText(CELL_VOICE_NETWORK_TYPE_VALUE_ID, unknownNetworkType);
+            mDialog.setText(CELL_DATA_NETWORK_TYPE_VALUE_ID, unknownNetworkType);
+            return;
+        }
+
         // Whether EDGE, UMTS, etc...
         String dataNetworkTypeName = null;
         String voiceNetworkTypeName = null;
@@ -497,14 +507,16 @@
     }
 
     private void updateIccidNumber() {
-        final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
-        final PersistableBundle carrierConfig =
-                mCarrierConfigManager.getConfigForSubId(subscriptionId);
         // do not show iccid by default
         boolean showIccId = false;
-        if (carrierConfig != null) {
-            showIccId = carrierConfig.getBoolean(
-                    CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL);
+        if (mSubscriptionInfo != null) {
+            final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
+            final PersistableBundle carrierConfig =
+                    mCarrierConfigManager.getConfigForSubId(subscriptionId);
+            if (carrierConfig != null) {
+                showIccId = carrierConfig.getBoolean(
+                        CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL);
+            }
         }
         if (!showIccId) {
             mDialog.removeSettingFromScreen(ICCID_INFO_LABEL_ID);
@@ -556,6 +568,9 @@
     }
 
     private boolean isImsRegistrationStateShowUp() {
+        if (mSubscriptionInfo == null) {
+            return false;
+        }
         final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
         final PersistableBundle carrierConfig =
                 mCarrierConfigManager.getConfigForSubId(subscriptionId);