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
This commit is contained in:
andychou
2019-04-24 21:57:53 +08:00
parent 4d03377901
commit 7c89a929c4
3 changed files with 45 additions and 32 deletions

View File

@@ -126,13 +126,7 @@ public class ImeiInfoDialogController {
}
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

View File

@@ -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

View File

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