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

Commit 120d9e7b authored by fionaxu's avatar fionaxu Committed by Chen Xu
Browse files

carrier id cleanup

1. carrierIdentifier should listen for SimRecords rather than Ruim/Csim
since all records are read from SimRecords.
2. carrierTestOverride should apply to SimRecords. Apply to Ruim/Csim is
a non-op
3. add registerForOperatorOverride to UiccProfile.

Bug: 72332597
Change-Id: Ia7c369b301b7c45cfc3e6dc9112dfbf5cea498b4
(cherry picked from commit d27bd6be)
Merged-in: Ia7c369b301b7c45cfc3e6dc9112dfbf5cea498b4
parent 3152b6c2
Loading
Loading
Loading
Loading
+20 −23
Original line number Diff line number Diff line
@@ -20,13 +20,11 @@ import static android.provider.Telephony.CarrierId;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.Telephony;
import android.telephony.Rlog;
import android.telephony.SubscriptionManager;
@@ -38,6 +36,7 @@ import android.util.Log;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UiccProfile;
import com.android.internal.util.IndentingPrintWriter;

import java.io.FileDescriptor;
@@ -85,12 +84,11 @@ public class CarrierIdentifier extends Handler {
    private Context mContext;
    private Phone mPhone;
    private IccRecords mIccRecords;
    private UiccProfile mUiccProfile;
    private final LocalLog mCarrierIdLocalLog = new LocalLog(20);
    private final TelephonyManager mTelephonyMgr;
    private final SubscriptionsChangedListener mOnSubscriptionsChangedListener =
            new SubscriptionsChangedListener();
    private final SharedPreferenceChangedListener mSharedPrefListener =
            new SharedPreferenceChangedListener();

    private final ContentObserver mContentObserver = new ContentObserver(this) {
        @Override
@@ -130,20 +128,6 @@ public class CarrierIdentifier extends Handler {
        }
    }

    private class SharedPreferenceChangedListener implements
            SharedPreferences.OnSharedPreferenceChangeListener {
        @Override
        public void onSharedPreferenceChanged(
                SharedPreferences sharedPreferences, String key) {
            if (TextUtils.equals(key, OPERATOR_BRAND_OVERRIDE_PREFIX
                    + mPhone.getIccSerialNumber())) {
                // SPN override from carrier privileged apps
                logd("[onSharedPreferenceChanged]: " + key);
                sendEmptyMessage(SPN_OVERRIDE_EVENT);
            }
        }
    }

    public CarrierIdentifier(Phone phone) {
        logd("Creating CarrierIdentifier[" + phone.getPhoneId() + "]");
        mContext = phone.getContext();
@@ -157,8 +141,6 @@ public class CarrierIdentifier extends Handler {
                CarrierId.All.CONTENT_URI, false, mContentObserver);
        SubscriptionManager.from(mContext).addOnSubscriptionsChangedListener(
                mOnSubscriptionsChangedListener);
        PreferenceManager.getDefaultSharedPreferences(mContext)
                .registerOnSharedPreferenceChangeListener(mSharedPrefListener);
        UiccController.getInstance().registerForIccChanged(this, ICC_CHANGED_EVENT, null);
    }

@@ -222,21 +204,36 @@ public class CarrierIdentifier extends Handler {
                }
                break;
            case ICC_CHANGED_EVENT:
                final IccRecords newIccRecords = mPhone.getIccRecords();
                // all records used for carrier identification are from SimRecord
                final IccRecords newIccRecords = UiccController.getInstance().getIccRecords(
                        mPhone.getPhoneId(), UiccController.APP_FAM_3GPP);
                if (mIccRecords != newIccRecords) {
                    if (mIccRecords != null) {
                        logd("Removing stale icc objects.");
                        mIccRecords.unregisterForSpnUpdate(this);
                        mIccRecords.unregisterForRecordsLoaded(this);
                        mIccRecords = null;
                    }
                    if (newIccRecords != null) {
                        logd("new Icc object");
                        newIccRecords.registerForSpnUpdate(this, SPN_OVERRIDE_EVENT, null);
                        newIccRecords.registerForRecordsLoaded(this, SIM_LOAD_EVENT, null);
                        mIccRecords = newIccRecords;
                    }
                }
                // check UICC profile
                final UiccProfile uiccProfile = UiccController.getInstance()
                        .getUiccProfileForPhone(mPhone.getPhoneId());
                if (mUiccProfile != uiccProfile) {
                    if (mUiccProfile != null) {
                        logd("unregister operatorBrandOverride");
                        mUiccProfile.unregisterForOperatorBrandOverride(this);
                        mUiccProfile = null;
                    }
                    if (uiccProfile != null) {
                        logd("register operatorBrandOverride");
                        uiccProfile.registerForOpertorBrandOverride(this, SPN_OVERRIDE_EVENT, null);
                        mUiccProfile = uiccProfile;
                    }
                }
                break;
            default:
                loge("invalid msg: " + msg.what);
+16 −0
Original line number Diff line number Diff line
@@ -1552,6 +1552,22 @@ public class GsmCdmaPhone extends Phone {
        return mCarrerIdentifier.getCarrierListVersion();
    }

    @Override
    public void setCarrierTestOverride(String mccmnc, String imsi, String iccid, String gid1,
            String gid2, String pnn, String spn) {
        IccRecords r = null;
        if (isPhoneTypeGsm()) {
            r = mIccRecords.get();
        } else if (isPhoneTypeCdmaLte()) {
            r = mSimRecords;
        } else {
            loge("setCarrierTestOverride fails in CDMA only");
        }
        if (r != null) {
            r.setCarrierTestOverride(mccmnc, imsi, iccid, gid1, gid2, pnn, spn);
        }
    }

    @Override
    public String getGroupIdLevel1() {
        if (isPhoneTypeGsm()) {
+0 −4
Original line number Diff line number Diff line
@@ -3603,10 +3603,6 @@ 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) {
+32 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ public class UiccProfile extends IccCard {
    private boolean mDisposed = false;

    private RegistrantList mCarrierPrivilegeRegistrants = new RegistrantList();
    private RegistrantList mOperatorBrandOverrideRegistrants = new RegistrantList();

    private final int mPhoneId;

@@ -325,6 +326,7 @@ public class UiccProfile extends IccCard {
                mIccRecords.setServiceProviderName(ccName);
            }
            mTelephonyManager.setSimOperatorNameForPhone(mPhoneId, ccName);
            mOperatorBrandOverrideRegistrants.notifyRegistrants();
        }

        updateCarrierNameForSubscription(subCon, subId);
@@ -1012,6 +1014,20 @@ public class UiccProfile extends IccCard {
        return index;
    }

    /**
     * Registers the handler when operator brand name is overridden.
     *
     * @param h Handler for notification message.
     * @param what User-defined message code.
     * @param obj User object.
     */
    public void registerForOpertorBrandOverride(Handler h, int what, Object obj) {
        synchronized (mLock) {
            Registrant r = new Registrant(h, what, obj);
            mOperatorBrandOverrideRegistrants.add(r);
        }
    }

    /**
     * Registers the handler when carrier privilege rules are loaded.
     *
@@ -1042,6 +1058,17 @@ public class UiccProfile extends IccCard {
        }
    }
    
     /**
     * Unregister for notifications when operator brand name is overriden.
     *
     * @param h Handler to be removed from the registrant list.
     */
    public void unregisterForOperatorBrandOverride(Handler h) {
        synchronized (mLock) {
            mOperatorBrandOverrideRegistrants.remove(h);
        }
    }

    private boolean isPackageInstalled(String pkgName) {
        PackageManager pm = mContext.getPackageManager();
        try {
@@ -1417,6 +1444,7 @@ public class UiccProfile extends IccCard {
        } else {
            spEditor.putString(key, brand).commit();
        }
        mOperatorBrandOverrideRegistrants.notifyRegistrants();
        return true;
    }

@@ -1485,6 +1513,10 @@ public class UiccProfile extends IccCard {
            pw.println("  mCarrierPrivilegeRegistrants[" + i + "]="
                    + ((Registrant) mCarrierPrivilegeRegistrants.get(i)).getHandler());
        }
        for (int i = 0; i < mOperatorBrandOverrideRegistrants.size(); i++) {
            pw.println("  mOperatorBrandOverrideRegistrants[" + i + "]="
                    + ((Registrant) mOperatorBrandOverrideRegistrants.get(i)).getHandler());
        }
        pw.println(" mUniversalPinState=" + mUniversalPinState);
        pw.println(" mGsmUmtsSubscriptionAppIndex=" + mGsmUmtsSubscriptionAppIndex);
        pw.println(" mCdmaSubscriptionAppIndex=" + mCdmaSubscriptionAppIndex);