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);