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

Commit 41916b24 authored by fionaxu's avatar fionaxu
Browse files

new IccRecord APIs to get plmn and registerForSpnUpdate

those are preliminary works required for carrier identification which
requires plmn and spn for resolution.
1. new API to get PLMN from UICC.
2. new API to register SPN change. SPN is read from UICC initially
but could be override by carrier config and API setOperatorBrandOverride
we need a mechnism to notify registrants that SPN is being updated.

Bug: 64131637
Test: Manual
Change-Id: I7f1b59cf520d95aec14dd02487c48a187b6f55a9
parent 5f84fc93
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ public class CarrierTestOverride {
       <carrierTestOverride key="gid2" value="ffffffffffffffff"/>
       <carrierTestOverride key="imsi" value="310010123456789"/>
       <carrierTestOverride key="spn" value="Verizon"/>
       <carrierTestOverride key="pnn" value="Verizon network"/>
       </carrierTestOverrides>
     */
    static final String DATA_CARRIER_TEST_OVERRIDE_PATH =
@@ -60,6 +61,7 @@ public class CarrierTestOverride {
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_GID2 = "gid2";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI = "imsi";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_SPN = "spn";
    static final String CARRIER_TEST_XML_ITEM_KEY_STRING_PNN = "pnn";

    private HashMap<String, String> mCarrierTestParamMap;

@@ -118,6 +120,17 @@ public class CarrierTestOverride {
        }
    }

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

    private void loadCarrierTestOverrides() {

        FileReader carrierTestConfigReader;
+44 −13
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.RegistrantList;
import android.telephony.Rlog;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
@@ -57,6 +58,7 @@ public abstract class IccRecords extends Handler implements IccConstants {
    protected RegistrantList mRecordsEventsRegistrants = new RegistrantList();
    protected RegistrantList mNewSmsRegistrants = new RegistrantList();
    protected RegistrantList mNetworkSelectionModeAutomaticRegistrants = new RegistrantList();
    protected RegistrantList mSpnUpdatedRegistrants = new RegistrantList();

    protected int mRecordsToLoad;  // number of pending load requests

@@ -92,6 +94,9 @@ public abstract class IccRecords extends Handler implements IccConstants {
    protected String mGid2;
    protected String mFakeGid2;

    protected String mPnnHomeName;
    protected String mFakePnnHomeName;

    protected String mPrefLang;

    protected PlmnActRecord[] mHplmnActRecords;
@@ -146,12 +151,6 @@ public abstract class IccRecords extends Handler implements IccConstants {
                + " mCi=" + mCi
                + " mFh=" + mFh
                + " mParentApp=" + mParentApp
                + " recordsLoadedRegistrants=" + mRecordsLoadedRegistrants
                + " mImsiReadyRegistrants=" + mImsiReadyRegistrants
                + " mRecordsEventsRegistrants=" + mRecordsEventsRegistrants
                + " mNewSmsRegistrants=" + mNewSmsRegistrants
                + " mNetworkSelectionModeAutomaticRegistrants="
                        + mNetworkSelectionModeAutomaticRegistrants
                + " recordsToLoad=" + mRecordsToLoad
                + " adnCache=" + mAdnCache
                + " recordsRequested=" + mRecordsRequested
@@ -164,13 +163,11 @@ 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 != null) ? mFakeImsi : "null")) : "")
                + (mCarrierTestOverride.isInTestMode() ? " mFakeImsi=" + mFakeImsi : "")
                + " mncLength=" + mMncLength
                + " mailboxIndex=" + mMailboxIndex
                + " spn=" + mSpn
                + (mCarrierTestOverride.isInTestMode()
                ? (" mFakeSpn=" + ((mFakeSpn != null) ? mFakeSpn : "null")) : "");
                + (mCarrierTestOverride.isInTestMode() ? " mFakeSpn=" + mFakeSpn : "");

    }

@@ -213,6 +210,9 @@ public abstract class IccRecords extends Handler implements IccConstants {

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

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

@@ -314,6 +314,22 @@ public abstract class IccRecords extends Handler implements IccConstants {
        mImsiReadyRegistrants.remove(h);
    }

    public void registerForSpnUpdate(Handler h, int what, Object obj) {
        if (mDestroyed.get()) {
            return;
        }

        Registrant r = new Registrant(h, what, obj);
        mSpnUpdatedRegistrants.add(r);

        if (!TextUtils.isEmpty(mSpn)) {
            r.notifyRegistrant(new AsyncResult(null, null, null));
        }
    }
    public void unregisterForSpnUpdate(Handler h) {
        mSpnUpdatedRegistrants.remove(h);
    }

    public void registerForRecordsEvents(Handler h, int what, Object obj) {
        Registrant r = new Registrant (h, what, obj);
        mRecordsEventsRegistrants.add(r);
@@ -406,6 +422,18 @@ public abstract class IccRecords extends Handler implements IccConstants {
        }
    }

    /**
     * Get the PLMN network name on a SIM.
     * @return null if SIM is not yet ready
     */
    public String getPnnHomeName() {
        if (mCarrierTestOverride.isInTestMode() && mFakePnnHomeName != null) {
            return mFakePnnHomeName;
        } else {
            return mPnnHomeName;
        }
    }

    public void setMsisdnNumber(String alphaTag, String number,
            Message onComplete) {
        loge("setMsisdn() should not be invoked on base IccRecords");
@@ -457,8 +485,11 @@ public abstract class IccRecords extends Handler implements IccConstants {
    }

    protected void setServiceProviderName(String spn) {
        if (!TextUtils.equals(mSpn, spn)) {
            mSpnUpdatedRegistrants.notifyRegistrants();
            mSpn = spn;
        }
    }

    /**
     * Set voice mail number to SIM record
@@ -821,13 +852,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 != null) ? mFakeImsi : "null"));
            pw.println(" mFakeImsi=" + mFakeImsi);
        }
        pw.println(" mMncLength=" + mMncLength);
        pw.println(" mMailboxIndex=" + mMailboxIndex);
        pw.println(" mSpn=" + mSpn);
        if (mCarrierTestOverride.isInTestMode()) {
            pw.println(" mFakeSpn=" + ((mFakeSpn != null) ? mFakeSpn : "null"));
            pw.println(" mFakeSpn=" + mFakeSpn);
        }
        pw.flush();
    }
+7 −4
Original line number Diff line number Diff line
@@ -89,8 +89,6 @@ public class SIMRecords extends IccRecords {
    // Numeric network codes listed in TS 51.011 EF[SPDI]
    ArrayList<String> mSpdiNetworks = null;

    String mPnnHomeName = null;

    UsimServiceTable mUsimServiceTable;

    @Override
@@ -1066,6 +1064,7 @@ public class SIMRecords extends IccRecords {
                        if (tlv.getTag() == TAG_FULL_NETWORK_NAME) {
                            mPnnHomeName = IccUtils.networkNameToString(
                                    tlv.getData(), 0, tlv.getData().length);
                            log("PNN: " + mPnnHomeName);
                            break;
                        }
                    }
@@ -2181,11 +2180,15 @@ public class SIMRecords extends IccRecords {
        pw.println(" mUsimServiceTable=" + mUsimServiceTable);
        pw.println(" mGid1=" + mGid1);
        if (mCarrierTestOverride.isInTestMode()) {
            pw.println(" mFakeGid1=" + ((mFakeGid1 != null) ? mFakeGid1 : "null"));
            pw.println(" mFakeGid1=" + mFakeGid1);
        }
        pw.println(" mGid2=" + mGid2);
        if (mCarrierTestOverride.isInTestMode()) {
            pw.println(" mFakeGid2=" + ((mFakeGid2 != null) ? mFakeGid2 : "null"));
            pw.println(" mFakeGid2=" + mFakeGid2);
        }
        pw.println(" mPnnHomeName=" + mPnnHomeName);
        if (mCarrierTestOverride.isInTestMode()) {
            pw.println(" mFakePnnHomeName=" + mFakePnnHomeName);
        }
        pw.println(" mPlmnActRecords[]=" + Arrays.toString(mPlmnActRecords));
        pw.println(" mOplmnActRecords[]=" + Arrays.toString(mOplmnActRecords));