Loading telephony/java/android/telephony/PhoneNumberUtils.java +61 −70 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import com.android.i18n.phonenumbers.NumberParseException; import com.android.i18n.phonenumbers.PhoneNumberUtil; import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.android.i18n.phonenumbers.ShortNumberUtil; import android.content.Context; import android.content.Intent; Loading Loading @@ -1572,56 +1573,7 @@ public class PhoneNumberUtils * listed in the RIL / sim, otherwise return false. */ private static boolean isEmergencyNumberInternal(String number, boolean useExactMatch) { // If the number passed in is null, just return false: if (number == null) return false; // If the number passed in is a SIP address, return false, since the // concept of "emergency numbers" is only meaningful for calls placed // over the cell network. // (Be sure to do this check *before* calling extractNetworkPortionAlt(), // since the whole point of extractNetworkPortionAlt() is to filter out // any non-dialable characters (which would turn 'abc911def@example.com' // into '911', for example.)) if (isUriNumber(number)) { return false; } // Strip the separators from the number before comparing it // to the list. number = extractNetworkPortionAlt(number); // retrieve the list of emergency numbers // check read-write ecclist property first String numbers = SystemProperties.get("ril.ecclist"); if (TextUtils.isEmpty(numbers)) { // then read-only ecclist property since old RIL only uses this numbers = SystemProperties.get("ro.ril.ecclist"); } if (!TextUtils.isEmpty(numbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : numbers.split(",")) { if (useExactMatch) { if (number.equals(emergencyNum)) { return true; } } else { if (number.startsWith(emergencyNum)) { return true; } } } // no matches found against the list! return false; } // No ecclist system property, so use our own list. if (useExactMatch) { return (number.equals("112") || number.equals("911")); } else { return (number.startsWith("112") || number.startsWith("911")); } return isEmergencyNumberInternal(number, null, useExactMatch); } /** Loading Loading @@ -1684,28 +1636,67 @@ public class PhoneNumberUtils private static boolean isEmergencyNumberInternal(String number, String defaultCountryIso, boolean useExactMatch) { PhoneNumberUtil util = PhoneNumberUtil.getInstance(); try { PhoneNumber pn = util.parse(number, defaultCountryIso); // libphonenumber guarantees short numbers such as emergency numbers are classified as // invalid. Therefore, if the number passes the validation test, we believe it is not an // emergency number. // TODO: Compare against a list of country-specific known emergency numbers instead, once // that has been collected. if (util.isValidNumber(pn)) { // If the number passed in is null, just return false: if (number == null) return false; // If the number passed in is a SIP address, return false, since the // concept of "emergency numbers" is only meaningful for calls placed // over the cell network. // (Be sure to do this check *before* calling extractNetworkPortionAlt(), // since the whole point of extractNetworkPortionAlt() is to filter out // any non-dialable characters (which would turn 'abc911def@example.com' // into '911', for example.)) if (isUriNumber(number)) { return false; } else if ("BR".equalsIgnoreCase(defaultCountryIso) && number.length() >= 8) { // This is to prevent Brazilian local numbers which start with 911 being incorrectly // classified as emergency numbers. 911 is not an emergency number in Brazil; it is also // not possible to append additional digits to an emergency number to dial the number in // Brazil - it won't connect. // TODO: Clean this up once a list of country-specific known emergency numbers is // collected. } // Strip the separators from the number before comparing it // to the list. number = extractNetworkPortionAlt(number); // retrieve the list of emergency numbers // check read-write ecclist property first String numbers = SystemProperties.get("ril.ecclist"); if (TextUtils.isEmpty(numbers)) { // then read-only ecclist property since old RIL only uses this numbers = SystemProperties.get("ro.ril.ecclist"); } if (!TextUtils.isEmpty(numbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : numbers.split(",")) { // It is not possible to append additional digits to an emergency number to dial // the number in Brazil - it won't connect. if (useExactMatch || "BR".equalsIgnoreCase(defaultCountryIso)) { if (number.equals(emergencyNum)) { return true; } } else { if (number.startsWith(emergencyNum)) { return true; } } } // no matches found against the list! return false; } } catch (NumberParseException e) { // No ecclist system property, so use our own list. if (defaultCountryIso != null) { ShortNumberUtil util = new ShortNumberUtil(); if (useExactMatch) { return util.isEmergencyNumber(number, defaultCountryIso); } else { return util.connectsToEmergencyNumber(number, defaultCountryIso); } } else { if (useExactMatch) { return (number.equals("112") || number.equals("911")); } else { return (number.startsWith("112") || number.startsWith("911")); } } return isEmergencyNumberInternal(number, useExactMatch); } /** Loading Loading
telephony/java/android/telephony/PhoneNumberUtils.java +61 −70 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import com.android.i18n.phonenumbers.NumberParseException; import com.android.i18n.phonenumbers.PhoneNumberUtil; import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.android.i18n.phonenumbers.ShortNumberUtil; import android.content.Context; import android.content.Intent; Loading Loading @@ -1572,56 +1573,7 @@ public class PhoneNumberUtils * listed in the RIL / sim, otherwise return false. */ private static boolean isEmergencyNumberInternal(String number, boolean useExactMatch) { // If the number passed in is null, just return false: if (number == null) return false; // If the number passed in is a SIP address, return false, since the // concept of "emergency numbers" is only meaningful for calls placed // over the cell network. // (Be sure to do this check *before* calling extractNetworkPortionAlt(), // since the whole point of extractNetworkPortionAlt() is to filter out // any non-dialable characters (which would turn 'abc911def@example.com' // into '911', for example.)) if (isUriNumber(number)) { return false; } // Strip the separators from the number before comparing it // to the list. number = extractNetworkPortionAlt(number); // retrieve the list of emergency numbers // check read-write ecclist property first String numbers = SystemProperties.get("ril.ecclist"); if (TextUtils.isEmpty(numbers)) { // then read-only ecclist property since old RIL only uses this numbers = SystemProperties.get("ro.ril.ecclist"); } if (!TextUtils.isEmpty(numbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : numbers.split(",")) { if (useExactMatch) { if (number.equals(emergencyNum)) { return true; } } else { if (number.startsWith(emergencyNum)) { return true; } } } // no matches found against the list! return false; } // No ecclist system property, so use our own list. if (useExactMatch) { return (number.equals("112") || number.equals("911")); } else { return (number.startsWith("112") || number.startsWith("911")); } return isEmergencyNumberInternal(number, null, useExactMatch); } /** Loading Loading @@ -1684,28 +1636,67 @@ public class PhoneNumberUtils private static boolean isEmergencyNumberInternal(String number, String defaultCountryIso, boolean useExactMatch) { PhoneNumberUtil util = PhoneNumberUtil.getInstance(); try { PhoneNumber pn = util.parse(number, defaultCountryIso); // libphonenumber guarantees short numbers such as emergency numbers are classified as // invalid. Therefore, if the number passes the validation test, we believe it is not an // emergency number. // TODO: Compare against a list of country-specific known emergency numbers instead, once // that has been collected. if (util.isValidNumber(pn)) { // If the number passed in is null, just return false: if (number == null) return false; // If the number passed in is a SIP address, return false, since the // concept of "emergency numbers" is only meaningful for calls placed // over the cell network. // (Be sure to do this check *before* calling extractNetworkPortionAlt(), // since the whole point of extractNetworkPortionAlt() is to filter out // any non-dialable characters (which would turn 'abc911def@example.com' // into '911', for example.)) if (isUriNumber(number)) { return false; } else if ("BR".equalsIgnoreCase(defaultCountryIso) && number.length() >= 8) { // This is to prevent Brazilian local numbers which start with 911 being incorrectly // classified as emergency numbers. 911 is not an emergency number in Brazil; it is also // not possible to append additional digits to an emergency number to dial the number in // Brazil - it won't connect. // TODO: Clean this up once a list of country-specific known emergency numbers is // collected. } // Strip the separators from the number before comparing it // to the list. number = extractNetworkPortionAlt(number); // retrieve the list of emergency numbers // check read-write ecclist property first String numbers = SystemProperties.get("ril.ecclist"); if (TextUtils.isEmpty(numbers)) { // then read-only ecclist property since old RIL only uses this numbers = SystemProperties.get("ro.ril.ecclist"); } if (!TextUtils.isEmpty(numbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : numbers.split(",")) { // It is not possible to append additional digits to an emergency number to dial // the number in Brazil - it won't connect. if (useExactMatch || "BR".equalsIgnoreCase(defaultCountryIso)) { if (number.equals(emergencyNum)) { return true; } } else { if (number.startsWith(emergencyNum)) { return true; } } } // no matches found against the list! return false; } } catch (NumberParseException e) { // No ecclist system property, so use our own list. if (defaultCountryIso != null) { ShortNumberUtil util = new ShortNumberUtil(); if (useExactMatch) { return util.isEmergencyNumber(number, defaultCountryIso); } else { return util.connectsToEmergencyNumber(number, defaultCountryIso); } } else { if (useExactMatch) { return (number.equals("112") || number.equals("911")); } else { return (number.startsWith("112") || number.startsWith("911")); } } return isEmergencyNumberInternal(number, useExactMatch); } /** Loading