diff options
author | Paul Duffin <paulduffin@google.com> | 2015-12-07 15:54:05 +0000 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2015-12-08 15:16:46 +0000 |
commit | 8fda25a631103958dd4e335fa1149913d0552e0a (patch) | |
tree | 795d2abf37f433cd1ebcd759b81b1b2fc0bf4d54 /libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java | |
parent | dd36b2bee8d8afca56f225dfa5f2d1d6147bd230 (diff) | |
download | libphonenumber-8fda25a631103958dd4e335fa1149913d0552e0a.tar.gz |
Upgrade to version 7.2.1
This introduces a runtime dependency on nano protobuf. The
classes are jarjared from com.google.protobuf.nano into
com.android.protobuf.nano and will be built as part of the
ext library built in frameworks/base/Android.mk.
Bug: 24793335
Change-Id: Iba3b7c5ad7789d4a2abca5a174e978138699ef94
Diffstat (limited to 'libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java')
-rw-r--r-- | libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java b/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java index 456c8eda..6af473e6 100644 --- a/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java +++ b/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java @@ -16,8 +16,8 @@ package com.google.i18n.phonenumbers; -import com.google.i18n.phonenumbers.Phonemetadata.NumberFormat; -import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata; +import com.google.i18n.phonenumbers.nano.Phonemetadata.NumberFormat; +import com.google.i18n.phonenumbers.nano.Phonemetadata.PhoneMetadata; import java.util.ArrayList; import java.util.Iterator; @@ -61,8 +61,11 @@ public class AsYouTypeFormatter { // Character used when appropriate to separate a prefix, such as a long NDD or a country calling // code, from the national number. private static final char SEPARATOR_BEFORE_NATIONAL_NUMBER = ' '; - private static final PhoneMetadata EMPTY_METADATA = - new PhoneMetadata().setInternationalPrefix("NA"); + private static final PhoneMetadata EMPTY_METADATA; + static { + EMPTY_METADATA = new PhoneMetadata(); + EMPTY_METADATA.internationalPrefix = "NA"; + } private PhoneMetadata defaultMetadata; private PhoneMetadata currentMetadata; @@ -115,7 +118,7 @@ public class AsYouTypeFormatter { private StringBuilder nationalNumber = new StringBuilder(); private List<NumberFormat> possibleFormats = new ArrayList<NumberFormat>(); - // A cache for frequently used country-specific regular expressions. + // A cache for frequently used country-specific regular expressions. private RegexCache regexCache = new RegexCache(64); /** @@ -151,7 +154,7 @@ public class AsYouTypeFormatter { Iterator<NumberFormat> it = possibleFormats.iterator(); while (it.hasNext()) { NumberFormat numberFormat = it.next(); - String pattern = numberFormat.getPattern(); + String pattern = numberFormat.pattern; if (currentFormattingPattern.equals(pattern)) { return false; } @@ -159,7 +162,7 @@ public class AsYouTypeFormatter { currentFormattingPattern = pattern; shouldAddSpaceAfterNationalPrefix = NATIONAL_PREFIX_SEPARATORS_PATTERN.matcher( - numberFormat.getNationalPrefixFormattingRule()).find(); + numberFormat.nationalPrefixFormattingRule).find(); // With a new formatting template, the matched position using the old template needs to be // reset. lastMatchPosition = 0; @@ -173,17 +176,17 @@ public class AsYouTypeFormatter { } private void getAvailableFormats(String leadingDigits) { - List<NumberFormat> formatList = - (isCompleteNumber && currentMetadata.intlNumberFormatSize() > 0) - ? currentMetadata.intlNumberFormats() - : currentMetadata.numberFormats(); - boolean nationalPrefixIsUsedByCountry = currentMetadata.hasNationalPrefix(); - for (NumberFormat format : formatList) { + NumberFormat[] numberFormats = + (isCompleteNumber && currentMetadata.intlNumberFormat.length > 0) + ? currentMetadata.intlNumberFormat + : currentMetadata.numberFormat; + boolean nationalPrefixIsUsedByCountry = (!currentMetadata.nationalPrefix.equals("")); + for (NumberFormat format : numberFormats) { if (!nationalPrefixIsUsedByCountry || isCompleteNumber || - format.isNationalPrefixOptionalWhenFormatting() || + format.nationalPrefixOptionalWhenFormatting || PhoneNumberUtil.formattingRuleHasFirstGroupOnly( - format.getNationalPrefixFormattingRule())) { - if (isFormatEligible(format.getFormat())) { + format.nationalPrefixFormattingRule)) { + if (isFormatEligible(format.format)) { possibleFormats.add(format); } } @@ -200,14 +203,14 @@ public class AsYouTypeFormatter { Iterator<NumberFormat> it = possibleFormats.iterator(); while (it.hasNext()) { NumberFormat format = it.next(); - if (format.leadingDigitsPatternSize() == 0) { + if (format.leadingDigitsPattern.length == 0) { // Keep everything that isn't restricted by leading digits. continue; } int lastLeadingDigitsPattern = - Math.min(indexOfLeadingDigitsPattern, format.leadingDigitsPatternSize() - 1); + Math.min(indexOfLeadingDigitsPattern, format.leadingDigitsPattern.length - 1); Pattern leadingDigitsPattern = regexCache.getPatternForRegex( - format.getLeadingDigitsPattern(lastLeadingDigitsPattern)); + format.leadingDigitsPattern[lastLeadingDigitsPattern]); Matcher m = leadingDigitsPattern.matcher(leadingDigits); if (!m.lookingAt()) { it.remove(); @@ -216,7 +219,7 @@ public class AsYouTypeFormatter { } private boolean createFormattingTemplate(NumberFormat format) { - String numberPattern = format.getPattern(); + String numberPattern = format.pattern; // The formatter doesn't format numbers when numberPattern contains "|", e.g. // (20|3)\d{4}. In those cases we quickly return. @@ -230,7 +233,7 @@ public class AsYouTypeFormatter { // Replace any standalone digit (not the one in d{}) with \d numberPattern = STANDALONE_DIGIT_PATTERN.matcher(numberPattern).replaceAll("\\\\d"); formattingTemplate.setLength(0); - String tempTemplate = getFormattingTemplate(numberPattern, format.getFormat()); + String tempTemplate = getFormattingTemplate(numberPattern, format.format); if (tempTemplate.length() > 0) { formattingTemplate.append(tempTemplate); return true; @@ -428,12 +431,12 @@ public class AsYouTypeFormatter { */ String attemptToFormatAccruedDigits() { for (NumberFormat numberFormat : possibleFormats) { - Matcher m = regexCache.getPatternForRegex(numberFormat.getPattern()).matcher(nationalNumber); + Matcher m = regexCache.getPatternForRegex(numberFormat.pattern).matcher(nationalNumber); if (m.matches()) { shouldAddSpaceAfterNationalPrefix = NATIONAL_PREFIX_SEPARATORS_PATTERN.matcher( - numberFormat.getNationalPrefixFormattingRule()).find(); - String formattedNumber = m.replaceAll(numberFormat.getFormat()); + numberFormat.nationalPrefixFormattingRule).find(); + String formattedNumber = m.replaceAll(numberFormat.format); return appendNationalNumber(formattedNumber); } } @@ -526,7 +529,7 @@ public class AsYouTypeFormatter { // that national significant numbers in NANPA always start with [2-9] after the national prefix. // Numbers beginning with 1[01] can only be short/emergency numbers, which don't need the // national prefix. - return (currentMetadata.getCountryCode() == 1) && (nationalNumber.charAt(0) == '1') && + return (currentMetadata.countryCode == 1) && (nationalNumber.charAt(0) == '1') && (nationalNumber.charAt(1) != '0') && (nationalNumber.charAt(1) != '1'); } @@ -537,9 +540,9 @@ public class AsYouTypeFormatter { startOfNationalNumber = 1; prefixBeforeNationalNumber.append('1').append(SEPARATOR_BEFORE_NATIONAL_NUMBER); isCompleteNumber = true; - } else if (currentMetadata.hasNationalPrefixForParsing()) { + } else if (!currentMetadata.nationalPrefixForParsing.equals("")) { Pattern nationalPrefixForParsing = - regexCache.getPatternForRegex(currentMetadata.getNationalPrefixForParsing()); + regexCache.getPatternForRegex(currentMetadata.nationalPrefixForParsing); Matcher m = nationalPrefixForParsing.matcher(nationalNumber); // Since some national prefix patterns are entirely optional, check that a national prefix // could actually be extracted. @@ -567,7 +570,7 @@ public class AsYouTypeFormatter { private boolean attemptToExtractIdd() { Pattern internationalPrefix = regexCache.getPatternForRegex("\\" + PhoneNumberUtil.PLUS_SIGN + "|" + - currentMetadata.getInternationalPrefix()); + currentMetadata.internationalPrefix); Matcher iddMatcher = internationalPrefix.matcher(accruedInputWithoutFormatting); if (iddMatcher.lookingAt()) { isCompleteNumber = true; |