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

Commit b759906d authored by Kiwon Park's avatar Kiwon Park
Browse files

Make subscriptionController.getPhoneNumber to private and improve variable names in

PerSimStatus.

Bug: 231157548
Test: atest MetricsCollectorTest, PerSimStatusTest
Test: manual e2e test of PerSimStatus atom. See b/231157548#comment2 for details
Change-Id: Id2a7f389ec61f8251aee75790bb526bcee80df23
parent 8dee0d55
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);