Loading src/java/com/android/internal/telephony/CarrierResolver.java +1 −0 Original line number Diff line number Diff line Loading @@ -384,6 +384,7 @@ public class CarrierResolver extends Handler { cv.put(CarrierId.CARRIER_NAME, mCarrierName); mContext.getContentResolver().update( Telephony.CarrierId.getUriForSubscriptionId(mPhone.getSubId()), cv, null, null); SubscriptionController.getInstance().setCarrierId(mCarrierId, mPhone.getSubId()); } update = false; Loading src/java/com/android/internal/telephony/SubscriptionController.java +40 −4 Original line number Diff line number Diff line Loading @@ -309,6 +309,8 @@ public class SubscriptionController extends ISub.Stub { SubscriptionManager.ISO_COUNTRY_CODE)); boolean isEmbedded = cursor.getInt(cursor.getColumnIndexOrThrow( SubscriptionManager.IS_EMBEDDED)) == 1; int carrierId = cursor.getInt(cursor.getColumnIndexOrThrow( SubscriptionManager.CARRIER_ID)); UiccAccessRule[] accessRules; if (isEmbedded) { accessRules = UiccAccessRule.decodeRules(cursor.getBlob( Loading @@ -327,9 +329,10 @@ public class SubscriptionController extends ISub.Stub { String iccIdToPrint = SubscriptionInfo.givePrintableIccid(iccId); String cardIdToPrint = SubscriptionInfo.givePrintableIccid(cardId); logd("[getSubInfoRecord] id:" + id + " iccid:" + iccIdToPrint + " simSlotIndex:" + simSlotIndex + " displayName:" + displayName + " nameSource:" + nameSource + " iconTint:" + iconTint + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc + " countIso:" + countryIso + " isEmbedded:" + simSlotIndex + " carrierid:" + carrierId + " displayName:" + displayName + " nameSource:" + nameSource + " iconTint:" + iconTint + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc + " countIso:" + countryIso + " isEmbedded:" + isEmbedded + " accessRules:" + Arrays.toString(accessRules) + " cardId:" + cardIdToPrint + " isOpportunistic:" + isOpportunistic + " groupUUID:" + groupUUID + " isMetered:" + isMetered); Loading @@ -342,7 +345,7 @@ public class SubscriptionController extends ISub.Stub { } return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, isEmbedded, accessRules, cardId, isOpportunistic, groupUUID, isMetered); isEmbedded, accessRules, cardId, isOpportunistic, groupUUID, isMetered, carrierId); } /** Loading Loading @@ -1341,6 +1344,39 @@ public class SubscriptionController extends ISub.Stub { } } /** * Set carrier id by subId * @param carrierId the subscription carrier id. * @param subId the unique SubInfoRecord index in database * @return the number of records updated * * @see TelephonyManager#getSimCarrierId() */ public int setCarrierId(int carrierId, int subId) { if (DBG) logd("[setCarrierId]+ carrierId:" + carrierId + " subId:" + subId); enforceModifyPhoneState("setCarrierId"); // Now that all security checks passes, perform the operation as ourselves. final long identity = Binder.clearCallingIdentity(); try { validateSubId(subId); ContentValues value = new ContentValues(1); value.put(SubscriptionManager.CARRIER_ID, carrierId); int result = mContext.getContentResolver().update( SubscriptionManager.getUriForSubscriptionId(subId), value, null, null); // Refresh the Cache of Active Subscription Info List refreshCachedActiveSubscriptionInfoList(); notifySubscriptionInfoChanged(); return result; } finally { Binder.restoreCallingIdentity(identity); } } /** * Set MCC/MNC by subscription ID * @param mccMnc MCC/MNC associated with the subscription Loading tests/telephonytests/src/com/android/internal/telephony/FakeTelephonyProvider.java +2 −1 Original line number Diff line number Diff line Loading @@ -99,7 +99,8 @@ public class FakeTelephonyProvider extends MockContentProvider { + SubscriptionManager.IS_OPPORTUNISTIC + " INTEGER DEFAULT 0," + SubscriptionManager.GROUP_UUID + " TEXT," + SubscriptionManager.IS_METERED + " INTEGER DEFAULT 1," + SubscriptionManager.ISO_COUNTRY_CODE + " TEXT" + SubscriptionManager.ISO_COUNTRY_CODE + " TEXT," + SubscriptionManager.CARRIER_ID + " INTEGER DEFAULT -1" + ");"; } Loading tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -251,6 +251,24 @@ public class SubscriptionControllerTest extends TelephonyTest { captorIntent.getValue().getAction()); } @Test @SmallTest public void testSetGetCarrierId() { testInsertSim(); int carrierId = 1234; mSubscriptionControllerUT.setCarrierId(carrierId, 1); SubscriptionInfo subInfo = mSubscriptionControllerUT .getActiveSubscriptionInfo(1, mCallingPackage); assertNotNull(subInfo); assertEquals(carrierId, subInfo.getCarrierId()); /* verify broadcast intent */ ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); verify(mContext, atLeast(1)).sendBroadcast(captorIntent.capture()); assertEquals(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED, captorIntent.getValue().getAction()); } @Test @SmallTest public void testSetDefaultDataSubId() throws Exception { Loading Loading
src/java/com/android/internal/telephony/CarrierResolver.java +1 −0 Original line number Diff line number Diff line Loading @@ -384,6 +384,7 @@ public class CarrierResolver extends Handler { cv.put(CarrierId.CARRIER_NAME, mCarrierName); mContext.getContentResolver().update( Telephony.CarrierId.getUriForSubscriptionId(mPhone.getSubId()), cv, null, null); SubscriptionController.getInstance().setCarrierId(mCarrierId, mPhone.getSubId()); } update = false; Loading
src/java/com/android/internal/telephony/SubscriptionController.java +40 −4 Original line number Diff line number Diff line Loading @@ -309,6 +309,8 @@ public class SubscriptionController extends ISub.Stub { SubscriptionManager.ISO_COUNTRY_CODE)); boolean isEmbedded = cursor.getInt(cursor.getColumnIndexOrThrow( SubscriptionManager.IS_EMBEDDED)) == 1; int carrierId = cursor.getInt(cursor.getColumnIndexOrThrow( SubscriptionManager.CARRIER_ID)); UiccAccessRule[] accessRules; if (isEmbedded) { accessRules = UiccAccessRule.decodeRules(cursor.getBlob( Loading @@ -327,9 +329,10 @@ public class SubscriptionController extends ISub.Stub { String iccIdToPrint = SubscriptionInfo.givePrintableIccid(iccId); String cardIdToPrint = SubscriptionInfo.givePrintableIccid(cardId); logd("[getSubInfoRecord] id:" + id + " iccid:" + iccIdToPrint + " simSlotIndex:" + simSlotIndex + " displayName:" + displayName + " nameSource:" + nameSource + " iconTint:" + iconTint + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc + " countIso:" + countryIso + " isEmbedded:" + simSlotIndex + " carrierid:" + carrierId + " displayName:" + displayName + " nameSource:" + nameSource + " iconTint:" + iconTint + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc + " countIso:" + countryIso + " isEmbedded:" + isEmbedded + " accessRules:" + Arrays.toString(accessRules) + " cardId:" + cardIdToPrint + " isOpportunistic:" + isOpportunistic + " groupUUID:" + groupUUID + " isMetered:" + isMetered); Loading @@ -342,7 +345,7 @@ public class SubscriptionController extends ISub.Stub { } return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, isEmbedded, accessRules, cardId, isOpportunistic, groupUUID, isMetered); isEmbedded, accessRules, cardId, isOpportunistic, groupUUID, isMetered, carrierId); } /** Loading Loading @@ -1341,6 +1344,39 @@ public class SubscriptionController extends ISub.Stub { } } /** * Set carrier id by subId * @param carrierId the subscription carrier id. * @param subId the unique SubInfoRecord index in database * @return the number of records updated * * @see TelephonyManager#getSimCarrierId() */ public int setCarrierId(int carrierId, int subId) { if (DBG) logd("[setCarrierId]+ carrierId:" + carrierId + " subId:" + subId); enforceModifyPhoneState("setCarrierId"); // Now that all security checks passes, perform the operation as ourselves. final long identity = Binder.clearCallingIdentity(); try { validateSubId(subId); ContentValues value = new ContentValues(1); value.put(SubscriptionManager.CARRIER_ID, carrierId); int result = mContext.getContentResolver().update( SubscriptionManager.getUriForSubscriptionId(subId), value, null, null); // Refresh the Cache of Active Subscription Info List refreshCachedActiveSubscriptionInfoList(); notifySubscriptionInfoChanged(); return result; } finally { Binder.restoreCallingIdentity(identity); } } /** * Set MCC/MNC by subscription ID * @param mccMnc MCC/MNC associated with the subscription Loading
tests/telephonytests/src/com/android/internal/telephony/FakeTelephonyProvider.java +2 −1 Original line number Diff line number Diff line Loading @@ -99,7 +99,8 @@ public class FakeTelephonyProvider extends MockContentProvider { + SubscriptionManager.IS_OPPORTUNISTIC + " INTEGER DEFAULT 0," + SubscriptionManager.GROUP_UUID + " TEXT," + SubscriptionManager.IS_METERED + " INTEGER DEFAULT 1," + SubscriptionManager.ISO_COUNTRY_CODE + " TEXT" + SubscriptionManager.ISO_COUNTRY_CODE + " TEXT," + SubscriptionManager.CARRIER_ID + " INTEGER DEFAULT -1" + ");"; } Loading
tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -251,6 +251,24 @@ public class SubscriptionControllerTest extends TelephonyTest { captorIntent.getValue().getAction()); } @Test @SmallTest public void testSetGetCarrierId() { testInsertSim(); int carrierId = 1234; mSubscriptionControllerUT.setCarrierId(carrierId, 1); SubscriptionInfo subInfo = mSubscriptionControllerUT .getActiveSubscriptionInfo(1, mCallingPackage); assertNotNull(subInfo); assertEquals(carrierId, subInfo.getCarrierId()); /* verify broadcast intent */ ArgumentCaptor<Intent> captorIntent = ArgumentCaptor.forClass(Intent.class); verify(mContext, atLeast(1)).sendBroadcast(captorIntent.capture()); assertEquals(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED, captorIntent.getValue().getAction()); } @Test @SmallTest public void testSetDefaultDataSubId() throws Exception { Loading