diff options
| -rw-r--r-- | telephony/java/android/telephony/PhoneNumberUtils.java | 87 | ||||
| -rw-r--r-- | telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java | 23 |
2 files changed, 110 insertions, 0 deletions
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java index 920f38e..8f46df7 100644 --- a/telephony/java/android/telephony/PhoneNumberUtils.java +++ b/telephony/java/android/telephony/PhoneNumberUtils.java @@ -16,6 +16,11 @@ package android.telephony; +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; +import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; + import android.content.Context; import android.content.Intent; import android.database.Cursor; @@ -1319,6 +1324,88 @@ public class PhoneNumberUtils } } + /** + * Format the given phoneNumber to the E.164 representation. + * <p> + * The given phone number must have an area code and could have a country + * code. + * <p> + * The defaultCountryIso is used to validate the given number and generate + * the E.164 phone number if the given number doesn't have a country code. + * + * @param phoneNumber + * the phone number to format + * @param defaultCountryIso + * the ISO 3166-1 two letters country code + * @return the E.164 representation, or null if the given phone number is + * not valid. + * + * @hide + */ + public static String formatNumberToE164(String phoneNumber, String defaultCountryIso) { + PhoneNumberUtil util = PhoneNumberUtil.getInstance(); + String result = null; + try { + PhoneNumber pn = util.parse(phoneNumber, defaultCountryIso); + if (util.isValidNumber(pn)) { + result = util.format(pn, PhoneNumberFormat.E164); + } + } catch (NumberParseException e) { + } + return result; + } + + /** + * Format a phone number. + * <p> + * If the given number doesn't have the country code, the phone will be + * formatted to the default country's convention. + * + * @param phoneNumber + * the number to be formatted. + * @param defaultCountryIso + * the ISO 3166-1 two letters country code whose convention will + * be used if the given number doesn't have the country code. + * @return the formatted number, or null if the given number is not valid. + * + * @hide + */ + public static String formatNumber(String phoneNumber, String defaultCountryIso) { + PhoneNumberUtil util = PhoneNumberUtil.getInstance(); + String result = null; + try { + PhoneNumber pn = util.parse(phoneNumber, defaultCountryIso); + result = util.formatInOriginalFormat(pn, defaultCountryIso); + } catch (NumberParseException e) { + } + return result; + } + + /** + * Normalize a phone number by removing the characters other than digits. If + * the given number has keypad letters, the letters will be converted to + * digits first. + * + * @param phoneNumber + * the number to be normalized. + * @return the normalized number. + * + * @hide + */ + public static String normalizeNumber(String phoneNumber) { + StringBuilder sb = new StringBuilder(); + int len = phoneNumber.length(); + for (int i = 0; i < len; i++) { + char c = phoneNumber.charAt(i); + if (PhoneNumberUtils.isISODigit(c)) { + sb.append(c); + } else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') { + return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber)); + } + } + return sb.toString(); + } + // Three and four digit phone numbers for either special services, // or 3-6 digit addresses from the network (eg carrier-originated SMS messages) should // not match. diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java index de59b81..5ef1c69 100644 --- a/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java +++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java @@ -503,4 +503,27 @@ public class PhoneNumberUtilsTest extends AndroidTestCase { assertTrue(PhoneNumberUtils.isVoiceMailNumber(mVoiceMailNumber)); */ } + + @SmallTest + public void testFormatNumberToE164() { + assertEquals("+16502910000", PhoneNumberUtils.formatNumberToE164("650 2910000", "us")); + assertNull(PhoneNumberUtils.formatNumberToE164("1234567", "us")); + assertEquals("+18004664114", PhoneNumberUtils.formatNumberToE164("800-GOOG-114", "us")); + } + + @SmallTest + public void testFormatNumber() { + assertEquals("(650) 291-0000", PhoneNumberUtils.formatNumber("650 2910000", "us")); + assertEquals("123-4567", PhoneNumberUtils.formatNumber("1234567", "us")); + assertEquals("(800) 466-4114", PhoneNumberUtils.formatNumber("800-GOOG-114", "us")); + + } + + @SmallTest + public void testNormalizeNumber() { + assertEquals("6502910000", PhoneNumberUtils.normalizeNumber("650 2910000")); + assertEquals("1234567", PhoneNumberUtils.normalizeNumber("12,3#4*567")); + assertEquals("8004664114", PhoneNumberUtils.normalizeNumber("800-GOOG-114")); + } + } |
