Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4fe32785 authored by Fan Zhang's avatar Fan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Fix incorrect mapping to get subscriptioninfo" into qt-dev

parents 1a66d9b2 f61db6e9
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.text.SpannableStringBuilder;
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 androidx.annotation.VisibleForTesting;
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 @@ public class ImeiInfoDialogController {
        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 @@ public class ImeiInfoDialogController {
    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 @@ public class ImeiInfoDialogController {
        mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
    }

    private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) {
        return SubscriptionManager.from(context).getActiveSubscriptionInfoForSimSlotIndex(slotId);
    }

    @VisibleForTesting
    String getCdmaPrlVersion() {
        return mTelephonyManager.getCdmaPrlVersion();
+24 −3
Original line number Diff line number Diff line
@@ -28,12 +28,14 @@ import static org.mockito.ArgumentMatchers.any;
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.Mock;
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 @@ public class ImeiInfoDialogControllerTest {
    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 class ImeiInfoDialogControllerTest {
    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();
@@ -80,6 +93,14 @@ public class ImeiInfoDialogControllerTest {
        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
    public void populateImeiInfo_cdmaLteEnabled_shouldSetMeidAndImeiAndMin() {
        doReturn(true).when(mController).isCdmaLteEnabled();