Merge "Fix incorrect mapping to get subscriptioninfo" into qt-dev
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
index 8d1aafc..4b2f50d 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
@@ -26,6 +26,7 @@
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.TtsSpan;
+import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -33,10 +34,10 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.settings.R;
-import java.util.List;
-
public class ImeiInfoDialogController {
+ private static final String TAG = "ImeiInfoDialog";
+
@VisibleForTesting
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;
@@ -75,15 +76,24 @@
mDialog = dialog;
mSlotId = slotId;
final Context context = dialog.getContext();
- mTelephonyManager = (TelephonyManager) context.getSystemService(
- Context.TELEPHONY_SERVICE);
- mSubscriptionInfo = getSubscriptionInfo(context, slotId);
+ mSubscriptionInfo = context.getSystemService(SubscriptionManager.class)
+ .getActiveSubscriptionInfoForSimSlotIndex(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.
*/
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) {
updateDialogForCdmaPhone();
} else {
@@ -94,9 +104,9 @@
private void updateDialogForCdmaPhone() {
final Resources res = mDialog.getContext().getResources();
mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());
- mDialog.setText(ID_MIN_NUMBER_VALUE,
- mSubscriptionInfo != null ? mTelephonyManager.getCdmaMin(
- mSubscriptionInfo.getSubscriptionId()) : "");
+ mDialog.setText(ID_MIN_NUMBER_VALUE, mSubscriptionInfo != null
+ ? mTelephonyManager.getCdmaMin(mSubscriptionInfo.getSubscriptionId())
+ : "");
if (res.getBoolean(R.bool.config_msid_enable)) {
mDialog.setText(ID_MIN_NUMBER_LABEL,
@@ -125,10 +135,6 @@
mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
}
- private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) {
- return SubscriptionManager.from(context).getActiveSubscriptionInfoForSimSlotIndex(slotId);
- }
-
@VisibleForTesting
String getCdmaPrlVersion() {
return mTelephonyManager.getCdmaPrlVersion();
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java
index a19f022..f38668c 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java
@@ -28,12 +28,14 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import org.junit.Before;
@@ -43,6 +45,9 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
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;
@RunWith(RobolectricTestRunner.class)
@@ -53,6 +58,8 @@
private static final String IMEI_NUMBER = "2341982751254";
private static final String MIN_NUMBER = "123417851315";
private static final String IMEI_SV_NUMBER = "12";
+ private static final int SLOT_ID = 0;
+ private static final int SUB_ID = 0;
@Mock
private ImeiInfoDialogFragment mDialog;
@@ -68,10 +75,16 @@
public void setup() {
MockitoAnnotations.initMocks(this);
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);
- 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(MEID_NUMBER).when(mController).getMeid();
@@ -81,6 +94,14 @@
}
@Test
+ public void populateImeiInfo_invalidSlot_shouldSetNothing() {
+ mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID + 1));
+
+ mController.populateImeiInfo();
+ verify(mDialog, never()).setText(anyInt(), any());
+ }
+
+ @Test
public void populateImeiInfo_cdmaLteEnabled_shouldSetMeidAndImeiAndMin() {
doReturn(true).when(mController).isCdmaLteEnabled();
when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_CDMA);