summaryrefslogtreecommitdiff
path: root/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2015-12-07 15:54:05 +0000
committerPaul Duffin <paulduffin@google.com>2015-12-08 15:16:46 +0000
commit8fda25a631103958dd4e335fa1149913d0552e0a (patch)
tree795d2abf37f433cd1ebcd759b81b1b2fc0bf4d54 /libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
parentdd36b2bee8d8afca56f225dfa5f2d1d6147bd230 (diff)
downloadlibphonenumber-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.java59
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;