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
This commit is contained in:
Yorke Lee
2015-06-30 10:07:40 -07:00
parent 82b3f67711
commit 1249bdbe90

View File

@@ -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);