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

Commit 2d811bd1 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed empty phone number

For getting phone number from UICC, when getLine1Number is not available,
fallback to phone number stored in subscription info.

Fix: 302437869
Flag: uicc_phone_number_fix
Test: atest SubscriptionManagerServiceTest
Test: Basic telephony functionality tests
Change-Id: I0e5a9db89fbe94e4f08928da2cb98230c3655128
parent ace907a6
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -77,3 +77,15 @@ flag {
    purpose: PURPOSE_BUGFIX
  }
}

# OWNER=jackyu TARGET=24Q4
flag {
  name: "uicc_phone_number_fix"
  namespace: "telephony"
  description: "Fixed that empty phone number when getLine1Number returns empty"
  bug: "302437869"

  metadata {
    purpose: PURPOSE_BUGFIX
  }
}
+13 −3
Original line number Diff line number Diff line
@@ -3902,11 +3902,21 @@ public class SubscriptionManagerService extends ISub.Stub {
        switch(source) {
            case SubscriptionManager.PHONE_NUMBER_SOURCE_UICC:
                final Phone phone = PhoneFactory.getPhone(getSlotIndex(subId));
                if (mFeatureFlags.uiccPhoneNumberFix()) {
                    if (phone != null) {
                        String number = phone.getLine1Number();
                        if (!TextUtils.isEmpty(number)) {
                            return number;
                        }
                    }
                    return subInfo.getNumber();
                } else {
                    if (phone != null) {
                        return TextUtils.emptyIfNull(phone.getLine1Number());
                    } else {
                        return subInfo.getNumber();
                    }
                }
            case SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER:
                return subInfo.getNumberFromCarrier();
            case SubscriptionManager.PHONE_NUMBER_SOURCE_IMS:
+22 −1
Original line number Diff line number Diff line
@@ -242,6 +242,10 @@ public class SubscriptionManagerServiceTest extends TelephonyTest {

        // Due to affect exist implementation, bypass feature flag.
        doReturn(false).when(mFlags).enforceTelephonyFeatureMappingForPublicApis();

        doReturn(true).when(mFlags).saferGetPhoneNumber();
        doReturn(true).when(mFlags).uiccPhoneNumberFix();

        doReturn(true).when(mPackageManager).hasSystemFeature(
                eq(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION));
        logd("SubscriptionManagerServiceTest -Setup!");
@@ -1832,7 +1836,7 @@ public class SubscriptionManagerServiceTest extends TelephonyTest {
        multiNumberSubInfo =
                new SubscriptionInfoInternal.Builder(multiNumberSubInfo)
                        .setNumberFromCarrier("")
                        .setNumber(phoneNumberFromUicc)
                        .setNumber("")
                        .setNumberFromIms(phoneNumberFromIms)
                        .build();
        subId = insertSubscription(multiNumberSubInfo);
@@ -2523,6 +2527,23 @@ public class SubscriptionManagerServiceTest extends TelephonyTest {
                .isEmpty();
    }

    @Test
    public void testGetPhoneNumberFromUicc() {
        mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
        testSetPhoneNumber();
        // Number from line1Number should be FAKE_PHONE_NUMBER1 instead of FAKE_PHONE_NUMBER2
        assertThat(mSubscriptionManagerServiceUT.getPhoneNumber(1,
                SubscriptionManager.PHONE_NUMBER_SOURCE_UICC, CALLING_PACKAGE, CALLING_FEATURE))
                .isEqualTo(FAKE_PHONE_NUMBER1);

        doReturn("").when(mPhone).getLine1Number();

        // If getLine1Number is empty, then the number should be from the sub info.
        assertThat(mSubscriptionManagerServiceUT.getPhoneNumber(1,
                SubscriptionManager.PHONE_NUMBER_SOURCE_UICC, CALLING_PACKAGE, CALLING_FEATURE))
                .isEqualTo(FAKE_PHONE_NUMBER2);
    }

    @Test
    public void testGetPhoneNumberFromInactiveSubscription() {
        mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE);