am 68598532: Make sure that we provide the correct SIM icon based on slot ID.

* commit '685985324bb90668c1cf31e7603681059c07100a':
  Make sure that we provide the correct SIM icon based on slot ID.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b78876f..4ef5c12 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1221,5 +1221,5 @@
     <!-- Strings used in Settings->Sim cards for each installed Sim. -->
     <string name="sim_label_emergency_calls">Emergency calls</string>
     <string name="sim_description_emergency_calls">Emergency calling only</string>
-    <string name="sim_description_default">SIM card in slot <xliff:g id="slot_id">%d</xliff:g></string>
+    <string name="sim_description_default">SIM card, slot: <xliff:g id="slot_id">%s</xliff:g></string>
 </resources>
diff --git a/src/com/android/services/telephony/TelecommAccountRegistry.java b/src/com/android/services/telephony/TelecommAccountRegistry.java
index 7ec2c4e..f6220bb 100644
--- a/src/com/android/services/telephony/TelecommAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecommAccountRegistry.java
@@ -47,14 +47,19 @@
 final class TelecommAccountRegistry {
     private static final boolean DBG = false; /* STOP SHIP if true */
 
+    // Slot IDs are zero based indices but the numbered icons represent the first, second,
+    // etc... SIM in the device. So that means that index 0 is SIM 1, index 1 is SIM 2 and so on.
     private final static int[] phoneAccountIcons = {
-            R.drawable.ic_multi_sim,
             R.drawable.ic_multi_sim1,
             R.drawable.ic_multi_sim2,
             R.drawable.ic_multi_sim3,
             R.drawable.ic_multi_sim4
     };
 
+    // This icon is the one that is used when the Slot ID that we have for a particular SIM
+    // is not supported, i.e. SubscriptionManager.INVALID_SLOT_ID or the 5th SIM in a phone.
+    private final static int defaultPhoneAccountIcon =  R.drawable.ic_multi_sim;
+
     private final class AccountEntry {
         private final Phone mPhone;
         private final PhoneAccount mAccount;
@@ -85,7 +90,6 @@
 
             // Populate the phone account data.
             long subId = mPhone.getSubId();
-            int slotId = mPhone.getPhoneId() + 1;
             String line1Number = telephonyManager.getLine1NumberForSubscriber(subId);
             if (line1Number == null) {
                 line1Number = "";
@@ -96,16 +100,27 @@
             }
 
             String subDisplayName = null;
+            // We can only get the real slotId from the SubInfoRecord, we can't calculate the
+            // slotId from the subId or the phoneId in all instances.
             SubInfoRecord record = SubscriptionManager.getSubInfoForSubscriber(subId);
+            int slotId = SubscriptionManager.INVALID_SLOT_ID;
             if (record != null) {
                 subDisplayName = record.displayName;
+                slotId = record.slotId;
+            }
+
+            String slotIdString;
+            if (SubscriptionManager.isValidSlotId(slotId)) {
+                slotIdString = Integer.toString(slotId);
+            } else {
+                slotIdString = mContext.getResources().getString(R.string.unknown);
             }
 
             if (TextUtils.isEmpty(subDisplayName)) {
                 // Either the sub record is not there or it has an empty display name.
                 Log.w(this, "Could not get a display name for subid: %d", subId);
                 subDisplayName = mContext.getResources().getString(
-                        R.string.sim_description_default, slotId);
+                        R.string.sim_description_default, slotIdString);
             }
 
             // The label is user-visible so let's use the display name that the user may
@@ -116,7 +131,7 @@
             String description = isEmergency ?
                     mContext.getResources().getString(R.string.sim_description_emergency_calls) :
                     dummyPrefix + mContext.getResources().getString(
-                            R.string.sim_description_default, slotId);
+                            R.string.sim_description_default, slotIdString);
 
             // By default all SIM phone accounts can place emergency calls.
             int capabilities = PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION |
@@ -287,11 +302,13 @@
     }
 
     private int getPhoneAccountIcon(int index) {
-        if (index < TelecommAccountRegistry.phoneAccountIcons.length) {
+        // A valid slot id doesn't necessarily mean that we have an icon for it.
+        if (SubscriptionManager.isValidSlotId(index) &&
+                index < TelecommAccountRegistry.phoneAccountIcons.length) {
             return TelecommAccountRegistry.phoneAccountIcons[index];
         }
-        // default blank icon
-        return TelecommAccountRegistry.phoneAccountIcons[0];
+        // Invalid indices get the default icon that has no number associated with it.
+        return defaultPhoneAccountIcon;
     }
 
     private void tearDownAccounts() {