diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java index 33d7a8af190..8d1aafc51c4 100644 --- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java +++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java @@ -126,13 +126,7 @@ public class ImeiInfoDialogController { } private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) { - final List 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 68c95883419..3459b5ca849 100644 --- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java +++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java @@ -20,6 +20,8 @@ import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA; import android.content.Context; import android.os.UserManager; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import androidx.annotation.VisibleForTesting; @@ -76,11 +78,27 @@ public class ImeiInfoPreferenceController extends BasePreferenceController { } } + @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 @@ public class ImeiInfoPreferenceController extends BasePreferenceController { @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 @@ public class ImeiInfoPreferenceController extends BasePreferenceController { : 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 69bc494bb1b..997c35e19e5 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 class ImeiInfoPreferenceControllerTest { 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 class ImeiInfoPreferenceControllerTest { 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 @@ public class ImeiInfoPreferenceControllerTest { 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 class ImeiInfoPreferenceControllerTest { 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 @@ public class ImeiInfoPreferenceControllerTest { 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 class ImeiInfoPreferenceControllerTest { 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();