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