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

Commit 1249bdbe authored by Yorke Lee's avatar Yorke Lee
Browse files

Fix TelecomManager.isVoicemailNumber

Provide an overload of PhoneNumberUtil.isVoiceMailNumber that
takes a context to prevent an NPE.

This does not fix PhoneNumberUtil.isVoicemailNumber(String number),
that will require a follow up CL.

Bug: 22184528
Change-Id: I300b70948e5ff7230989bb887ad17e222c61685d
parent 82b3f677
Loading
Loading
Loading
Loading
+24 −3
Original line number Diff line number Diff line
@@ -2080,14 +2080,35 @@ public class PhoneNumberUtils
     * @hide
     */
    public static boolean isVoiceMailNumber(int subId, String number) {
        String vmNumber;
        return isVoiceMailNumber(null, subId, number);
    }

    /**
     * isVoiceMailNumber: checks a given number against the voicemail
     *   number provided by the RIL and SIM card. The caller must have
     *   the READ_PHONE_STATE credential.
     *
     * @param context a non-null {@link Context}.
     * @param subId the subscription id of the SIM.
     * @param number the number to look up.
     * @return true if the number is in the list of voicemail. False
     * otherwise, including if the caller does not have the permission
     * to read the VM number.
     * @hide
     */
    public static boolean isVoiceMailNumber(Context context, int subId, String number) {
        String vmNumber;
        try {
            vmNumber = TelephonyManager.getDefault().getVoiceMailNumber(subId);
            final TelephonyManager tm;
            if (context == null) {
                tm = TelephonyManager.getDefault();
            } else {
                tm = TelephonyManager.from(context);
            }
            vmNumber = tm.getVoiceMailNumber(subId);
        } catch (SecurityException ex) {
            return false;
        }

        // Strip the separators from the number before comparing it
        // to the list.
        number = extractNetworkPortionAlt(number);