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