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

Commit 96253ede authored by Kiwon Park's avatar Kiwon Park Committed by Android (Google) Code Review
Browse files

Merge "Make subscriptionController.getPhoneNumber to private and improve...

Merge "Make subscriptionController.getPhoneNumber to private and improve variable names in PerSimStatus." into tm-dev
parents 586953da b759906d
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -4642,12 +4642,9 @@ public class SubscriptionController extends ISub.Stub {
        }
    }

    /**
     * Implements getPhoneNumber() APIs, w/o permission check.
     * Can be used by other phone internal components.
     */
    // Internal helper method for implementing getPhoneNumber() API.
    @Nullable
    public String getPhoneNumber(int subId, int source) {
    private String getPhoneNumber(int subId, int source) {
        if (source == SubscriptionManager.PHONE_NUMBER_SOURCE_UICC) {
            Phone phone = PhoneFactory.getPhone(getPhoneId(subId));
            return phone != null ? phone.getLine1Number() : null;
+38 −31
Original line number Diff line number Diff line
@@ -78,15 +78,15 @@ public class PerSimStatus {
    /** Returns the current sim status of the given {@link Phone}. */
    @Nullable
    public static PerSimStatus getCurrentState(Phone phone) {
        int[] numberState = getNumberState(phone);
        if (numberState == null) return null;
        int[] numberIds = getNumberIds(phone);
        if (numberIds == null) return null;
        ImsMmTelManager imsMmTelManager = getImsMmTelManager(phone);
        IccCard iccCard = phone.getIccCard();
        return new PerSimStatus(
                phone.getCarrierId(),
                numberState[0],
                numberState[1],
                numberState[2],
                numberIds[0],
                numberIds[1],
                numberIds[2],
                imsMmTelManager == null ? false : imsMmTelManager.isAdvancedCallingSettingEnabled(),
                imsMmTelManager == null ? false : imsMmTelManager.isVoWiFiSettingEnabled(),
                imsMmTelManager == null
@@ -151,15 +151,19 @@ public class PerSimStatus {
    }

    /**
     * Returns an array containing the various phone numbers available on the device.
     * Returns an array of integer ids representing phone numbers. If number is empty then id will
     * be 0. Two same numbers will have same id, and different numbers will have different ids. For
     * example, [1, 0, 1] means that uicc and ims numbers are the same while carrier number is empty
     * and [1, 2, 3] means all numbers are different.
     *
     * <ul>
     *     <li>Index 0: phone number associated with {@code PHONE_NUMBER_SOURCE_UICC}.</li>
     *     <li>Index 1: phone number associated with {@code PHONE_NUMBER_SOURCE_CARRIER}.</li>
     *     <li>Index 2: phone number associated with {@code PHONE_NUMBER_SOURCE_IMS}.</li>
     *   <li>Index 0: id associated with {@code PHONE_NUMBER_SOURCE_UICC}.</li>
     *   <li>Index 1: id associated with {@code PHONE_NUMBER_SOURCE_CARRIER}.</li>
     *   <li>Index 2: id associated with {@code PHONE_NUMBER_SOURCE_IMS}.</li>
     * </ul>
     */
    @Nullable
    private static int[] getNumberState(Phone phone) {
    private static int[] getNumberIds(Phone phone) {
        SubscriptionController subscriptionController = SubscriptionController.getInstance();
        if (subscriptionController == null) {
            return null;
@@ -169,33 +173,37 @@ public class PerSimStatus {
                Optional.ofNullable(subscriptionController.getSubscriptionInfo(subId))
                        .map(SubscriptionInfo::getCountryIso)
                        .orElse("");
        // number[] - hone numbers from each sources:
        String[] number =
        // numbersFromAllSources[] - phone numbers from each sources:
        String[] numbersFromAllSources =
                new String[] {
                    subscriptionController.getPhoneNumber(subId, PHONE_NUMBER_SOURCE_UICC), // 0
                    subscriptionController.getPhoneNumber(subId, PHONE_NUMBER_SOURCE_CARRIER), // 1
                    subscriptionController.getPhoneNumber(subId, PHONE_NUMBER_SOURCE_IMS), // 2
                    subscriptionController.getPhoneNumber(
                            subId, PHONE_NUMBER_SOURCE_UICC, null, null), // 0
                    subscriptionController.getPhoneNumber(
                            subId, PHONE_NUMBER_SOURCE_CARRIER, null, null), // 1
                    subscriptionController.getPhoneNumber(
                            subId, PHONE_NUMBER_SOURCE_IMS, null, null), // 2
                };
        int[] numberState = new int[number.length]; // default value 0
        for (int i = 0, stateForNextUniqueNumber = 1; i < numberState.length; i++) {
            if (TextUtils.isEmpty(number[i])) {
                // keep state 0 if number not available
        int[] numberIds = new int[numbersFromAllSources.length]; // default value 0
        for (int i = 0, idForNextUniqueNumber = 1; i < numberIds.length; i++) {
            if (TextUtils.isEmpty(numbersFromAllSources[i])) {
                // keep id 0 if number not available
                continue;
            }
            // the number is available:
            // try to find the same number from other sources and reuse the state
            // try to find the same number from other sources and reuse the id
            for (int j = 0; j < i; j++) {
                if (!TextUtils.isEmpty(number[j])
                        && areSamePhoneNumber(number[i], number[j], countryIso)) {
                    numberState[i] = numberState[j];
                if (!TextUtils.isEmpty(numbersFromAllSources[j])
                        && areSamePhoneNumber(
                                numbersFromAllSources[i], numbersFromAllSources[j], countryIso)) {
                    numberIds[i] = numberIds[j];
                }
            }
            // didn't find same number (otherwise should not be state 0), assign a new state
            if (numberState[i] == 0) {
                numberState[i] = stateForNextUniqueNumber++;
            // didn't find same number (otherwise should not be id 0), assign a new id
            if (numberIds[i] == 0) {
                numberIds[i] = idForNextUniqueNumber++;
            }
        }
        return numberState;
        return numberIds;
    }

    /**
@@ -249,8 +257,7 @@ public class PerSimStatus {
                phone.getContext()
                        .getContentResolver()
                        .query(
                                Uri.withAppendedPath(
                                        CONTENT_URI, "subId/" + phone.getSubId()),
                                Uri.withAppendedPath(CONTENT_URI, "subId/" + phone.getSubId()),
                                projections,
                                selection,
                                selectionArgs,
+25 −15
Original line number Diff line number Diff line
@@ -82,11 +82,13 @@ public class PerSimStatusTest extends TelephonyTest {
        doReturn(100).when(mPhone).getCarrierId();
        doReturn("6506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC);
        doReturn("").when(mSubscriptionController).getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC, null, null);
        doReturn("")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER, null, null);
        doReturn("+16506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS, null, null);
        SubscriptionInfo subscriptionInfo1 = mock(SubscriptionInfo.class);
        doReturn("us").when(subscriptionInfo1).getCountryIso();
        doReturn(subscriptionInfo1).when(mSubscriptionController).getSubscriptionInfo(1);
@@ -119,13 +121,15 @@ public class PerSimStatusTest extends TelephonyTest {
        doReturn(1).when(mSecondPhone).getPhoneId();
        doReturn(2).when(mSecondPhone).getSubId();
        doReturn(101).when(mSecondPhone).getCarrierId();
        doReturn("0123").when(mSubscriptionController).getPhoneNumber(2, PHONE_NUMBER_SOURCE_UICC);
        doReturn("0123")
                .when(mSubscriptionController)
                .getPhoneNumber(2, PHONE_NUMBER_SOURCE_UICC, null, null);
        doReturn("16506950123")
                .when(mSubscriptionController)
                .getPhoneNumber(2, PHONE_NUMBER_SOURCE_CARRIER);
                .getPhoneNumber(2, PHONE_NUMBER_SOURCE_CARRIER, null, null);
        doReturn("+16506950123")
                .when(mSubscriptionController)
                .getPhoneNumber(2, PHONE_NUMBER_SOURCE_IMS);
                .getPhoneNumber(2, PHONE_NUMBER_SOURCE_IMS, null, null);
        SubscriptionInfo subscriptionInfo2 = mock(SubscriptionInfo.class);
        doReturn("us").when(subscriptionInfo2).getCountryIso();
        doReturn(subscriptionInfo2).when(mSubscriptionController).getSubscriptionInfo(2);
@@ -211,11 +215,13 @@ public class PerSimStatusTest extends TelephonyTest {
        doReturn(100).when(mPhone).getCarrierId();
        doReturn("6506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC);
        doReturn("").when(mSubscriptionController).getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC, null, null);
        doReturn("")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER, null, null);
        doReturn("+16506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS, null, null);
        SubscriptionInfo subscriptionInfo = mock(SubscriptionInfo.class);
        doReturn("us").when(subscriptionInfo).getCountryIso();
        doReturn(subscriptionInfo).when(mSubscriptionController).getSubscriptionInfo(1);
@@ -262,11 +268,13 @@ public class PerSimStatusTest extends TelephonyTest {
        doReturn(100).when(mPhone).getCarrierId();
        doReturn("6506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC);
        doReturn("").when(mSubscriptionController).getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC, null, null);
        doReturn("")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER, null, null);
        doReturn("+16506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS, null, null);
        SubscriptionInfo subscriptionInfo = mock(SubscriptionInfo.class);
        doReturn("us").when(subscriptionInfo).getCountryIso();
        doReturn(subscriptionInfo).when(mSubscriptionController).getSubscriptionInfo(1);
@@ -315,11 +323,13 @@ public class PerSimStatusTest extends TelephonyTest {
        doReturn(100).when(mPhone).getCarrierId();
        doReturn("6506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC);
        doReturn("").when(mSubscriptionController).getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_UICC, null, null);
        doReturn("")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_CARRIER, null, null);
        doReturn("+16506953210")
                .when(mSubscriptionController)
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS);
                .getPhoneNumber(1, PHONE_NUMBER_SOURCE_IMS, null, null);
        SubscriptionInfo subscriptionInfo = mock(SubscriptionInfo.class);
        doReturn("us").when(subscriptionInfo).getCountryIso();
        doReturn(subscriptionInfo).when(mSubscriptionController).getSubscriptionInfo(1);