Fix SystemUi crash

Fix SystemUi crash by handling unknown phoneId

Change-Id: I768e34f0bc2652b782e3f7316e1dcd0e0bafbee3
CRs-Fixed: 724359
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/MSimSignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/MSimSignalClusterView.java
index 30f7ec0..c4cec8c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/MSimSignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/MSimSignalClusterView.java
@@ -130,7 +130,9 @@
             mMobileType[i]     = (ImageView) findViewById(mMobileTypeResourceId[i]);
             mNoSimSlot[i]      = (ImageView) findViewById(mNoSimSlotResourceId[i]);
         }
-        apply(SubscriptionManager.getPhoneId(SubscriptionManager.getDefaultSubId()));
+        for (int i = 0; i < mNumPhones; i++) {
+            apply(i);
+        }
     }
 
     @Override
@@ -154,7 +156,9 @@
         mWifiVisible = visible;
         mWifiStrengthId = strengthIcon;
         mWifiDescription = contentDescription;
-        apply(SubscriptionManager.getPhoneId(SubscriptionManager.getDefaultSubId()));
+        for (int i = 0; i < mNumPhones; i++) {
+            apply(i);
+        }
     }
 
     @Override
@@ -181,8 +185,7 @@
 
     @Override
     public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-        int defaultPhoneId = SubscriptionManager.getPhoneId(SubscriptionManager.
-                getDefaultSubId());
+        int defaultPhoneId = getDefaultPhoneId();
         // Standard group layout onPopulateAccessibilityEvent() implementations
         // ignore content description, so populate manually
         if (mWifiVisible && mWifiGroup != null &&
@@ -201,6 +204,21 @@
         return false;
     }
 
+    private int getDefaultPhoneId() {
+        int phoneId;
+        phoneId = getPhoneId(SubscriptionManager.getDefaultSubId());
+        if ( phoneId < 0 || phoneId >= mNumPhones) {
+            phoneId = 0;
+        }
+        return phoneId;
+    }
+
+
+    private int getPhoneId(long subId) {
+        int phoneId;
+        phoneId = SubscriptionManager.getPhoneId(subId);
+        return phoneId;
+    }
 
 
     // Run after each indicator change.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MSimNetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MSimNetworkControllerImpl.java
index 118b828..a73cd92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MSimNetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MSimNetworkControllerImpl.java
@@ -169,7 +169,7 @@
             mMSimDataServiceState[i] = ServiceState.STATE_OUT_OF_SERVICE;
         }
 
-        mDefaultPhoneId = SubscriptionManager.getPhoneId(SubscriptionManager.getDefaultSubId());
+        mDefaultPhoneId = getDefaultPhoneId();
         mDataConnected = mMSimDataConnected[mDefaultPhoneId];
         mSimState = mMSimState[mDefaultPhoneId];
         mDataActivity = mMSimDataActivity[mDefaultPhoneId];
@@ -243,6 +243,18 @@
             }
         //}
     }
+
+    private int getDefaultPhoneId() {
+        int phoneId;
+        int numPhones = TelephonyManager.getDefault().getPhoneCount();
+        phoneId = getPhoneId(SubscriptionManager.getDefaultSubId());
+        if ( phoneId < 0 || phoneId >= numPhones) {
+            phoneId = 0;
+        }
+        return phoneId;
+    }
+
+
     private int getPhoneId(long subId) {
         int phoneId;
         phoneId = SubscriptionManager.getPhoneId(subId);
@@ -348,8 +360,7 @@
         } else if (action.equals(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED)) {
                 unregisterPhoneStateListener();
                 registerPhoneStateListener(mContext);
-                mDefaultPhoneId = SubscriptionManager.getPhoneId(
-                        SubscriptionManager.getDefaultSubId());
+                mDefaultPhoneId = getDefaultPhoneId();
                 for (int i=0 ; i < mPhoneCount ; i++) {
                     updateCarrierText(i);
                     updateTelephonySignalStrength(i);