From 35b45a774df3efb818cd88e3ed1870792b333cac Mon Sep 17 00:00:00 2001 From: Meng Wang Date: Mon, 29 Nov 2021 16:48:55 -0800 Subject: [PATCH] Use getPhoneNumber API to get phone number on T .. which is supposed to have a lower chance of returning empty than getLine1Number. Bug: 159459637 Test: make Change-Id: I10476fb1a95baf294666dafc9fe77d5732bf0349 --- .../android/settingslib/DeviceInfoUtils.java | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java b/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java index ff00fb3282b1a..0f340239cd24a 100644 --- a/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/DeviceInfoUtils.java @@ -26,6 +26,7 @@ import android.system.Os; import android.system.StructUtsname; import android.telephony.PhoneNumberUtils; import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; @@ -33,7 +34,9 @@ import android.text.TextUtils; import android.text.format.DateFormat; import android.util.Log; +import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; +import androidx.core.os.BuildCompat; import java.io.BufferedReader; import java.io.FileReader; @@ -179,10 +182,8 @@ public class DeviceInfoUtils { SubscriptionInfo subscriptionInfo) { String formattedNumber = null; if (subscriptionInfo != null) { - final TelephonyManager telephonyManager = context.getSystemService( - TelephonyManager.class); - final String rawNumber = telephonyManager.createForSubscriptionId( - subscriptionInfo.getSubscriptionId()).getLine1Number(); + final String rawNumber = getRawPhoneNumber( + context, subscriptionInfo.getSubscriptionId()); if (!TextUtils.isEmpty(rawNumber)) { formattedNumber = PhoneNumberUtils.formatNumber(rawNumber); } @@ -194,12 +195,10 @@ public class DeviceInfoUtils { List subscriptionInfoList) { StringBuilder sb = new StringBuilder(); if (subscriptionInfoList != null) { - final TelephonyManager telephonyManager = context.getSystemService( - TelephonyManager.class); final int count = subscriptionInfoList.size(); for (SubscriptionInfo subscriptionInfo : subscriptionInfoList) { - final String rawNumber = telephonyManager.createForSubscriptionId( - subscriptionInfo.getSubscriptionId()).getLine1Number(); + final String rawNumber = getRawPhoneNumber( + context, subscriptionInfo.getSubscriptionId()); if (!TextUtils.isEmpty(rawNumber)) { sb.append(PhoneNumberUtils.formatNumber(rawNumber)).append("\n"); } @@ -219,4 +218,21 @@ public class DeviceInfoUtils { final String phoneNumber = getFormattedPhoneNumber(context, subscriptionInfo); return BidiFormatter.getInstance().unicodeWrap(phoneNumber, TextDirectionHeuristics.LTR); } + + private static String getRawPhoneNumber(Context context, int subscriptionId) { + if (BuildCompat.isAtLeastT()) { + return getRawPhoneNumberFromT(context, subscriptionId); + } else { + final TelephonyManager telephonyManager = context.getSystemService( + TelephonyManager.class); + return telephonyManager.createForSubscriptionId(subscriptionId).getLine1Number(); + } + } + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private static String getRawPhoneNumberFromT(Context context, int subscriptionId) { + final SubscriptionManager subscriptionManager = context.getSystemService( + SubscriptionManager.class); + return subscriptionManager.getPhoneNumber(subscriptionId); + } }