Fix incorrect mapping to get subscriptioninfo
getActiveSubscriptionInfoList() returns a list of active subscription. It doesn't 1:1 mapping with slotId. So it is not correct to use slotId as index to get subscriptioninfo from list. Use framework interface getActiveSubscriptionInfoForSimSlotIndex() to get subscriptioninfo per slotid instead. Fixes: 129038597 Test: robotest Change-Id: If4277c425e6145e0e3ba716551d0dce46cdb61ab
This commit is contained in:
@@ -26,6 +26,7 @@ import android.text.SpannableStringBuilder;
|
|||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.style.TtsSpan;
|
import android.text.style.TtsSpan;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
@@ -33,10 +34,10 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class ImeiInfoDialogController {
|
public class ImeiInfoDialogController {
|
||||||
|
|
||||||
|
private static final String TAG = "ImeiInfoDialog";
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final int ID_PRL_VERSION_VALUE = R.id.prl_version_value;
|
static final int ID_PRL_VERSION_VALUE = R.id.prl_version_value;
|
||||||
private static final int ID_MIN_NUMBER_LABEL = R.id.min_number_label;
|
private static final int ID_MIN_NUMBER_LABEL = R.id.min_number_label;
|
||||||
@@ -75,15 +76,24 @@ public class ImeiInfoDialogController {
|
|||||||
mDialog = dialog;
|
mDialog = dialog;
|
||||||
mSlotId = slotId;
|
mSlotId = slotId;
|
||||||
final Context context = dialog.getContext();
|
final Context context = dialog.getContext();
|
||||||
mTelephonyManager = (TelephonyManager) context.getSystemService(
|
mSubscriptionInfo = context.getSystemService(SubscriptionManager.class)
|
||||||
Context.TELEPHONY_SERVICE);
|
.getActiveSubscriptionInfoForSimSlotIndex(slotId);
|
||||||
mSubscriptionInfo = getSubscriptionInfo(context, slotId);
|
if (mSubscriptionInfo != null) {
|
||||||
|
mTelephonyManager = context.getSystemService(TelephonyManager.class)
|
||||||
|
.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
|
||||||
|
} else {
|
||||||
|
mTelephonyManager = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets IMEI/MEID information based on whether the device is CDMA or GSM.
|
* Sets IMEI/MEID information based on whether the device is CDMA or GSM.
|
||||||
*/
|
*/
|
||||||
public void populateImeiInfo() {
|
public void populateImeiInfo() {
|
||||||
|
if (mTelephonyManager == null) {
|
||||||
|
Log.w(TAG, "TelephonyManager for this slot is null. Invalid slot? id=" + mSlotId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
|
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
|
||||||
updateDialogForCdmaPhone();
|
updateDialogForCdmaPhone();
|
||||||
} else {
|
} else {
|
||||||
@@ -94,9 +104,9 @@ public class ImeiInfoDialogController {
|
|||||||
private void updateDialogForCdmaPhone() {
|
private void updateDialogForCdmaPhone() {
|
||||||
final Resources res = mDialog.getContext().getResources();
|
final Resources res = mDialog.getContext().getResources();
|
||||||
mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());
|
mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());
|
||||||
mDialog.setText(ID_MIN_NUMBER_VALUE,
|
mDialog.setText(ID_MIN_NUMBER_VALUE, mSubscriptionInfo != null
|
||||||
mSubscriptionInfo != null ? mTelephonyManager.getCdmaMin(
|
? mTelephonyManager.getCdmaMin(mSubscriptionInfo.getSubscriptionId())
|
||||||
mSubscriptionInfo.getSubscriptionId()) : "");
|
: "");
|
||||||
|
|
||||||
if (res.getBoolean(R.bool.config_msid_enable)) {
|
if (res.getBoolean(R.bool.config_msid_enable)) {
|
||||||
mDialog.setText(ID_MIN_NUMBER_LABEL,
|
mDialog.setText(ID_MIN_NUMBER_LABEL,
|
||||||
@@ -125,10 +135,6 @@ public class ImeiInfoDialogController {
|
|||||||
mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
|
mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) {
|
|
||||||
return SubscriptionManager.from(context).getActiveSubscriptionInfoForSimSlotIndex(slotId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
String getCdmaPrlVersion() {
|
String getCdmaPrlVersion() {
|
||||||
return mTelephonyManager.getCdmaPrlVersion();
|
return mTelephonyManager.getCdmaPrlVersion();
|
||||||
|
@@ -28,12 +28,14 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.eq;
|
import static org.mockito.Mockito.eq;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -43,6 +45,9 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.shadow.api.Shadow;
|
||||||
|
import org.robolectric.shadows.ShadowSubscriptionManager;
|
||||||
|
import org.robolectric.shadows.ShadowTelephonyManager;
|
||||||
import org.robolectric.util.ReflectionHelpers;
|
import org.robolectric.util.ReflectionHelpers;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@@ -53,6 +58,8 @@ public class ImeiInfoDialogControllerTest {
|
|||||||
private static final String IMEI_NUMBER = "2341982751254";
|
private static final String IMEI_NUMBER = "2341982751254";
|
||||||
private static final String MIN_NUMBER = "123417851315";
|
private static final String MIN_NUMBER = "123417851315";
|
||||||
private static final String IMEI_SV_NUMBER = "12";
|
private static final String IMEI_SV_NUMBER = "12";
|
||||||
|
private static final int SLOT_ID = 0;
|
||||||
|
private static final int SUB_ID = 0;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private ImeiInfoDialogFragment mDialog;
|
private ImeiInfoDialogFragment mDialog;
|
||||||
@@ -68,10 +75,16 @@ public class ImeiInfoDialogControllerTest {
|
|||||||
public void setup() {
|
public void setup() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
|
final ShadowSubscriptionManager ssm = Shadow.extract(mContext.getSystemService(
|
||||||
|
SubscriptionManager.class));
|
||||||
|
ssm.setActiveSubscriptionInfos(mSubscriptionInfo);
|
||||||
|
when(mSubscriptionInfo.getSubscriptionId()).thenReturn(SUB_ID);
|
||||||
|
final ShadowTelephonyManager stm = Shadow.extract(mContext.getSystemService(
|
||||||
|
TelephonyManager.class));
|
||||||
|
stm.setTelephonyManagerForSubscriptionId(SUB_ID, mTelephonyManager);
|
||||||
when(mDialog.getContext()).thenReturn(mContext);
|
when(mDialog.getContext()).thenReturn(mContext);
|
||||||
mController = spy(new ImeiInfoDialogController(mDialog, 0 /* phone id */));
|
|
||||||
ReflectionHelpers.setField(mController, "mSubscriptionInfo", mSubscriptionInfo);
|
mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID));
|
||||||
|
|
||||||
doReturn(PRL_VERSION).when(mController).getCdmaPrlVersion();
|
doReturn(PRL_VERSION).when(mController).getCdmaPrlVersion();
|
||||||
doReturn(MEID_NUMBER).when(mController).getMeid();
|
doReturn(MEID_NUMBER).when(mController).getMeid();
|
||||||
@@ -80,6 +93,14 @@ public class ImeiInfoDialogControllerTest {
|
|||||||
when(mTelephonyManager.getImei(anyInt())).thenReturn(IMEI_NUMBER);
|
when(mTelephonyManager.getImei(anyInt())).thenReturn(IMEI_NUMBER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void populateImeiInfo_invalidSlot_shouldSetNothing() {
|
||||||
|
mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID + 1));
|
||||||
|
|
||||||
|
mController.populateImeiInfo();
|
||||||
|
verify(mDialog, never()).setText(anyInt(), any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void populateImeiInfo_cdmaLteEnabled_shouldSetMeidAndImeiAndMin() {
|
public void populateImeiInfo_cdmaLteEnabled_shouldSetMeidAndImeiAndMin() {
|
||||||
doReturn(true).when(mController).isCdmaLteEnabled();
|
doReturn(true).when(mController).isCdmaLteEnabled();
|
||||||
|
Reference in New Issue
Block a user