Loading src/java/com/android/internal/telephony/CarrierResolver.java +33 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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(); Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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) { Loading @@ -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); } /* Loading Loading @@ -596,6 +619,10 @@ public class CarrierResolver extends Handler { return mCarrierId; } public int getMnoCarrierId() { return mMnoCarrierId; } public String getCarrierName() { return mCarrierName; } Loading Loading @@ -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()); Loading tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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}); Loading Loading
src/java/com/android/internal/telephony/CarrierResolver.java +33 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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(); Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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) { Loading @@ -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); } /* Loading Loading @@ -596,6 +619,10 @@ public class CarrierResolver extends Handler { return mCarrierId; } public int getMnoCarrierId() { return mMnoCarrierId; } public String getCarrierName() { return mCarrierName; } Loading Loading @@ -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()); Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierResolverTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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}); Loading