Merge "Avoid IMEI overrided by getSummary() for dual SIM condition" into qt-dev
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
index 33d7a8a..8d1aafc 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
@@ -126,13 +126,7 @@
     }
 
     private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) {
-        final List<SubscriptionInfo> subscriptionInfoList = SubscriptionManager.from(context)
-                .getActiveSubscriptionInfoList(true);
-        if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) {
-            return null;
-        }
-
-        return subscriptionInfoList.get(slotId);
+        return SubscriptionManager.from(context).getActiveSubscriptionInfoForSimSlotIndex(slotId);
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
index 68c9588..3459b5c 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -20,6 +20,8 @@
 
 import android.content.Context;
 import android.os.UserManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import androidx.annotation.VisibleForTesting;
@@ -77,10 +79,26 @@
     }
 
     @Override
+    public void updateState(Preference preference) {
+        if (preference == null) {
+            return;
+        }
+        int size = mPreferenceList.size();
+        for (int i = 0; i < size; i++) {
+            Preference pref = mPreferenceList.get(i);
+            updatePreference(pref, i);
+        }
+    }
+
+    @Override
     public CharSequence getSummary() {
-        final int phoneType = mTelephonyManager.getPhoneType();
-        return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid()
-                : mTelephonyManager.getImei();
+        return getSummary(0);
+    }
+
+    private CharSequence getSummary(int simSlot) {
+        final int phoneType = getPhoneType(simSlot);
+        return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid(simSlot)
+                : mTelephonyManager.getImei(simSlot);
     }
 
     @Override
@@ -117,19 +135,12 @@
 
     @Override
     public void copy() {
-        Sliceable.setCopyContent(mContext, getSummary(), mContext.getText(R.string.status_imei));
+        Sliceable.setCopyContent(mContext, getSummary(0), getTitle(0));
     }
 
     private void updatePreference(Preference preference, int simSlot) {
-        final int phoneType = mTelephonyManager.getPhoneType();
-        if (phoneType == PHONE_TYPE_CDMA) {
-            preference.setTitle(getTitleForCdmaPhone(simSlot));
-            preference.setSummary(getMeid(simSlot));
-        } else {
-            // GSM phone
-            preference.setTitle(getTitleForGsmPhone(simSlot));
-            preference.setSummary(mTelephonyManager.getImei(simSlot));
-        }
+        preference.setTitle(getTitle(simSlot));
+        preference.setSummary(getSummary(simSlot));
     }
 
     private CharSequence getTitleForGsmPhone(int simSlot) {
@@ -142,9 +153,17 @@
                 : mContext.getString(R.string.status_meid_number);
     }
 
-    @VisibleForTesting
-    String getMeid(int simSlot) {
-        return mTelephonyManager.getMeid(simSlot);
+    private CharSequence getTitle(int simSlot) {
+        final int phoneType = getPhoneType(simSlot);
+        return phoneType == PHONE_TYPE_CDMA ? getTitleForCdmaPhone(simSlot)
+                : getTitleForGsmPhone(simSlot);
+    }
+
+    private int getPhoneType(int slotIndex) {
+        SubscriptionInfo subInfo = SubscriptionManager.from(mContext)
+            .getActiveSubscriptionInfoForSimSlotIndex(slotIndex);
+        return mTelephonyManager.getCurrentPhoneType(subInfo != null ? subInfo.getSubscriptionId()
+                : SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
     }
 
     @VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
index 69bc494..997c35e 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
@@ -93,7 +93,7 @@
     public void displayPreference_multiSimGsm_shouldAddSecondPreference() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", true);
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_GSM);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_GSM);
 
         mController.displayPreference(mScreen);
 
@@ -104,8 +104,8 @@
     public void displayPreference_singleSimCdmaPhone_shouldSetSingleSimCdmaTitleAndMeid() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", false);
         final String meid = "125132215123";
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
-        doReturn(meid).when(mController).getMeid(anyInt());
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_CDMA);
+        when(mTelephonyManager.getMeid(anyInt())).thenReturn(meid);
 
         mController.displayPreference(mScreen);
 
@@ -118,8 +118,8 @@
         ReflectionHelpers.setField(mController, "mIsMultiSim", true);
         final String meid = "125132215123";
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
-        doReturn(meid).when(mController).getMeid(anyInt());
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_CDMA);
+        when(mTelephonyManager.getMeid(anyInt())).thenReturn(meid);
 
         mController.displayPreference(mScreen);
 
@@ -134,7 +134,7 @@
     public void displayPreference_singleSimGsmPhone_shouldSetSingleSimGsmTitleAndImei() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", false);
         final String imei = "125132215123";
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_GSM);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_GSM);
         when(mTelephonyManager.getImei(anyInt())).thenReturn(imei);
 
         mController.displayPreference(mScreen);
@@ -148,7 +148,7 @@
         ReflectionHelpers.setField(mController, "mIsMultiSim", true);
         final String imei = "125132215123";
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_GSM);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_GSM);
         when(mTelephonyManager.getImei(anyInt())).thenReturn(imei);
 
         mController.displayPreference(mScreen);
@@ -176,8 +176,8 @@
     public void copy_shouldCopyImeiToClipboard() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", false);
         final String meid = "125132215123";
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
-        when(mTelephonyManager.getMeid()).thenReturn(meid);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_CDMA);
+        when(mTelephonyManager.getMeid(anyInt())).thenReturn(meid);
 
         mController.copy();