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

Commit 35b45a77 authored by Meng Wang's avatar Meng Wang
Browse files

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
parent 7d148d1b
Loading
Loading
Loading
Loading
+24 −8
Original line number Diff line number Diff line
@@ -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<SubscriptionInfo> 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);
    }
}