From 7c89a929c42b7ebd7475803758b4b9aede083366 Mon Sep 17 00:00:00 2001 From: andychou Date: Wed, 24 Apr 2019 21:57:53 +0800 Subject: [PATCH] Avoid IMEI overrided by getSummary() for dual SIM condition IMEI information will be overrided by getSummary() and cause second slot IMEI is oerrided by first slot. Avoid IMEI is override by first slot information. Bug: 131124169 Test: Test with dual SIM device and atest ImeiInfoPreferenceControllerTest, ImeiInfoDialogControllerTest pass Change-Id: Ia0a028aa0103867f42fff610129cf7ce2d3910b7 --- .../imei/ImeiInfoDialogController.java | 8 +-- .../imei/ImeiInfoPreferenceController.java | 51 +++++++++++++------ .../ImeiInfoPreferenceControllerTest.java | 18 +++---- 3 files changed, 45 insertions(+), 32 deletions(-) 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();