summaryrefslogtreecommitdiff
path: root/java/src/com
diff options
context:
space:
mode:
authorShaopeng Jia <shaopengjia@google.com>2011-11-18 05:32:31 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-11-18 05:32:31 -0800
commite76b7f6260ca25d98f44f3bbac4415fa62ad2b00 (patch)
treeeb567ab85c2c1467fa2bf03a8c5681674dd585bc /java/src/com
parentf510a7b5e49fffa0ecab9258eeff85d40bb57964 (diff)
parent5cd062f9cba053c771bcea181fec210279ec030b (diff)
downloadlibphonenumber-e76b7f6260ca25d98f44f3bbac4415fa62ad2b00.tar.gz
Merge "Tighten formatInOriginalFormat not to format numbers which we don't have formatting patterns, and use the raw_input instead."
Diffstat (limited to 'java/src/com')
-rw-r--r--java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
index 3f0138a9..4a435b87 100644
--- a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
@@ -1339,7 +1339,11 @@ public class PhoneNumberUtil {
* @return the formatted phone number in its original number format
*/
public String formatInOriginalFormat(PhoneNumber number, String regionCallingFrom) {
- if (number.hasRawInput() && !isValidNumber(number)) {
+ if (number.hasRawInput() &&
+ (!hasFormattingPatternForNumber(number) || !isValidNumber(number))) {
+ // We check if we have the formatting pattern because without that, we might format the number
+ // as a group without national prefix. We also want to check the validity of the number
+ // because we don't want to risk formatting the number if we don't really understand it.
return number.getRawInput();
}
if (!number.hasCountryCodeSource()) {
@@ -1358,6 +1362,18 @@ public class PhoneNumberUtil {
}
}
+ private boolean hasFormattingPatternForNumber(PhoneNumber number) {
+ String phoneNumberRegion = getRegionCodeForCountryCode(number.getCountryCode());
+ PhoneMetadata metadata = getMetadataForRegion(phoneNumberRegion);
+ if (metadata == null) {
+ return false;
+ }
+ String nationalNumber = getNationalSignificantNumber(number);
+ NumberFormat formatRule =
+ chooseFormattingPatternForNumber(metadata.numberFormats(), nationalNumber);
+ return formatRule != null;
+ }
+
/**
* Formats a phone number for out-of-country dialing purposes.
*