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
diff --git a/flags/subscription.aconfig b/flags/subscription.aconfig
index 9a5dabc..dc17a61 100644
--- a/flags/subscription.aconfig
+++ b/flags/subscription.aconfig
@@ -77,3 +77,15 @@
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
+ }
+}
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 42e22ea..9b45518 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -3902,10 +3902,20 @@
switch(source) {
case SubscriptionManager.PHONE_NUMBER_SOURCE_UICC:
final Phone phone = PhoneFactory.getPhone(getSlotIndex(subId));
- if (phone != null) {
- return TextUtils.emptyIfNull(phone.getLine1Number());
- } else {
+ 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();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java b/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java
index acbf29b..8172d97 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java
@@ -242,6 +242,10 @@
// 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 @@
multiNumberSubInfo =
new SubscriptionInfoInternal.Builder(multiNumberSubInfo)
.setNumberFromCarrier("")
- .setNumber(phoneNumberFromUicc)
+ .setNumber("")
.setNumberFromIms(phoneNumberFromIms)
.build();
subId = insertSubscription(multiNumberSubInfo);
@@ -2524,6 +2528,23 @@
}
@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);
testInactiveSimRemoval();