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

Commit 0ec06caa authored by fionaxu's avatar fionaxu Committed by Chen Xu
Browse files

A test api to override carrier information

This API should only be used for testing purpose e.g., CTS/GTS/SL4A
By overriding carrier information, we could force a particular carrier id,
carrier's config, but also any country or carrier overlays to be loaded
when using a test SIM with a call box.

Bug: 72332597
Test: atest CtsTelephonyTestCases:CarrierIdentificationTest

Change-Id: I32fa202597b69e6eba11e86bd1096e5f1bf1a639
(cherry picked from commit 89604586)

Merged-in: 89604586
parent 2fd3cafb
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -532,6 +532,7 @@ public class CarrierIdentifier extends Handler {

        if (VDBG) {
            logd("[matchCarrier]"
                    + " mnnmnc:" + mccmnc
                    + " gid1: " + gid1
                    + " gid2: " + gid2
                    + " imsi: " + Rlog.pii(LOG_TAG, imsi)
@@ -585,7 +586,7 @@ public class CarrierIdentifier extends Handler {
                unknownMccmncToLog, unknownGid1ToLog);
    }

    private int getCarrierListVersion() {
    public int getCarrierListVersion() {
        final Cursor cursor = mContext.getContentResolver().query(
                Uri.withAppendedPath(CarrierId.All.CONTENT_URI,
                "get_version"), null, null, null);
+5 −0
Original line number Diff line number Diff line
@@ -1547,6 +1547,11 @@ public class GsmCdmaPhone extends Phone {
        mCIM.resetCarrierKeysForImsiEncryption(mContext, mPhoneId);
    }

    @Override
    public int getCarrierIdListVersion() {
        return mCarrerIdentifier.getCarrierListVersion();
    }

    @Override
    public String getGroupIdLevel1() {
        if (isPhoneTypeGsm()) {
+12 −0
Original line number Diff line number Diff line
@@ -3017,6 +3017,10 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return null;
    }

    public int getCarrierIdListVersion() {
        return TelephonyManager.UNKNOWN_CARRIER_ID_LIST_VERSION;
    }

    /**
     *  Resets the Carrier Keys in the database. This involves 2 steps:
     *  1. Delete the keys from the database.
@@ -3597,6 +3601,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        }
    }

    public void setCarrierTestOverride(String mccmnc, String imsi, String iccid, String gid1,
            String gid2, String pnn, String spn) {
        IccRecords r = mIccRecords.get();
        if (r != null) {
            r.setCarrierTestOverride(mccmnc, imsi, iccid, gid1, gid2, pnn, spn);
        }
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("Phone: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
+25 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ public class CarrierTestOverride {
     * Sample xml:
     * <carrierTestOverrides>
       <carrierTestOverride key="isInTestMode" value="true"/>
       <carrierTestOverride key="mccmnc" value="310010" />
       <carrierTestOverride key="gid1" value="bae0000000000000"/>
       <carrierTestOverride key="gid2" value="ffffffffffffffff"/>
       <carrierTestOverride key="imsi" value="310010123456789"/>
@@ -58,6 +59,7 @@ public class CarrierTestOverride {
    static final String CARRIER_TEST_XML_ITEM_KEY = "key";
    static final String CARRIER_TEST_XML_ITEM_VALUE = "value";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE = "isInTestMode";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC = "mccmnc";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID1 = "gid1";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID2 = "gid2";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI = "imsi";
@@ -144,6 +146,29 @@ public class CarrierTestOverride {
        }
    }

    String getFakeMccMnc() {
        try {
            String mccmnc = mCarrierTestParamMap.get(CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC);
            Rlog.d(LOG_TAG, "reading mccmnc from CarrierTestConfig file: " + mccmnc);
            return mccmnc;
        } catch (NullPointerException e) {
            Rlog.w(LOG_TAG, "No mccmnc in CarrierTestConfig file ");
            return null;
        }
    }

    void override(String mccmnc, String imsi, String iccid, String gid1, String gid2, String pnn,
            String spn) {
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_ISINTESTMODE, "true");
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC, mccmnc);
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI, imsi);
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID, iccid);
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_GID1, gid1);
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_GID2, gid2);
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_PNN, pnn);
        mCarrierTestParamMap.put(CARRIER_TEST_XML_ITEM_KEY_STRING_SPN, spn);
    }

    private void loadCarrierTestOverrides() {

        FileReader carrierTestConfigReader;
+30 −43
Original line number Diff line number Diff line
@@ -80,7 +80,6 @@ public abstract class IccRecords extends Handler implements IccConstants {
    protected int mLockedRecordsReqReason = LOCKED_RECORDS_REQ_REASON_NONE;

    protected String mIccId;  // Includes only decimals (no hex)
    protected String mFakeIccId;

    protected String mFullIccId;  // Includes hex characters in ICCID
    protected String mMsisdn = null;  // My mobile number
@@ -93,22 +92,17 @@ public abstract class IccRecords extends Handler implements IccConstants {
    protected String mNewVoiceMailTag = null;
    protected boolean mIsVoiceMailFixed = false;
    protected String mImsi;
    protected String mFakeImsi;
    private IccIoResult auth_rsp;

    protected int mMncLength = UNINITIALIZED;
    protected int mMailboxIndex = 0; // 0 is no mailbox dailing number associated

    private String mSpn;
    private String mFakeSpn;

    protected String mGid1;
    protected String mFakeGid1;
    protected String mGid2;
    protected String mFakeGid2;

    protected String mPnnHomeName;
    protected String mFakePnnHomeName;

    protected String mPrefLang;

@@ -170,7 +164,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
                + " recordsRequested=" + mRecordsRequested
                + " lockedRecordsReqReason=" + mLockedRecordsReqReason
                + " iccid=" + iccIdToPrint
                + (mCarrierTestOverride.isInTestMode() ? "mFakeIccid=" + mFakeIccId : "")
                + (mCarrierTestOverride.isInTestMode() ? "mFakeIccid="
                + mCarrierTestOverride.getFakeIccid() : "")
                + " msisdnTag=" + mMsisdnTag
                + " voiceMailNum=" + Rlog.pii(VDBG, mVoiceMailNum)
                + " voiceMailTag=" + mVoiceMailTag
@@ -179,11 +174,13 @@ public abstract class IccRecords extends Handler implements IccConstants {
                + " isVoiceMailFixed=" + mIsVoiceMailFixed
                + " mImsi=" + ((mImsi != null) ?
                mImsi.substring(0, 6) + Rlog.pii(VDBG, mImsi.substring(6)) : "null")
                + (mCarrierTestOverride.isInTestMode() ? " mFakeImsi=" + mFakeImsi : "")
                + (mCarrierTestOverride.isInTestMode() ? " mFakeImsi="
                + mCarrierTestOverride.getFakeIMSI() : "")
                + " mncLength=" + mMncLength
                + " mailboxIndex=" + mMailboxIndex
                + " spn=" + mSpn
                + (mCarrierTestOverride.isInTestMode() ? " mFakeSpn=" + mFakeSpn : "");
                + (mCarrierTestOverride.isInTestMode() ? " mFakeSpn="
                + mCarrierTestOverride.getFakeSpn() : "");
    }

    /**
@@ -212,29 +209,18 @@ public abstract class IccRecords extends Handler implements IccConstants {
                Context.TELEPHONY_SERVICE);

        mCarrierTestOverride = new CarrierTestOverride();

        if (mCarrierTestOverride.isInTestMode()) {
            mFakeImsi = mCarrierTestOverride.getFakeIMSI();
            log("load mFakeImsi: " + mFakeImsi);

            mFakeGid1 = mCarrierTestOverride.getFakeGid1();
            log("load mFakeGid1: " + mFakeGid1);

            mFakeGid2 = mCarrierTestOverride.getFakeGid2();
            log("load mFakeGid2: " + mFakeGid2);

            mFakeSpn = mCarrierTestOverride.getFakeSpn();
            log("load mFakeSpn: " + mFakeSpn);

            mFakePnnHomeName = mCarrierTestOverride.getFakePnnHomeName();
            log("load mFakePnnHomeName: " + mFakePnnHomeName);

            mFakeIccId = mCarrierTestOverride.getFakeIccid();
            log("load mFakeIccId: " + mFakeIccId);
        }
        mCi.registerForIccRefresh(this, EVENT_REFRESH, null);
    }

    // Override IccRecords for testing
    public void setCarrierTestOverride(String mccmnc, String imsi, String iccid, String gid1,
            String gid2, String pnn, String spn)  {
        mCarrierTestOverride.override(mccmnc, imsi, iccid, gid1, gid2, pnn, spn);
        mTelephonyManager.setSimOperatorNameForPhone(mParentApp.getPhoneId(), spn);
        mTelephonyManager.setSimOperatorNumericForPhone(mParentApp.getPhoneId(), mccmnc);
        mRecordsLoadedRegistrants.notifyRegistrants();
    }

    /**
     * Call when the IccRecords object is no longer going to be used.
     */
@@ -295,8 +281,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @return ICC ID without hex digits
     */
    public String getIccId() {
        if (mCarrierTestOverride.isInTestMode() && mFakeIccId != null) {
            return mFakeIccId;
        if (mCarrierTestOverride.isInTestMode() && mCarrierTestOverride.getFakeIccid() != null) {
            return mCarrierTestOverride.getFakeIccid();
        } else {
            return mIccId;
        }
@@ -442,8 +428,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @return null if SIM is not yet ready or unavailable
     */
    public String getIMSI() {
        if (mCarrierTestOverride.isInTestMode() && mFakeImsi != null) {
            return mFakeImsi;
        if (mCarrierTestOverride.isInTestMode() && mCarrierTestOverride.getFakeIMSI() != null) {
            return mCarrierTestOverride.getFakeIMSI();
        } else {
            return mImsi;
        }
@@ -477,8 +463,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @return null if SIM is not yet ready
     */
    public String getGid1() {
        if (mCarrierTestOverride.isInTestMode() && mFakeGid1 != null) {
            return mFakeGid1;
        if (mCarrierTestOverride.isInTestMode() && mCarrierTestOverride.getFakeGid1() != null) {
            return mCarrierTestOverride.getFakeGid1();
        } else {
            return mGid1;
        }
@@ -489,8 +475,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @return null if SIM is not yet ready
     */
    public String getGid2() {
        if (mCarrierTestOverride.isInTestMode() && mFakeGid2 != null) {
            return mFakeGid2;
        if (mCarrierTestOverride.isInTestMode() && mCarrierTestOverride.getFakeGid2() != null) {
            return mCarrierTestOverride.getFakeGid2();
        } else {
            return mGid2;
        }
@@ -501,8 +487,9 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @return null if SIM is not yet ready
     */
    public String getPnnHomeName() {
        if (mCarrierTestOverride.isInTestMode() && mFakePnnHomeName != null) {
            return mFakePnnHomeName;
        if (mCarrierTestOverride.isInTestMode()
                && mCarrierTestOverride.getFakePnnHomeName() != null) {
            return mCarrierTestOverride.getFakePnnHomeName();
        } else {
            return mPnnHomeName;
        }
@@ -531,8 +518,8 @@ public abstract class IccRecords extends Handler implements IccConstants {
     * @return null if SIM is not yet ready or no RUIM entry
     */
    public String getServiceProviderName() {
        if (mCarrierTestOverride.isInTestMode() && mFakeSpn != null) {
            return mFakeSpn;
        if (mCarrierTestOverride.isInTestMode() && mCarrierTestOverride.getFakeSpn() != null) {
            return mCarrierTestOverride.getFakeSpn();
        }
        String providerName = mSpn;

@@ -981,13 +968,13 @@ public abstract class IccRecords extends Handler implements IccConstants {
        pw.println(" mImsi=" + ((mImsi != null) ?
                mImsi.substring(0, 6) + Rlog.pii(VDBG, mImsi.substring(6)) : "null"));
        if (mCarrierTestOverride.isInTestMode()) {
            pw.println(" mFakeImsi=" + mFakeImsi);
            pw.println(" mFakeImsi=" + mCarrierTestOverride.getFakeIMSI());
        }
        pw.println(" mMncLength=" + mMncLength);
        pw.println(" mMailboxIndex=" + mMailboxIndex);
        pw.println(" mSpn=" + mSpn);
        if (mCarrierTestOverride.isInTestMode()) {
            pw.println(" mFakeSpn=" + mFakeSpn);
            pw.println(" mFakeSpn=" + mCarrierTestOverride.getFakeSpn());
        }
        pw.flush();
    }
Loading