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

Commit 4f73d996 authored by Jack Yu's avatar Jack Yu Committed by Android (Google) Code Review
Browse files

Merge "Added builder for SubscriptionInfo"

parents d836a1bf e317649a
Loading
Loading
Loading
Loading
+87 −94
Original line number Diff line number Diff line
@@ -525,33 +525,34 @@ public class SubscriptionController extends ISub.Stub {

    /**
     * New SubInfoRecord instance and fill in detail info
     * @param cursor
     * @param cursor The database cursor
     * @return the query result of desired SubInfoRecord
     */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private SubscriptionInfo getSubInfoRecord(Cursor cursor) {
        SubscriptionInfo.Builder builder = new SubscriptionInfo.Builder();
        int id = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID));
        String iccId = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.ICC_ID));
        int simSlotIndex = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.SIM_SLOT_INDEX));
        String displayName = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.DISPLAY_NAME));
        String carrierName = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.CARRIER_NAME));
        int nameSource = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.NAME_SOURCE));
        int iconTint = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.HUE));
        String number = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.NUMBER));
        int dataRoaming = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.DATA_ROAMING));
        String mcc = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.MCC_STRING));
        String mnc = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.MNC_STRING));
        builder.setId(id)
                .setIccId(cursor.getString(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.ICC_ID)))
                .setSimSlotIndex(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.SIM_SLOT_INDEX)))
                .setDisplayName(cursor.getString(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.DISPLAY_NAME)))
                .setCarrierName(cursor.getString(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.CARRIER_NAME)))
                .setNameSource(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.NAME_SOURCE)))
                .setIconTint(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.HUE)))
                .setDataRoaming(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.DATA_ROAMING)))
                .setMcc(cursor.getString(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.MCC_STRING)))
                .setMnc(cursor.getString(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.MNC_STRING)));

        String ehplmnsRaw = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.EHPLMNS));
        String hplmnsRaw = cursor.getString(cursor.getColumnIndexOrThrow(
@@ -559,77 +560,63 @@ public class SubscriptionController extends ISub.Stub {
        String[] ehplmns = ehplmnsRaw == null ? null : ehplmnsRaw.split(",");
        String[] hplmns = hplmnsRaw == null ? null : hplmnsRaw.split(",");

        // cardId is the private ICCID/EID string, also known as the card string
        String cardId = cursor.getString(cursor.getColumnIndexOrThrow(
        builder.setEhplmns(ehplmns).setHplmns(hplmns);


        // CARD_ID is the private ICCID/EID string, also known as the card string
        String cardString = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.CARD_ID));
        String countryIso = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.ISO_COUNTRY_CODE));
        builder.setCardString(cardString);
        // publicCardId is the publicly exposed int card ID
        int publicCardId = mUiccController.convertToPublicCardId(cardId);
        int publicCardId = mUiccController.convertToPublicCardId(cardString);
        builder.setCardId(publicCardId);

        builder.setCountryIso(cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.ISO_COUNTRY_CODE)))
                .setCarrierId(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.CARRIER_ID)));

        boolean isEmbedded = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.IS_EMBEDDED)) == 1;
        int carrierId = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.CARRIER_ID));
        UiccAccessRule[] accessRules;
        builder.setEmbedded(isEmbedded);
        if (isEmbedded) {
            accessRules = UiccAccessRule.decodeRules(cursor.getBlob(
                    cursor.getColumnIndexOrThrow(SubscriptionManager.ACCESS_RULES)));
        } else {
            accessRules = null;
        }
        UiccAccessRule[] carrierConfigAccessRules = UiccAccessRule.decodeRules(cursor.getBlob(
            cursor.getColumnIndexOrThrow(SubscriptionManager.ACCESS_RULES_FROM_CARRIER_CONFIGS)));
        boolean isOpportunistic = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.IS_OPPORTUNISTIC)) == 1;
        String groupUUID = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.GROUP_UUID));
        int profileClass = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.PROFILE_CLASS));
        int portIndex = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.PORT_INDEX));
        int subType = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.SUBSCRIPTION_TYPE));
        String groupOwner = getOptionalStringFromCursor(cursor, SubscriptionManager.GROUP_OWNER,
                /*defaultVal*/ null);
        boolean areUiccApplicationsEnabled = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.UICC_APPLICATIONS_ENABLED)) == 1;

        int usageSetting = cursor.getInt(cursor.getColumnIndexOrThrow(
                SubscriptionManager.USAGE_SETTING));

        if (VDBG) {
            String iccIdToPrint = SubscriptionInfo.givePrintableIccid(iccId);
            String cardIdToPrint = SubscriptionInfo.givePrintableIccid(cardId);
            logd("[getSubInfoRecord] id:" + id + " iccid:" + iccIdToPrint + " simSlotIndex:"
                    + simSlotIndex + " carrierid:" + carrierId + " displayName:" + displayName
                    + " nameSource:" + nameSource + " iconTint:" + iconTint
                    + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc
                    + " countIso:" + countryIso + " isEmbedded:"
                    + isEmbedded + " accessRules:" + Arrays.toString(accessRules)
                    + " carrierConfigAccessRules: " + Arrays.toString(carrierConfigAccessRules)
                    + " cardId:" + cardIdToPrint + " portIndex:" + portIndex
                    + " publicCardId:" + publicCardId
                    + " isOpportunistic:" + isOpportunistic + " groupUUID:" + groupUUID
                    + " profileClass:" + profileClass + " subscriptionType: " + subType
                    + " areUiccApplicationsEnabled: " + areUiccApplicationsEnabled
                    + " usageSetting: " + usageSetting);
        }
            builder.setNativeAccessRules(UiccAccessRule.decodeRules(cursor.getBlob(
                            cursor.getColumnIndexOrThrow(SubscriptionManager.ACCESS_RULES))));
        }

        builder.setCarrierConfigAccessRules(UiccAccessRule.decodeRules(cursor.getBlob(
                cursor.getColumnIndexOrThrow(
                        SubscriptionManager.ACCESS_RULES_FROM_CARRIER_CONFIGS))))
                .setOpportunistic(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.IS_OPPORTUNISTIC)) == 1)
                .setGroupUuid(cursor.getString(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.GROUP_UUID)))
                .setProfileClass(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.PROFILE_CLASS)))
                .setPortIndex(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.PORT_INDEX)))
                .setType(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.SUBSCRIPTION_TYPE)))
                .setGroupOwner(getOptionalStringFromCursor(cursor, SubscriptionManager.GROUP_OWNER,
                        /*defaultVal*/ null))
                .setUiccApplicationsEnabled(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.UICC_APPLICATIONS_ENABLED)) == 1)
                .setUsageSetting(cursor.getInt(cursor.getColumnIndexOrThrow(
                        SubscriptionManager.USAGE_SETTING)));

        // If line1number has been set to a different number, use it instead.
        String number = cursor.getString(cursor.getColumnIndexOrThrow(
                SubscriptionManager.NUMBER));
        String line1Number = mTelephonyManager.getLine1Number(id);
        if (!TextUtils.isEmpty(line1Number) && !line1Number.equals(number)) {
            number = line1Number;
        }
        builder.setNumber(number);

        // FIXME(b/210771052): constructing a complete SubscriptionInfo requires a port index,
        // but the port index isn't available here. Should it actually be part of SubscriptionInfo?
        SubscriptionInfo info = new SubscriptionInfo(id, iccId, simSlotIndex, displayName,
                carrierName, nameSource, iconTint, number, dataRoaming, /* icon= */ null,
                mcc, mnc, countryIso, isEmbedded, accessRules, cardId, publicCardId,
                isOpportunistic, groupUUID, /* isGroupDisabled= */ false , carrierId, profileClass,
                subType, groupOwner, carrierConfigAccessRules, areUiccApplicationsEnabled,
                portIndex, usageSetting);
        info.setAssociatedPlmns(ehplmns, hplmns);
        return info;

        return builder.build();
    }

    private String getOptionalStringFromCursor(Cursor cursor, String column, String defaultVal) {
@@ -3161,8 +3148,8 @@ public class SubscriptionController extends ISub.Stub {

    /**
     * Get the SIM state for the slot index.
     * For Remote-SIMs, this method returns {@link #IccCardConstants.State.UNKNOWN}
     * @return SIM state as the ordinal of {@See IccCardConstants.State}
     * For Remote-SIMs, this method returns {@link IccCardConstants.State#UNKNOWN}
     * @return SIM state as the ordinal of {@link IccCardConstants.State}
     */
    @Override
    public int getSimStateForSlotIndex(int slotIndex) {
@@ -4158,7 +4145,10 @@ public class SubscriptionController extends ISub.Stub {
        }

        // Can't find the existing SIM.
        if (slotInfo == null) return false;
        if (slotInfo == null) {
            loge("Can't find the existing SIM.");
            return false;
        }

        // this for physical slot which has only one port
        if (enable && !slotInfo.getPorts().stream().findFirst().get().isActive()) {
@@ -4408,16 +4398,16 @@ public class SubscriptionController extends ISub.Stub {
        if (hasIdentifierAccess && hasPhoneNumberAccess) {
            return subInfo;
        }
        SubscriptionInfo result = new SubscriptionInfo(subInfo);
        SubscriptionInfo.Builder result = new SubscriptionInfo.Builder(subInfo);
        if (!hasIdentifierAccess) {
            result.clearIccId();
            result.clearCardString();
            result.clearGroupUuid();
            result.setIccId(null);
            result.setCardString(null);
            result.setGroupUuid(null);
        }
        if (!hasPhoneNumberAccess) {
            result.clearNumber();
            result.setNumber(null);
        }
        return result;
        return result.build();
    }

    private synchronized boolean addToSubIdList(int slotIndex, int subId, int subscriptionType) {
@@ -4492,20 +4482,23 @@ public class SubscriptionController extends ISub.Stub {

            mCacheOpportunisticSubInfoList = subList;

            for (SubscriptionInfo info : mCacheOpportunisticSubInfoList) {
            for (int i = 0; i < mCacheOpportunisticSubInfoList.size(); i++) {
                SubscriptionInfo info = mCacheOpportunisticSubInfoList.get(i);
                if (shouldDisableSubGroup(info.getGroupUuid())) {
                    info.setGroupDisabled(true);
                    SubscriptionInfo.Builder builder = new SubscriptionInfo.Builder(info);
                    builder.setGroupDisabled(true);
                    mCacheOpportunisticSubInfoList.set(i, builder.build());
                }
            }

            if (DBG_CACHE) {
                if (!mCacheOpportunisticSubInfoList.isEmpty()) {
                    for (SubscriptionInfo si : mCacheOpportunisticSubInfoList) {
                        logd("[refreshCachedOpptSubscriptionInfoList] Setting Cached info="
                                + si);
                        logd("[refreshCachedOpportunisticSubscriptionInfoList] Setting Cached "
                                + "info=" + si);
                    }
                } else {
                    logdl("[refreshCachedOpptSubscriptionInfoList]- no info return");
                    logdl("[refreshCachedOpportunisticSubscriptionInfoList]- no info return");
                }
            }

@@ -4686,7 +4679,7 @@ public class SubscriptionController extends ISub.Stub {
     * Sets the phone number for the given {@code subId}.
     *
     * <p>The only accepted {@code source} is {@link
     * SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER}.
     * SubscriptionManager#PHONE_NUMBER_SOURCE_CARRIER}.
     */
    @Override
    public void setPhoneNumber(int subId, int source, String number,
+1 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ public class FakeTelephonyProvider extends MockContentProvider {

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        Log.d(TAG, "insert. values=" + values);
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        long id = db.insert("siminfo", null, values);
        return ContentUris.withAppendedId(Telephony.SimInfo.CONTENT_URI, id);
+17 −4
Original line number Diff line number Diff line
@@ -1658,10 +1658,23 @@ public class GsmCdmaPhoneTest extends TelephonyTest {


    private SubscriptionInfo makeSubscriptionInfo(boolean isOpportunistic, int usageSetting) {
        return new SubscriptionInfo(
                 1, "xxxxxxxxx", 1, "Android Test", "Android Test", 0, 0, "8675309", 0,
                null, "001", "01", "us", true, null, null, 0, isOpportunistic, null, false,
                1, 1, 0, null, null, true, 0, usageSetting);
        return new SubscriptionInfo.Builder()
                .setId(1)
                .setIccId("xxxxxxxxx")
                .setSimSlotIndex(1)
                .setDisplayName("Android Test")
                .setDisplayName("Android Test")
                .setNameSource(SubscriptionManager.NAME_SOURCE_CARRIER)
                .setNumber("8675309")
                .setMcc("001")
                .setMnc("01")
                .setCountryIso("us")
                .setEmbedded(true)
                .setOpportunistic(isOpportunistic)
                .setCarrierId(1)
                .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING)
                .setUsageSetting(usageSetting)
                .build();
    }

    @Test
+35 −25
Original line number Diff line number Diff line
@@ -89,28 +89,38 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
    private DataSettingsManager mDataSettingsManagerMock2;
    private CommandsInterface mMockCi;

    private final SubscriptionInfo mSubInfo1 = new SubscriptionInfo.Builder()
            .setId(1)
            .setIccId("subInfo1 IccId")
            .setSimSlotIndex(0)
            .setDisplayName("T-mobile")
            .setCarrierName("T-mobile")
            .setNameSource(SubscriptionManager.NAME_SOURCE_CARRIER)
            .setIconTint(255)
            .setNumber("12345")
            .setMcc("310")
            .setMnc("260")
            .setCountryIso("us")
            .build();

    private final SubscriptionInfo mSubInfo2 = new SubscriptionInfo.Builder(mSubInfo1)
            .setId(2)
            .setIccId("subInfo2 IccId")
            .setGroupUuid(mGroupUuid1.toString())
            .build();

    private final SubscriptionInfo mSubInfo3 = new SubscriptionInfo.Builder(mSubInfo1)
            .setId(3)
            .setIccId("subInfo3 IccId")
            .setGroupUuid(mGroupUuid1.toString())
            .build();

    private final SubscriptionInfo mSubInfo4 = new SubscriptionInfo.Builder(mSubInfo1)
            .setId(4)
            .setIccId("subInfo4 IccId")
            .setGroupUuid(mGroupUuid1.toString())
            .build();

    private final SubscriptionInfo mSubInfo1 = new SubscriptionInfo(1, "subInfo1 IccId", 0,
            "T-mobile", "T-mobile", 0, 255, "12345", 0, null, "310", "260",
            "156", false, null, null);

    private final SubscriptionInfo mSubInfo2 = new SubscriptionInfo(2, "subInfo2 IccId", 1,
            "T-mobile", "T-mobile", 0, 255, "12345", 0, null, "310", "260",
            "156", false, null, null, -1, false, mGroupUuid1.toString(), false,
            TelephonyManager.UNKNOWN_CARRIER_ID, SubscriptionManager.PROFILE_CLASS_DEFAULT,
            SubscriptionManager.SUBSCRIPTION_TYPE_LOCAL_SIM, null, null, true, -1);

    private final SubscriptionInfo mSubInfo3 = new SubscriptionInfo(3, "subInfo3 IccId", -1,
            "T-mobile", "T-mobile", 0, 255, "12345", 0, null, "310", "260",
            "156", false, null, null, -1, false, mGroupUuid1.toString(), false,
            TelephonyManager.UNKNOWN_CARRIER_ID, SubscriptionManager.PROFILE_CLASS_DEFAULT,
            SubscriptionManager.SUBSCRIPTION_TYPE_LOCAL_SIM, null, null, true, -1);

    private final SubscriptionInfo mSubInfo4 = new SubscriptionInfo(4, "subInfo4 IccId", -1,
            "T-mobile", "T-mobile", 0, 255, "12345", 0, null, "310", "260",
            "156", false, null, null, -1, false, mGroupUuid1.toString(), false,
            TelephonyManager.UNKNOWN_CARRIER_ID, SubscriptionManager.PROFILE_CLASS_DEFAULT,
            SubscriptionManager.SUBSCRIPTION_TYPE_LOCAL_SIM, null, null, true, -1);

    @Before
    public void setUp() throws Exception {
@@ -615,7 +625,7 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
    public void testGroupedCbrs() throws Exception {
        // Mark sub 1 as opportunistic.
        replaceInstance(SubscriptionInfo.class, "mIsOpportunistic", mSubInfo1, true);
        replaceInstance(SubscriptionInfo.class, "mGroupUUID", mSubInfo1, mGroupUuid1);
        replaceInstance(SubscriptionInfo.class, "mGroupUuid", mSubInfo1, mGroupUuid1);
        doReturn(true).when(mSubControllerMock).isOpportunistic(1);
        // Make opportunistic sub 1 and sub 2 data enabled.
        doReturn(true).when(mPhoneMock1).isUserDataEnabled();
@@ -657,7 +667,7 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
    @SmallTest
    public void testGroupedPrimaryRemoved() throws Exception {
        // Create subscription grouping of subs 1 and 2.
        replaceInstance(SubscriptionInfo.class, "mGroupUUID", mSubInfo1, mGroupUuid1);
        replaceInstance(SubscriptionInfo.class, "mGroupUuid", mSubInfo1, mGroupUuid1);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(1);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(2);
        doReturn(Arrays.asList(mSubInfo1, mSubInfo2)).when(mSubControllerMock)
@@ -713,7 +723,7 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        processAllMessages();

        // Create subscription grouping.
        replaceInstance(SubscriptionInfo.class, "mGroupUUID", mSubInfo1, mGroupUuid1);
        replaceInstance(SubscriptionInfo.class, "mGroupUuid", mSubInfo1, mGroupUuid1);
        doReturn(Arrays.asList(mSubInfo1, mSubInfo2)).when(mSubControllerMock)
                .getSubscriptionsInGroup(any(), anyString(), nullable(String.class));
        mMultiSimSettingControllerUT.notifySubscriptionGroupChanged(mGroupUuid1);
@@ -933,7 +943,7 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
    public void onSubscriptionGroupChanged_allActiveSubArePartOfGroup() throws Exception {
        doReturn(3).when(mSubControllerMock).getDefaultDataSubId();
        // Create subscription grouping of subs 1 and 2.
        replaceInstance(SubscriptionInfo.class, "mGroupUUID", mSubInfo1, mGroupUuid1);
        replaceInstance(SubscriptionInfo.class, "mGroupUuid", mSubInfo1, mGroupUuid1);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(1);
        doReturn(mGroupUuid1).when(mSubControllerMock).getGroupUuid(2);
        GlobalSettingsHelper.setBoolean(mContext, Settings.Global.MOBILE_DATA, 1, true);
+43 −59

File changed.

Preview size limit exceeded, changes collapsed.

Loading