Adding new functionality needed by Android: formatUsingOriginalNumberFormat and unittests.
Change-Id: I618dcfe1e7f61b0f2cee7cc18236a272541d0b04
diff --git a/README.android b/README.android
index 545c0d1..5a563d7 100644
--- a/README.android
+++ b/README.android
@@ -1,4 +1,4 @@
URL: http://code.google.com/p/libphonenumber/
-Version: r15
+Version: r16
License: Apache 2
Description: Google Phone Number Library.
diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
index f55723a..b96d45f 100644
--- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
@@ -835,6 +835,35 @@
formattedExtension);
}
+ /**
+ * Formats a phone number using the original phone number format that the number is parsed from.
+ * The original format is embedded in the country_code_source field of the PhoneNumber object
+ * passed in. If such information is missing, the number will be formatted into the NATIONAL
+ * format by default.
+ *
+ * @param number The PhoneNumber that needs to be formatted in its original number format
+ * @param defaultCountry the country whose IDD needs to be appended if the original number has
+ * one
+ * @return The formatted phone number in its original number format
+ */
+ public String formatUsingOriginalNumberFormat(PhoneNumber number, String defaultCountry) {
+ if (!number.hasRawInput()) {
+ return format(number, PhoneNumberFormat.NATIONAL);
+ }
+ switch (number.getCountryCodeSource()) {
+ case FROM_DEFAULT_COUNTRY:
+ return format(number, PhoneNumberFormat.NATIONAL);
+ case FROM_NUMBER_WITH_PLUS_SIGN:
+ return format(number, PhoneNumberFormat.INTERNATIONAL);
+ case FROM_NUMBER_WITH_IDD:
+ return formatOutOfCountryCallingNumber(number, defaultCountry);
+ case FROM_NUMBER_WITHOUT_PLUS_SIGN:
+ return format(number, PhoneNumberFormat.INTERNATIONAL).substring(1);
+ default:
+ return number.getRawInput();
+ }
+ }
+
/**
* Gets the national significant number of the a phone number. Note a national significant number
diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
index 44b57c8..3efd513 100644
--- a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -586,6 +586,23 @@
PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
}
+ public void testFormatUsingOriginalNumberFormat() throws Exception {
+ PhoneNumber number1 = phoneUtil.parseAndKeepRawInput("+442087654321", "GB");
+ assertEquals("+44 20 8765 4321", phoneUtil.formatUsingOriginalNumberFormat(number1, "GB"));
+
+ PhoneNumber number2 = phoneUtil.parseAndKeepRawInput("02087654321", "GB");
+ assertEquals("(020) 8765 4321", phoneUtil.formatUsingOriginalNumberFormat(number2, "GB"));
+
+ PhoneNumber number3 = phoneUtil.parseAndKeepRawInput("011442087654321", "US");
+ assertEquals("011 44 20 8765 4321", phoneUtil.formatUsingOriginalNumberFormat(number3, "US"));
+
+ PhoneNumber number4 = phoneUtil.parseAndKeepRawInput("442087654321", "GB");
+ assertEquals("44 20 8765 4321", phoneUtil.formatUsingOriginalNumberFormat(number4, "GB"));
+
+ PhoneNumber number5 = phoneUtil.parse("+442087654321", "GB");
+ assertEquals("(020) 8765 4321", phoneUtil.formatUsingOriginalNumberFormat(number5, "GB"));
+ }
+
public void testIsPremiumRate() {
PhoneNumber premiumRateNumber1 =
PhoneNumber.newBuilder().setCountryCode(1).setNationalNumber(9004433030L).build();