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

Commit 3573c81b authored by Chen Xu's avatar Chen Xu Committed by android-build-merger
Browse files

Merge changes from topic "carrier_id_aosp_cp" am: f9c9e1ff

am: fd9e585f

Change-Id: I58cbd8e480caa6fbe44dc83efe2d1d22c738de32
parents 2f067bf9 fd9e585f
Loading
Loading
Loading
Loading
+33 −5
Original line number Diff line number Diff line
@@ -71,6 +71,10 @@ public class CarrierResolver extends Handler {
    private List<CarrierMatchingRule> mCarrierMatchingRulesOnMccMnc = new ArrayList<>();
    // cached carrier Id
    private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
    // cached MNO carrier Id. mno carrier shares the same mccmnc as cid and can be solely
    // identified by mccmnc only. If there is no such mno carrier, mno carrier id equals to
    // the cid.
    private int mMnoCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
    // cached carrier name
    private String mCarrierName;
    // cached preferapn name
@@ -180,7 +184,8 @@ public class CarrierResolver extends Handler {
                mCarrierMatchingRulesOnMccMnc.clear();
                mSpn = null;
                mPreferApn = null;
                updateCarrierIdAndName(TelephonyManager.UNKNOWN_CARRIER_ID, null);
                updateCarrierIdAndName(TelephonyManager.UNKNOWN_CARRIER_ID,
                        TelephonyManager.UNKNOWN_CARRIER_ID, null);
                break;
            case PREFER_APN_UPDATE_EVENT:
                String preferApn = getPreferApn();
@@ -275,7 +280,7 @@ public class CarrierResolver extends Handler {
        return null;
    }

    private void updateCarrierIdAndName(int cid, String name) {
    private void updateCarrierIdAndName(int cid, int mnoCid, String name) {
        boolean update = false;
        if (!equals(name, mCarrierName, true)) {
            logd("[updateCarrierName] from:" + mCarrierName + " to:" + name);
@@ -287,13 +292,20 @@ public class CarrierResolver extends Handler {
            mCarrierId = cid;
            update = true;
        }
        if (mnoCid != mMnoCarrierId) {
            logd("[updateMnoCarrierId] from:" + mMnoCarrierId + " to:" + mnoCid);
            mMnoCarrierId = mnoCid;
            update = true;
        }

        if (update) {
            mCarrierIdLocalLog.log("[updateCarrierIdAndName] cid:" + mCarrierId + " name:"
                    + mCarrierName);
                    + mCarrierName + " mnoCid:" + mMnoCarrierId);
            final Intent intent = new Intent(TelephonyManager
                    .ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED);
            intent.putExtra(TelephonyManager.EXTRA_CARRIER_ID, mCarrierId);
            intent.putExtra(TelephonyManager.EXTRA_CARRIER_NAME, mCarrierName);
            intent.putExtra(TelephonyManager.EXTRA_MNO_CARRIER_ID, mMnoCarrierId);
            intent.putExtra(TelephonyManager.EXTRA_SUBSCRIPTION_ID, mPhone.getSubId());
            mContext.sendBroadcast(intent);

@@ -301,6 +313,7 @@ public class CarrierResolver extends Handler {
            ContentValues cv = new ContentValues();
            cv.put(CarrierId.CARRIER_ID, mCarrierId);
            cv.put(CarrierId.CARRIER_NAME, mCarrierName);
            cv.put(CarrierId.MNO_CARRIER_ID, mMnoCarrierId);
            mContext.getContentResolver().update(
                    Uri.withAppendedPath(CarrierId.CONTENT_URI,
                    Integer.toString(mPhone.getSubId())), cv, null, null);
@@ -541,6 +554,11 @@ public class CarrierResolver extends Handler {
        }
        int maxScore = CarrierMatchingRule.SCORE_INVALID;
        CarrierMatchingRule maxRule = null;
        /**
         * matching rule with mccmnc only. If mnoRule is found, then mno carrier id equals to the
         * cid from mnoRule. otherwise, mno carrier id is same as cid.
         */
        CarrierMatchingRule mnoRule = null;

        for (CarrierMatchingRule rule : mCarrierMatchingRulesOnMccMnc) {
            rule.match(subscriptionRule);
@@ -549,6 +567,9 @@ public class CarrierResolver extends Handler {
                maxRule = rule;
                carrierId = rule.mCid;
            }
            if (rule.mScore == CarrierMatchingRule.SCORE_MCCMNC) {
                mnoRule = rule;
            }
        }
        // skip updating the cached carrierId
        if (!update) {
@@ -557,10 +578,12 @@ public class CarrierResolver extends Handler {
        if (maxScore == CarrierMatchingRule.SCORE_INVALID) {
            logd("[matchCarrier - no match] cid: " + TelephonyManager.UNKNOWN_CARRIER_ID
                    + " name: " + null);
            updateCarrierIdAndName(TelephonyManager.UNKNOWN_CARRIER_ID, null);
            updateCarrierIdAndName(TelephonyManager.UNKNOWN_CARRIER_ID,
                    TelephonyManager.UNKNOWN_CARRIER_ID, null);
        } else {
            logd("[matchCarrier] cid: " + maxRule.mCid + " name: " + maxRule.mName);
            updateCarrierIdAndName(maxRule.mCid, maxRule.mName);
            updateCarrierIdAndName(maxRule.mCid,
                    (mnoRule == null) ? maxRule.mCid : mnoRule.mCid, maxRule.mName);
        }

        /*
@@ -596,6 +619,10 @@ public class CarrierResolver extends Handler {
        return mCarrierId;
    }

    public int getMnoCarrierId() {
        return mMnoCarrierId;
    }

    public String getCarrierName() {
        return mCarrierName;
    }
@@ -647,6 +674,7 @@ public class CarrierResolver extends Handler {
        ipw.decreaseIndent();

        ipw.println("mCarrierId: " + mCarrierId);
        ipw.println("mMnoCarrierId: " + mMnoCarrierId);
        ipw.println("mCarrierName: " + mCarrierName);
        ipw.println("version: " + getCarrierListVersion());

+43 −0
Original line number Diff line number Diff line
@@ -44,6 +44,11 @@ public class CarrierResolverTest extends TelephonyTest {
    private static final String NAME = "VZW";
    private static final int CID_VZW = 1;

    private static final String MCCMNC_VODAFONE = "20205";
    private static final String NAME_VODAFONE = "VODAFONE";
    private static final String SPN_VODAFONE = "vodafone GR";
    private static final int CID_VODAFONE = 5;

    private static final String SPN_FI = "PROJECT FI";
    private static final String NAME_FI = "FI";
    private static final int CID_FI = 2;
@@ -126,6 +131,30 @@ public class CarrierResolverTest extends TelephonyTest {
        assertEquals(NAME_TMO, mCarrierResolver.getCarrierName());
    }

    @Test
    @SmallTest
    public void testMnoCarrierId() {
        int phoneId = mPhone.getPhoneId();
        doReturn(MCCMNC).when(mTelephonyManager).getSimOperatorNumericForPhone(eq(phoneId));
        doReturn(SPN_FI).when(mSimRecords).getServiceProviderName();

        mCarrierResolver.sendEmptyMessage(SIM_LOAD_EVENT);
        waitForMs(200);

        assertEquals(CID_FI, mCarrierResolver.getCarrierId());
        assertEquals(NAME_FI, mCarrierResolver.getCarrierName());
        assertEquals(CID_VZW, mCarrierResolver.getMnoCarrierId());

        doReturn(MCCMNC_VODAFONE).when(mTelephonyManager)
                .getSimOperatorNumericForPhone(eq(phoneId));
        doReturn(SPN_VODAFONE).when(mSimRecords).getServiceProviderName();
        mCarrierResolver.sendEmptyMessage(SIM_LOAD_EVENT);
        waitForMs(200);
        assertEquals(CID_VODAFONE, mCarrierResolver.getCarrierId());
        assertEquals(NAME_VODAFONE, mCarrierResolver.getCarrierName());
        assertEquals(CID_VODAFONE, mCarrierResolver.getMnoCarrierId());
    }

    @Test
    @SmallTest
    public void testCarrierMatchSimAbsent() {
@@ -280,6 +309,20 @@ public class CarrierResolverTest extends TelephonyTest {
                        NAME_DOCOMO,            // carrier name
                        CID_DOCOMO,             // cid
                });
                mc.addRow(new Object[] {
                        4,                      // id
                        MCCMNC_VODAFONE,        // mccmnc
                        null,                   // gid1
                        null,                   // gid2
                        null,                   // plmn
                        null,                   // imsi_prefix
                        null,                   // iccid_prefix
                        null,                   // access_rule
                        SPN_VODAFONE,           // spn
                        null,                   // apn
                        NAME_VODAFONE,          // carrier name
                        CID_VODAFONE,           // cid
                });
                return mc;
            } else if (Carriers.CONTENT_URI.getAuthority().equals(uri.getAuthority())) {
                MatrixCursor mc = new MatrixCursor(new String[]{Carriers._ID, Carriers.APN});