summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-11-26 16:50:28 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-11-26 16:50:29 +0000
commiteec8af34d3129d0f37c45ff8a82b4212724a6d79 (patch)
tree896866e44a3711f7ce0000680f62970ba80cd7b5
parent9ecee8b74bf330f20a902e4b974eddb7abedd627 (diff)
parent7a81979b0076f18b31b47b7df2beac29735f3a37 (diff)
downloadlibphonenumber-lollipop-wear-release.tar.gz
Merge "Update libphonenumber to v7.0.1"android-wear-5.0.0_r1lollipop-wear-release
-rw-r--r--README.android2
-rw-r--r--java/release_notes.txt90
-rw-r--r--java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java8
-rw-r--r--java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java3
-rw-r--r--java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java2
-rw-r--r--java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java94
-rw-r--r--java/src/com/android/i18n/phonenumbers/ShortNumberInfo.java278
-rw-r--r--java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java5
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ACbin239 -> 256 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AFbin338 -> 415 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AGbin511 -> 517 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AIbin445 -> 451 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AMbin615 -> 629 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ARbin3757 -> 3535 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ASbin442 -> 448 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AUbin1133 -> 1132 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BBbin423 -> 429 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BFbin388 -> 388 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BIbin321 -> 324 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BMbin461 -> 467 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BNbin284 -> 323 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BRbin1268 -> 1295 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BSbin609 -> 615 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BWbin602 -> 592 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CAbin725 -> 737 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CCbin493 -> 521 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CIbin411 -> 414 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CLbin1604 -> 1465 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CMbin405 -> 518 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CNbin3387 -> 3719 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CObin884 -> 888 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CRbin655 -> 700 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CXbin493 -> 521 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DEbin2239 -> 2239 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DKbin382 -> 384 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DMbin480 -> 486 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DObin744 -> 750 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZbin631 -> 631 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EEbin934 -> 938 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EHbin331 -> 333 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJbin422 -> 423 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FRbin686 -> 683 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GDbin541 -> 547 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GUbin805 -> 811 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IDbin1523 -> 1526 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ILbin1055 -> 1065 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_INbin3715 -> 3714 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IRbin1362 -> 681 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ISbin729 -> 711 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JMbin669 -> 675 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JPbin9454 -> 9446 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KEbin606 -> 593 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KGbin694 -> 669 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KHbin624 -> 627 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KNbin458 -> 464 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KRbin1412 -> 1454 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KWbin506 -> 510 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KYbin585 -> 591 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZbin849 -> 850 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LAbin515 -> 515 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LBbin546 -> 542 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LCbin501 -> 507 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MAbin738 -> 740 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MCbin476 -> 537 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MDbin665 -> 703 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MMbin1336 -> 1362 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MNbin707 -> 708 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MPbin591 -> 597 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MRbin414 -> 417 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MSbin398 -> 404 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NGbin1299 -> 1301 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NIbin321 -> 331 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NObin646 -> 646 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NPbin551 -> 608 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PAbin873 -> 875 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PFbin441 -> 415 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PGbin453 -> 475 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PHbin1093 -> 1093 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PKbin1745 -> 1749 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PRbin427 -> 433 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SAbin700 -> 718 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SBbin450 -> 457 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SNbin526 -> 538 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SObin509 -> 552 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SRbin459 -> 466 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SXbin446 -> 452 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TCbin489 -> 495 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TGbin324 -> 324 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_THbin557 -> 579 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJbin648 -> 649 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TNbin384 -> 385 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TObin452 -> 454 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TTbin550 -> 557 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UGbin594 -> 607 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_USbin1640 -> 1654 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VCbin522 -> 528 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VGbin515 -> 521 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VIbin629 -> 637 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZMbin383 -> 382 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_ALbin164 -> 221 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_CRbin350 -> 371 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FRbin523 -> 616 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KEbin253 -> 252 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_MCbin184 -> 187 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SAbin340 -> 342 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SNbin0 -> 153 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_USbin665 -> 667 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java23
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/1346_enbin0 -> 30 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/1782_enbin0 -> 36 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/1929_enbin0 -> 33 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/1930_enbin0 -> 32 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/1938_enbin0 -> 32 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/1959_enbin0 -> 36 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/237_enbin0 -> 1387 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/254_enbin373 -> 661 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/33_enbin65729 -> 58219 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/33_frbin197 -> 191 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/34_enbin1018 -> 1170 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/34_esbin124 -> 201 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/352_debin370 -> 1627 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/352_enbin716 -> 2220 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/352_frbin36 -> 37 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/355_enbin893 -> 5161 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/54_enbin5548 -> 5695 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/98_enbin3166 -> 646 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/98_fabin4171 -> 844 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/geocoding/data/configbin5349 -> 5436 bytes
-rw-r--r--java/src/com/android/i18n/phonenumbers/internal/MatcherApi.java38
-rw-r--r--java/src/com/android/i18n/phonenumbers/internal/RegexBasedMatcher.java52
-rw-r--r--java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java4
-rw-r--r--java/test/com/android/i18n/phonenumbers/ExampleNumbersTest.java21
-rw-r--r--java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java4
-rw-r--r--java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java29
-rw-r--r--java/test/com/android/i18n/phonenumbers/ShortNumberInfoTest.java123
-rw-r--r--java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BBbin0 -> 165 bytes
-rw-r--r--java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CAbin0 -> 165 bytes
-rw-r--r--java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CXbin162 -> 164 bytes
-rw-r--r--java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_FRbin273 -> 275 bytes
-rw-r--r--java/test/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java9
140 files changed, 591 insertions, 194 deletions
diff --git a/README.android b/README.android
index 4eb0e38e..131fd2e7 100644
--- a/README.android
+++ b/README.android
@@ -1,5 +1,5 @@
URL: http://code.google.com/p/libphonenumber/
-Version: 6.1 (r658)
+Version: 7.0.1 (r729)
License: Apache 2
Description: Google Phone Number Library.
Local Modification:
diff --git a/java/release_notes.txt b/java/release_notes.txt
index 19c73885..de374d9c 100644
--- a/java/release_notes.txt
+++ b/java/release_notes.txt
@@ -1,3 +1,93 @@
+Nov 25, 2014: libphonenumber-7.0.1
+* Metadata changes:
+ - New alternate formatting data for country calling code(s): 676
+ - Updated phone metadata for region code(s):
+ BI, CM, ID, IR, KR, LA, NP, TG, TH, TO
+ - New geocoding data for country calling code(s): 237 (en)
+ - Updated geocoding data for country calling code(s): 98 (en, fa)
+ - Updated carrier data for country calling code(s):
+ 237 (en), 257 (en), 856 (en), 977 (en)
+
+Oct 29, 2014: libphonenumber-7.0
+* Code changes:
+ - New APIs for ShortNumberInfo. The old APIs have been deprecated and will be
+ removed in an upcoming release.
+* Metadata changes:
+ - Updated phone metadata for region code(s):
+ AR, AU, CC, CI, CX, DZ, EE, IN, KZ, MC, SB, TJ, TT
+ - Updated short number metadata for region code(s): MC
+ - Updated geocoding data for country calling code(s): 34 (en, es), 54 (en)
+ - Updated carrier data for country calling code(s):
+ 7 (en), 61 (en), 91 (en), 225 (en), 677 (en), 967 (en), 992 (en), 1868 (en)
+
+Oct 13, 2014: libphonenumber-6.3.1
+* Metadata changes:
+ - Updated phone metadata for region code(s):
+ AC, AU, CR, DE, IL, MR, NO, SA, SR, UG
+ - Updated short number metadata for region code(s): CR
+ - Updated carrier data for country calling code(s):
+ 61 (en), 256 (en), 506 (en), 597 (en), 966 (en), 972 (en)
+
+Sep 25, 2014: libphonenumber-6.3
+* Code changes:
+ - Changing the offline geocoder to not return any country at all if the number
+ could belong to multiple countries
+ - Removing obsolete code that treated countries with no metadata as valid.
+* Metadata changes:
+ - New alternate formatting data for country calling code(s): 54, 91
+ - Updated phone metadata for region code(s):
+ AM, AR, BR, CA, CL, IL, IN, IR, IS, KE, NI, PF, SB, SN, TH, TN, US
+ - New geocoding data for country calling code(s):
+ 1782 (en), 1929 (en), 1930 (en), 1938 (en)
+ - Updated geocoding data for country calling code(s): 98 (en, fa)
+ - New carrier data for country calling code(s): 354 (en)
+ - Updated carrier data for country calling code(s):
+ 27 (en), 56 (en), 66 (en), 91 (en), 92 (en), 98 (en), 216 (en), 221 (en),
+ 254 (en), 374 (en), 505 (en), 677 (en), 972 (en)
+
+Aug 21, 2014: libphonenumber-6.2.2
+* Metadata changes:
+ - Updated phone metadata for region code(s): BN, CL, CO, DK, IN, SB, SO
+ - Updated short number metadata for region code(s): FR, SA, US
+ - Updated carrier data for country calling code(s):
+ 27 (en), 57 (en), 91 (en), 252 (en), 677 (en)
+
+Jul 28, 2014: libphonenumber-6.2.1
+* Metadata changes:
+ - Updated phone metadata for region code(s): BW, LB, MD, PA, PF, VI, ZM
+ - New carrier data for country calling code(s): 507 (en), 961 (en)
+ - Updated carrier data for country calling code(s): 267 (en), 373 (en)
+
+Jun 30, 2014: libphonenumber-6.2
+* Code changes:
+ - Better exclusion of dates when matching phone numbers from text.
+ - Handle phone input in RFC3966 with missing tel: prefix
+
+* Metadata changes:
+ - New alternate formatting data for country calling code(s): 95
+ - Updated phone metadata for region code(s):
+ AF, CN, EH, FJ, IN, JP, KE, KG, KW, MA, MM, PG, PK, SN, SO
+ - New short number metadata for region code(s): SN
+ - Updated short number metadata for region code(s): FR, KE
+ - Updated geocoding data for country calling code(s): 254 (en)
+ - New carrier data for country calling code(s): 95 (en)
+ - Updated carrier data for country calling code(s):
+ 92 (en), 93 (en), 212 (en), 221 (en), 254 (en), 675 (en), 679 (en), 965 (en),
+ 996 (en)
+
+Jun 06, 2014: libphonenumber-6.1.1
+* Metadata changes:
+ - Updated phone metadata for region code(s):
+ AF, AG, AI, AS, BB, BF, BM, BS, CA, CN, CR, DM, DO, DZ, FR, GD, GU, IN, JM,
+ KH, KN, KW, KY, LC, MN, MP, MS, NG, NI, PH, PR, SX, TC, TT, US, VC, VG, VI
+ - Updated short number metadata for region code(s): AL
+ - New geocoding data for country calling code(s): 1346 (en), 1959 (en)
+ - Updated geocoding data for country calling code(s):
+ 33 (en, fr), 352 (de, en, fr), 355 (en)
+ - New carrier data for country calling code(s): 505 (en)
+ - Updated carrier data for country calling code(s):
+ 63 (en), 91 (en), 93 (en), 234 (en)
+
May 08, 2014: libphonenumber-6.1
* Code changes:
- Adding MetadataLoader support to allow custom metadata loading from
diff --git a/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java b/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
index ada3134f..368848f6 100644
--- a/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
+++ b/java/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
@@ -26,9 +26,9 @@ import java.util.Set;
public class AlternateFormatsCountryCodeSet {
// A set of all country codes for which data is available.
static Set<Integer> getCountryCodeSet() {
- // The capacity is set to 52 as there are 39 different entries,
+ // The capacity is set to 57 as there are 43 different entries,
// and this offers a load factor of roughly 0.75.
- Set<Integer> countryCodeSet = new HashSet<Integer>(52);
+ Set<Integer> countryCodeSet = new HashSet<Integer>(57);
countryCodeSet.add(7);
countryCodeSet.add(27);
@@ -39,6 +39,7 @@ public class AlternateFormatsCountryCodeSet {
countryCodeSet.add(43);
countryCodeSet.add(44);
countryCodeSet.add(49);
+ countryCodeSet.add(54);
countryCodeSet.add(55);
countryCodeSet.add(58);
countryCodeSet.add(61);
@@ -48,7 +49,9 @@ public class AlternateFormatsCountryCodeSet {
countryCodeSet.add(81);
countryCodeSet.add(84);
countryCodeSet.add(90);
+ countryCodeSet.add(91);
countryCodeSet.add(94);
+ countryCodeSet.add(95);
countryCodeSet.add(255);
countryCodeSet.add(350);
countryCodeSet.add(351);
@@ -64,6 +67,7 @@ public class AlternateFormatsCountryCodeSet {
countryCodeSet.add(506);
countryCodeSet.add(595);
countryCodeSet.add(675);
+ countryCodeSet.add(676);
countryCodeSet.add(679);
countryCodeSet.add(855);
countryCodeSet.add(971);
diff --git a/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java b/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
index 790e66b3..7e55e026 100644
--- a/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
+++ b/java/src/com/android/i18n/phonenumbers/AsYouTypeFormatter.java
@@ -181,7 +181,8 @@ public class AsYouTypeFormatter {
for (NumberFormat format : formatList) {
if (!nationalPrefixIsUsedByCountry || isCompleteNumber ||
format.isNationalPrefixOptionalWhenFormatting() ||
- phoneUtil.formattingRuleHasFirstGroupOnly(format.getNationalPrefixFormattingRule())) {
+ PhoneNumberUtil.formattingRuleHasFirstGroupOnly(
+ format.getNationalPrefixFormattingRule())) {
if (isFormatEligible(format.getFormat())) {
possibleFormats.add(format);
}
diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
index 149e863b..868f7d4c 100644
--- a/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
+++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
@@ -78,7 +78,7 @@ final class PhoneNumberMatcher implements Iterator<PhoneNumberMatch> {
* trailing ":\d\d" -- that is covered by TIME_STAMPS_SUFFIX.
*/
private static final Pattern TIME_STAMPS =
- Pattern.compile("[12]\\d{3}[-/]?[01]\\d[-/]?[0-3]\\d [0-2]\\d$");
+ Pattern.compile("[12]\\d{3}[-/]?[01]\\d[-/]?[0-3]\\d +[0-2]\\d$");
private static final Pattern TIME_STAMPS_SUFFIX = Pattern.compile(":[0-5]\\d");
/**
diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
index bd36708e..90b68957 100644
--- a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
@@ -539,8 +539,8 @@ public class PhoneNumberUtil {
private final Map<Integer, List<String>> countryCallingCodeToRegionCodeMap;
// The set of regions that share country calling code 1.
- // There are roughly 26 regions and we set the initial capacity of the HashSet to 35 to offer a
- // load factor of roughly 0.75.
+ // There are roughly 26 regions.
+ // We set the initial capacity of the HashSet to 35 to offer a load factor of roughly 0.75.
private final Set<String> nanpaRegions = new HashSet<String>(35);
// A mapping from a region code to the PhoneMetadata for that region.
@@ -577,7 +577,7 @@ public class PhoneNumberUtil {
private final MetadataLoader metadataLoader;
/**
- * This class implements a singleton, so the only constructor is private.
+ * This class implements a singleton, the constructor is only visible to facilitate testing.
*/
// @VisibleForTesting
PhoneNumberUtil(String filePrefix, MetadataLoader metadataLoader,
@@ -803,11 +803,11 @@ public class PhoneNumberUtil {
}
/**
- * Gets the length of the geographical area code from the {@code nationalNumber_} field of the
- * PhoneNumber object passed in, so that clients could use it to split a national significant
- * number into geographical area code and subscriber number. It works in such a way that the
- * resultant subscriber number should be diallable, at least on some devices. An example of how
- * this could be used:
+ * Gets the length of the geographical area code from the
+ * PhoneNumber object passed in, so that clients could use it
+ * to split a national significant number into geographical area code and subscriber number. It
+ * works in such a way that the resultant subscriber number should be diallable, at least on some
+ * devices. An example of how this could be used:
*
* <pre>
* PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -838,9 +838,10 @@ public class PhoneNumberUtil {
* entities
* <li> some geographical numbers have no area codes.
* </ul>
- * @param number the PhoneNumber object for which clients want to know the length of the area
- * code.
- * @return the length of area code of the PhoneNumber object passed in.
+ * @param number the PhoneNumber object for which clients
+ * want to know the length of the area code.
+ * @return the length of area code of the PhoneNumber object
+ * passed in.
*/
public int getLengthOfGeographicalAreaCode(PhoneNumber number) {
PhoneMetadata metadata = getMetadataForRegion(getRegionCodeForNumber(number));
@@ -861,11 +862,12 @@ public class PhoneNumberUtil {
}
/**
- * Gets the length of the national destination code (NDC) from the PhoneNumber object passed in,
- * so that clients could use it to split a national significant number into NDC and subscriber
- * number. The NDC of a phone number is normally the first group of digit(s) right after the
- * country calling code when the number is formatted in the international format, if there is a
- * subscriber number part that follows. An example of how this could be used:
+ * Gets the length of the national destination code (NDC) from the
+ * PhoneNumber object passed in, so that clients could use it
+ * to split a national significant number into NDC and subscriber number. The NDC of a phone
+ * number is normally the first group of digit(s) right after the country calling code when the
+ * number is formatted in the international format, if there is a subscriber number part that
+ * follows. An example of how this could be used:
*
* <pre>
* PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -888,8 +890,10 @@ public class PhoneNumberUtil {
* Refer to the unittests to see the difference between this function and
* {@link #getLengthOfGeographicalAreaCode}.
*
- * @param number the PhoneNumber object for which clients want to know the length of the NDC.
- * @return the length of NDC of the PhoneNumber object passed in.
+ * @param number the PhoneNumber object for which clients
+ * want to know the length of the NDC.
+ * @return the length of NDC of the PhoneNumber object
+ * passed in.
*/
public int getLengthOfNationalDestinationCode(PhoneNumber number) {
PhoneNumber copiedProto;
@@ -1047,6 +1051,11 @@ public class PhoneNumberUtil {
* Tests whether a phone number has a geographical association. It checks if the number is
* associated to a certain region in the country where it belongs to. Note that this doesn't
* verify if the number is actually in use.
+ *
+ * A similar method is implemented as PhoneNumberOfflineGeocoder.canBeGeocoded, which performs a
+ * looser check, since it only prevents cases where prefixes overlap for geocodable and
+ * non-geocodable numbers. Also, if new phone number types were added, we should check if this
+ * other method should be updated too.
*/
boolean isNumberGeographical(PhoneNumber phoneNumber) {
PhoneNumberType numberType = getNumberType(phoneNumber);
@@ -1111,6 +1120,7 @@ public class PhoneNumberUtil {
formattedNumber.setLength(0);
int countryCallingCode = number.getCountryCode();
String nationalSignificantNumber = getNationalSignificantNumber(number);
+
if (numberFormat == PhoneNumberFormat.E164) {
// Early exit for E164 case (even if the country calling code is invalid) since no formatting
// of the national number needs to be applied. Extensions are not formatted.
@@ -1337,7 +1347,8 @@ public class PhoneNumberUtil {
// CL fixed line numbers need the national prefix when dialing in the national format,
// but don't have it when used for display. The reverse is true for mobile numbers.
// As a result, we output them in the international format to make it work.
- ((regionCode.equals("MX") || regionCode.equals("CL")) && isFixedLineOrMobile)) &&
+ ((regionCode.equals("MX") || regionCode.equals("CL")) &&
+ isFixedLineOrMobile)) &&
canBeInternationallyDialled(numberNoExt)) {
formattedNumber = format(numberNoExt, PhoneNumberFormat.INTERNATIONAL);
} else {
@@ -1508,7 +1519,8 @@ public class PhoneNumberUtil {
}
// When the format we apply to this number doesn't contain national prefix, we can just
// return the national format.
- // TODO: Refactor the code below with the code in isNationalPrefixPresentIfRequired.
+ // TODO: Refactor the code below with the code in
+ // isNationalPrefixPresentIfRequired.
String candidateNationalPrefixRule = formatRule.getNationalPrefixFormattingRule();
// We assume that the first-group symbol will never be _before_ the national prefix.
int indexOfFirstGroup = candidateNationalPrefixRule.indexOf("$1");
@@ -1969,9 +1981,7 @@ public class PhoneNumberUtil {
}
private PhoneNumberType getNumberTypeHelper(String nationalNumber, PhoneMetadata metadata) {
- PhoneNumberDesc generalNumberDesc = metadata.getGeneralDesc();
- if (!generalNumberDesc.hasNationalNumberPattern() ||
- !isNumberMatchingDesc(nationalNumber, generalNumberDesc)) {
+ if (!isNumberMatchingDesc(nationalNumber, metadata.getGeneralDesc())) {
return PhoneNumberType.UNKNOWN;
}
@@ -2102,16 +2112,7 @@ public class PhoneNumberUtil {
// match that of the region code.
return false;
}
- PhoneNumberDesc generalNumDesc = metadata.getGeneralDesc();
String nationalSignificantNumber = getNationalSignificantNumber(number);
-
- // For regions where we don't have metadata for PhoneNumberDesc, we treat any number passed in
- // as a valid number if its national significant number is between the minimum and maximum
- // lengths defined by ITU for a national significant number.
- if (!generalNumDesc.hasNationalNumberPattern()) {
- int numberLength = nationalSignificantNumber.length();
- return numberLength > MIN_LENGTH_FOR_NSN && numberLength <= MAX_LENGTH_FOR_NSN;
- }
return getNumberTypeHelper(nationalSignificantNumber, metadata) != PhoneNumberType.UNKNOWN;
}
@@ -2369,21 +2370,8 @@ public class PhoneNumberUtil {
String regionCode = getRegionCodeForCountryCode(countryCode);
// Metadata cannot be null because the country calling code is valid.
PhoneMetadata metadata = getMetadataForRegionOrCallingCode(countryCode, regionCode);
- PhoneNumberDesc generalNumDesc = metadata.getGeneralDesc();
- // Handling case of numbers with no metadata.
- if (!generalNumDesc.hasNationalNumberPattern()) {
- logger.log(Level.FINER, "Checking if number is possible with incomplete metadata.");
- int numberLength = nationalNumber.length();
- if (numberLength < MIN_LENGTH_FOR_NSN) {
- return ValidationResult.TOO_SHORT;
- } else if (numberLength > MAX_LENGTH_FOR_NSN) {
- return ValidationResult.TOO_LONG;
- } else {
- return ValidationResult.IS_POSSIBLE;
- }
- }
Pattern possibleNumberPattern =
- regexCache.getPatternForRegex(generalNumDesc.getPossibleNumberPattern());
+ regexCache.getPatternForRegex(metadata.getGeneralDesc().getPossibleNumberPattern());
return testNumberLengthAgainstPattern(possibleNumberPattern, nationalNumber);
}
@@ -2731,7 +2719,7 @@ public class PhoneNumberUtil {
private boolean checkRegionForParsing(String numberToParse, String defaultRegion) {
if (!isValidRegionCode(defaultRegion)) {
// If the number is null or empty, we can't infer the region.
- if (numberToParse == null || numberToParse.length() == 0 ||
+ if ((numberToParse == null) || (numberToParse.length() == 0) ||
!PLUS_CHARS_PATTERN.matcher(numberToParse).lookingAt()) {
return false;
}
@@ -3009,9 +2997,13 @@ public class PhoneNumberUtil {
}
// Now append everything between the "tel:" prefix and the phone-context. This should include
- // the national number, an optional extension or isdn-subaddress component.
- nationalNumber.append(numberToParse.substring(
- numberToParse.indexOf(RFC3966_PREFIX) + RFC3966_PREFIX.length(), indexOfPhoneContext));
+ // the national number, an optional extension or isdn-subaddress component. Note we also
+ // handle the case when "tel:" is missing, as we have seen in some of the phone number inputs.
+ // In that case, we append everything from the beginning.
+ int indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX);
+ int indexOfNationalNumber = (indexOfRfc3966Prefix >= 0) ?
+ indexOfRfc3966Prefix + RFC3966_PREFIX.length() : 0;
+ nationalNumber.append(numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext));
} else {
// Extract a possible number from the string passed in (this strips leading characters that
// could not be the start of a phone number.)
@@ -3204,7 +3196,7 @@ public class PhoneNumberUtil {
/**
* Returns true if the number can be dialled from outside the region, or unknown. If the number
* can only be dialled from within the region, returns false. Does not check the number is a valid
- * number.
+ * number. Note that, at the moment, this method does not handle short numbers.
* TODO: Make this method public when we have enough metadata to make it worthwhile.
*
* @param number the phone-number for which we want to know whether it is diallable from
diff --git a/java/src/com/android/i18n/phonenumbers/ShortNumberInfo.java b/java/src/com/android/i18n/phonenumbers/ShortNumberInfo.java
index 80332ad2..cb84d026 100644
--- a/java/src/com/android/i18n/phonenumbers/ShortNumberInfo.java
+++ b/java/src/com/android/i18n/phonenumbers/ShortNumberInfo.java
@@ -16,13 +16,18 @@
package com.android.i18n.phonenumbers;
+import com.android.i18n.phonenumbers.internal.MatcherApi;
+import com.android.i18n.phonenumbers.internal.RegexBasedMatcher;
import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
import com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -40,7 +45,7 @@ public class ShortNumberInfo {
private static final Logger logger = Logger.getLogger(ShortNumberInfo.class.getName());
private static final ShortNumberInfo INSTANCE =
- new ShortNumberInfo(PhoneNumberUtil.getInstance());
+ new ShortNumberInfo(RegexBasedMatcher.create());
// In these countries, if extra digits are added to an emergency number, it no longer connects
// to the emergency service.
@@ -65,11 +70,34 @@ public class ShortNumberInfo {
return INSTANCE;
}
- private final PhoneNumberUtil phoneUtil;
+ // MatcherApi supports the basic matching method for checking if a given national number matches
+ // a national number patten or a possible number patten defined in the given
+ // {@code PhoneNumberDesc}.
+ private final MatcherApi matcherApi;
+
+ // A mapping from a country calling code to the region codes which denote the region represented
+ // by that country calling code. In the case of multiple regions sharing a calling code, such as
+ // the NANPA regions, the one indicated with "isMainCountryForCode" in the metadata should be
+ // first.
+ private final Map<Integer, List<String>> countryCallingCodeToRegionCodeMap;
// @VisibleForTesting
- ShortNumberInfo(PhoneNumberUtil util) {
- phoneUtil = util;
+ ShortNumberInfo(MatcherApi matcherApi) {
+ this.matcherApi = matcherApi;
+ // TODO: Create ShortNumberInfo for a given map
+ this.countryCallingCodeToRegionCodeMap =
+ CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap();
+ }
+
+ /**
+ * Returns a list with the region codes that match the specific country calling code. For
+ * non-geographical country calling codes, the region code 001 is returned. Also, in the case
+ * of no region code being found, an empty list is returned.
+ */
+ private List<String> getRegionCodesForCountryCode(int countryCallingCode) {
+ List<String> regionCodes = countryCallingCodeToRegionCodeMap.get(countryCallingCode);
+ return Collections.unmodifiableList(regionCodes == null ? new ArrayList<String>(0)
+ : regionCodes);
}
/**
@@ -80,32 +108,55 @@ public class ShortNumberInfo {
* @param shortNumber the short number to check as a string
* @param regionDialingFrom the region from which the number is dialed
* @return whether the number is a possible short number
+ * @deprecated Anyone who was using it and passing in a string with whitespace (or other
+ * formatting characters) would have been getting the wrong result. You should parse
+ * the string to PhoneNumber and use the method
+ * {@code #isPossibleShortNumberForRegion(PhoneNumber, String)}. This method will be
+ * removed in the next release.
*/
+ @Deprecated
public boolean isPossibleShortNumberForRegion(String shortNumber, String regionDialingFrom) {
PhoneMetadata phoneMetadata =
MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return false;
}
- PhoneNumberDesc generalDesc = phoneMetadata.getGeneralDesc();
- return phoneUtil.isNumberPossibleForDesc(shortNumber, generalDesc);
+ return matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.getGeneralDesc());
+ }
+
+ /**
+ * Check whether a short number is a possible number when dialed from the given region. This
+ * provides a more lenient check than {@link #isValidShortNumberForRegion}.
+ *
+ * @param number the short number to check
+ * @param regionDialingFrom the region from which the number is dialed
+ * @return whether the number is a possible short number
+ */
+ public boolean isPossibleShortNumberForRegion(PhoneNumber number, String regionDialingFrom) {
+ PhoneMetadata phoneMetadata =
+ MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ if (phoneMetadata == null) {
+ return false;
+ }
+ return matcherApi.matchesPossibleNumber(getNationalSignificantNumber(number),
+ phoneMetadata.getGeneralDesc());
}
/**
* Check whether a short number is a possible number. If a country calling code is shared by
* multiple regions, this returns true if it's possible in any of them. This provides a more
* lenient check than {@link #isValidShortNumber}. See {@link
- * #isPossibleShortNumberForRegion(String, String)} for details.
+ * #isPossibleShortNumberForRegion(PhoneNumber, String)} for details.
*
* @param number the short number to check
* @return whether the number is a possible short number
*/
public boolean isPossibleShortNumber(PhoneNumber number) {
- List<String> regionCodes = phoneUtil.getRegionCodesForCountryCode(number.getCountryCode());
- String shortNumber = phoneUtil.getNationalSignificantNumber(number);
+ List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
+ String shortNumber = getNationalSignificantNumber(number);
for (String region : regionCodes) {
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(region);
- if (phoneUtil.isNumberPossibleForDesc(shortNumber, phoneMetadata.getGeneralDesc())) {
+ if (matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.getGeneralDesc())) {
return true;
}
}
@@ -120,7 +171,13 @@ public class ShortNumberInfo {
* @param shortNumber the short number to check as a string
* @param regionDialingFrom the region from which the number is dialed
* @return whether the short number matches a valid pattern
+ * @deprecated Anyone who was using it and passing in a string with whitespace (or other
+ * formatting characters) would have been getting the wrong result. You should parse
+ * the string to PhoneNumber and use the method
+ * {@code #isValidShortNumberForRegion(PhoneNumber, String)}. This method will be
+ * removed in the next release.
*/
+ @Deprecated
public boolean isValidShortNumberForRegion(String shortNumber, String regionDialingFrom) {
PhoneMetadata phoneMetadata =
MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
@@ -128,38 +185,55 @@ public class ShortNumberInfo {
return false;
}
PhoneNumberDesc generalDesc = phoneMetadata.getGeneralDesc();
- if (!generalDesc.hasNationalNumberPattern() ||
- !phoneUtil.isNumberMatchingDesc(shortNumber, generalDesc)) {
+ if (!matchesPossibleNumberAndNationalNumber(shortNumber, generalDesc)) {
return false;
}
PhoneNumberDesc shortNumberDesc = phoneMetadata.getShortCode();
- if (!shortNumberDesc.hasNationalNumberPattern()) {
- logger.log(Level.WARNING, "No short code national number pattern found for region: " +
- regionDialingFrom);
+ return matchesPossibleNumberAndNationalNumber(shortNumber, shortNumberDesc);
+ }
+
+ /**
+ * Tests whether a short number matches a valid pattern in a region. Note that this doesn't verify
+ * the number is actually in use, which is impossible to tell by just looking at the number
+ * itself.
+ *
+ * @param number the short number for which we want to test the validity
+ * @param regionDialingFrom the region from which the number is dialed
+ * @return whether the short number matches a valid pattern
+ */
+ public boolean isValidShortNumberForRegion(PhoneNumber number, String regionDialingFrom) {
+ PhoneMetadata phoneMetadata =
+ MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ if (phoneMetadata == null) {
+ return false;
+ }
+ String shortNumber = getNationalSignificantNumber(number);
+ PhoneNumberDesc generalDesc = phoneMetadata.getGeneralDesc();
+ if (!matchesPossibleNumberAndNationalNumber(shortNumber, generalDesc)) {
return false;
}
- return phoneUtil.isNumberMatchingDesc(shortNumber, shortNumberDesc);
+ PhoneNumberDesc shortNumberDesc = phoneMetadata.getShortCode();
+ return matchesPossibleNumberAndNationalNumber(shortNumber, shortNumberDesc);
}
/**
* Tests whether a short number matches a valid pattern. If a country calling code is shared by
* multiple regions, this returns true if it's valid in any of them. Note that this doesn't verify
* the number is actually in use, which is impossible to tell by just looking at the number
- * itself. See {@link #isValidShortNumberForRegion(String, String)} for details.
+ * itself. See {@link #isValidShortNumberForRegion(PhoneNumber, String)} for details.
*
* @param number the short number for which we want to test the validity
* @return whether the short number matches a valid pattern
*/
public boolean isValidShortNumber(PhoneNumber number) {
- List<String> regionCodes = phoneUtil.getRegionCodesForCountryCode(number.getCountryCode());
- String shortNumber = phoneUtil.getNationalSignificantNumber(number);
+ List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
String regionCode = getRegionCodeForShortNumberFromRegionList(number, regionCodes);
if (regionCodes.size() > 1 && regionCode != null) {
// If a matching region had been found for the phone number from among two or more regions,
// then we have already implicitly verified its validity for that region.
return true;
}
- return isValidShortNumberForRegion(shortNumber, regionCode);
+ return isValidShortNumberForRegion(number, regionCode);
}
/**
@@ -183,7 +257,13 @@ public class ShortNumberInfo {
* @return the expected cost category for that region of the short number. Returns UNKNOWN_COST if
* the number does not match a cost category. Note that an invalid number may match any cost
* category.
+ * @deprecated Anyone who was using it and passing in a string with whitespace (or other
+ * formatting characters) would have been getting the wrong result. You should parse
+ * the string to PhoneNumber and use the method
+ * {@code #getExpectedCostForRegion(PhoneNumber, String)}. This method will be
+ * removed in the next release.
*/
+ @Deprecated
public ShortNumberCost getExpectedCostForRegion(String shortNumber, String regionDialingFrom) {
// Note that regionDialingFrom may be null, in which case phoneMetadata will also be null.
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(
@@ -194,13 +274,64 @@ public class ShortNumberInfo {
// The cost categories are tested in order of decreasing expense, since if for some reason the
// patterns overlap the most expensive matching cost category should be returned.
- if (phoneUtil.isNumberMatchingDesc(shortNumber, phoneMetadata.getPremiumRate())) {
+ if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getPremiumRate())) {
+ return ShortNumberCost.PREMIUM_RATE;
+ }
+ if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getStandardRate())) {
+ return ShortNumberCost.STANDARD_RATE;
+ }
+ if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getTollFree())) {
+ return ShortNumberCost.TOLL_FREE;
+ }
+ if (isEmergencyNumber(shortNumber, regionDialingFrom)) {
+ // Emergency numbers are implicitly toll-free.
+ return ShortNumberCost.TOLL_FREE;
+ }
+ return ShortNumberCost.UNKNOWN_COST;
+ }
+
+ /**
+ * Gets the expected cost category of a short number when dialed from a region (however, nothing
+ * is implied about its validity). If it is important that the number is valid, then its validity
+ * must first be checked using {@link #isValidShortNumberForRegion}. Note that emergency numbers
+ * are always considered toll-free. Example usage:
+ * <pre>{@code
+ * // The region for which the number was parsed and the region we subsequently check against
+ * // need not be the same. Here we parse the number in the US and check it for Canada.
+ * PhoneNumber number = phoneUtil.parse("110", "US");
+ * ...
+ * String regionCode = "CA";
+ * ShortNumberInfo shortInfo = ShortNumberInfo.getInstance();
+ * if (shortInfo.isValidShortNumberForRegion(shortNumber, regionCode)) {
+ * ShortNumberCost cost = shortInfo.getExpectedCostForRegion(number, regionCode);
+ * // Do something with the cost information here.
+ * }}</pre>
+ *
+ * @param number the short number for which we want to know the expected cost category
+ * @param regionDialingFrom the region from which the number is dialed
+ * @return the expected cost category for that region of the short number. Returns UNKNOWN_COST if
+ * the number does not match a cost category. Note that an invalid number may match any cost
+ * category.
+ */
+ public ShortNumberCost getExpectedCostForRegion(PhoneNumber number, String regionDialingFrom) {
+ // Note that regionDialingFrom may be null, in which case phoneMetadata will also be null.
+ PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(
+ regionDialingFrom);
+ if (phoneMetadata == null) {
+ return ShortNumberCost.UNKNOWN_COST;
+ }
+
+ String shortNumber = getNationalSignificantNumber(number);
+
+ // The cost categories are tested in order of decreasing expense, since if for some reason the
+ // patterns overlap the most expensive matching cost category should be returned.
+ if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getPremiumRate())) {
return ShortNumberCost.PREMIUM_RATE;
}
- if (phoneUtil.isNumberMatchingDesc(shortNumber, phoneMetadata.getStandardRate())) {
+ if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getStandardRate())) {
return ShortNumberCost.STANDARD_RATE;
}
- if (phoneUtil.isNumberMatchingDesc(shortNumber, phoneMetadata.getTollFree())) {
+ if (matchesPossibleNumberAndNationalNumber(shortNumber, phoneMetadata.getTollFree())) {
return ShortNumberCost.TOLL_FREE;
}
if (isEmergencyNumber(shortNumber, regionDialingFrom)) {
@@ -213,36 +344,35 @@ public class ShortNumberInfo {
/**
* Gets the expected cost category of a short number (however, nothing is implied about its
* validity). If the country calling code is unique to a region, this method behaves exactly the
- * same as {@link #getExpectedCostForRegion(String, String)}. However, if the country calling
- * code is shared by multiple regions, then it returns the highest cost in the sequence
+ * same as {@link #getExpectedCostForRegion(PhoneNumber, String)}. However, if the country
+ * calling code is shared by multiple regions, then it returns the highest cost in the sequence
* PREMIUM_RATE, UNKNOWN_COST, STANDARD_RATE, TOLL_FREE. The reason for the position of
* UNKNOWN_COST in this order is that if a number is UNKNOWN_COST in one region but STANDARD_RATE
* or TOLL_FREE in another, its expected cost cannot be estimated as one of the latter since it
* might be a PREMIUM_RATE number.
- *
- * For example, if a number is STANDARD_RATE in the US, but TOLL_FREE in Canada, the expected cost
- * returned by this method will be STANDARD_RATE, since the NANPA countries share the same country
- * calling code.
- *
+ * <p>
+ * For example, if a number is STANDARD_RATE in the US, but TOLL_FREE in Canada, the expected
+ * cost returned by this method will be STANDARD_RATE, since the NANPA countries share the same
+ * country calling code.
+ * <p>
* Note: If the region from which the number is dialed is known, it is highly preferable to call
- * {@link #getExpectedCostForRegion(String, String)} instead.
+ * {@link #getExpectedCostForRegion(PhoneNumber, String)} instead.
*
* @param number the short number for which we want to know the expected cost category
* @return the highest expected cost category of the short number in the region(s) with the given
* country calling code
*/
public ShortNumberCost getExpectedCost(PhoneNumber number) {
- List<String> regionCodes = phoneUtil.getRegionCodesForCountryCode(number.getCountryCode());
+ List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
if (regionCodes.size() == 0) {
return ShortNumberCost.UNKNOWN_COST;
}
- String shortNumber = phoneUtil.getNationalSignificantNumber(number);
if (regionCodes.size() == 1) {
- return getExpectedCostForRegion(shortNumber, regionCodes.get(0));
+ return getExpectedCostForRegion(number, regionCodes.get(0));
}
ShortNumberCost cost = ShortNumberCost.TOLL_FREE;
for (String regionCode : regionCodes) {
- ShortNumberCost costForRegion = getExpectedCostForRegion(shortNumber, regionCode);
+ ShortNumberCost costForRegion = getExpectedCostForRegion(number, regionCode);
switch (costForRegion) {
case PREMIUM_RATE:
return ShortNumberCost.PREMIUM_RATE;
@@ -274,11 +404,11 @@ public class ShortNumberInfo {
} else if (regionCodes.size() == 1) {
return regionCodes.get(0);
}
- String nationalNumber = phoneUtil.getNationalSignificantNumber(number);
+ String nationalNumber = getNationalSignificantNumber(number);
for (String regionCode : regionCodes) {
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
- if (phoneMetadata != null &&
- phoneUtil.isNumberMatchingDesc(nationalNumber, phoneMetadata.getShortCode())) {
+ if (phoneMetadata != null
+ && matchesPossibleNumberAndNationalNumber(nationalNumber, phoneMetadata.getShortCode())) {
// The number is valid for this region.
return regionCode;
}
@@ -349,11 +479,14 @@ public class ShortNumberInfo {
}
/**
- * Returns true if the number might be used to connect to an emergency service in the given
- * region.
- *
- * This method takes into account cases where the number might contain formatting, or might have
- * additional digits appended (when it is okay to do that in the region specified).
+ * Returns true if the given number, exactly as dialed, might be used to connect to an emergency
+ * service in the given region.
+ * <p>
+ * This method accepts a string, rather than a PhoneNumber, because it needs to distinguish
+ * cases such as "+1 911" and "911", where the former may not connect to an emergency service in
+ * all cases but the latter would. This method takes into account cases where the number might
+ * contain formatting, or might have additional digits appended (when it is okay to do that in
+ * the specified region).
*
* @param number the phone number to test
* @param regionCode the region where the phone number is being dialed
@@ -364,10 +497,12 @@ public class ShortNumberInfo {
}
/**
- * Returns true if the number exactly matches an emergency service number in the given region.
- *
+ * Returns true if the given number exactly matches an emergency service number in the given
+ * region.
+ * <p>
* This method takes into account cases where the number might contain formatting, but doesn't
- * allow additional digits to be appended.
+ * allow additional digits to be appended. Note that {@code isEmergencyNumber(number, region)}
+ * implies {@code connectsToEmergencyNumber(number, region)}.
*
* @param number the phone number to test
* @param regionCode the region where the phone number is being dialed
@@ -390,12 +525,13 @@ public class ShortNumberInfo {
if (metadata == null || !metadata.hasEmergency()) {
return false;
}
- Pattern emergencyNumberPattern =
- Pattern.compile(metadata.getEmergency().getNationalNumberPattern());
+
String normalizedNumber = PhoneNumberUtil.normalizeDigitsOnly(number);
- return (!allowPrefixMatch || REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.contains(regionCode))
- ? emergencyNumberPattern.matcher(normalizedNumber).matches()
- : emergencyNumberPattern.matcher(normalizedNumber).lookingAt();
+ PhoneNumberDesc emergencyDesc = metadata.getEmergency();
+ boolean allowPrefixMatchForRegion =
+ allowPrefixMatch && !REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.contains(regionCode);
+ return matcherApi.matchesNationalNumber(normalizedNumber, emergencyDesc,
+ allowPrefixMatchForRegion);
}
/**
@@ -409,11 +545,43 @@ public class ShortNumberInfo {
* number).
*/
public boolean isCarrierSpecific(PhoneNumber number) {
- List<String> regionCodes = phoneUtil.getRegionCodesForCountryCode(number.getCountryCode());
+ List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
String regionCode = getRegionCodeForShortNumberFromRegionList(number, regionCodes);
- String nationalNumber = phoneUtil.getNationalSignificantNumber(number);
+ String nationalNumber = getNationalSignificantNumber(number);
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
- return (phoneMetadata != null) &&
- (phoneUtil.isNumberMatchingDesc(nationalNumber, phoneMetadata.getCarrierSpecific()));
+ return (phoneMetadata != null)
+ && (matchesPossibleNumberAndNationalNumber(nationalNumber,
+ phoneMetadata.getCarrierSpecific()));
+ }
+
+ /**
+ * Gets the national significant number of the a phone number. Note a national significant number
+ * doesn't contain a national prefix or any formatting.
+ * <p>
+ * This is a temporary duplicate of the {@code getNationalSignificantNumber} method from
+ * {@code PhoneNumberUtil}. Ultimately a canonical static version should exist in a separate
+ * utility class (to prevent {@code ShortNumberInfo} needing to depend on PhoneNumberUtil).
+ *
+ * @param number the phone number for which the national significant number is needed
+ * @return the national significant number of the PhoneNumber object passed in
+ */
+ private static String getNationalSignificantNumber(PhoneNumber number) {
+ // If leading zero(s) have been set, we prefix this now. Note this is not a national prefix.
+ StringBuilder nationalNumber = new StringBuilder();
+ if (number.isItalianLeadingZero()) {
+ char[] zeros = new char[number.getNumberOfLeadingZeros()];
+ Arrays.fill(zeros, '0');
+ nationalNumber.append(new String(zeros));
+ }
+ nationalNumber.append(number.getNationalNumber());
+ return nationalNumber.toString();
+ }
+
+ // TODO: Once we have benchmarked ShortNumberInfo, consider if it is worth keeping
+ // this performance optimization, and if so move this into the matcher implementation.
+ private boolean matchesPossibleNumberAndNationalNumber(String number,
+ PhoneNumberDesc numberDesc) {
+ return matcherApi.matchesPossibleNumber(number, numberDesc)
+ && matcherApi.matchesNationalNumber(number, numberDesc, false);
}
}
diff --git a/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java b/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
index 1fa6aba4..dbd5e5ce 100644
--- a/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
+++ b/java/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
@@ -26,9 +26,9 @@ import java.util.Set;
public class ShortNumbersRegionCodeSet {
// A set of all region codes for which data is available.
static Set<String> getRegionCodeSet() {
- // The capacity is set to 308 as there are 231 different entries,
+ // The capacity is set to 309 as there are 232 different entries,
// and this offers a load factor of roughly 0.75.
- Set<String> regionCodeSet = new HashSet<String>(308);
+ Set<String> regionCodeSet = new HashSet<String>(309);
regionCodeSet.add("AC");
regionCodeSet.add("AD");
@@ -222,6 +222,7 @@ public class ShortNumbersRegionCodeSet {
regionCodeSet.add("SK");
regionCodeSet.add("SL");
regionCodeSet.add("SM");
+ regionCodeSet.add("SN");
regionCodeSet.add("SR");
regionCodeSet.add("ST");
regionCodeSet.add("SV");
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC
index 4f6dfd06..c1d98feb 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
index 4d27ff90..d80c5968 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
index af2902ff..6140377e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
index cfefc77f..61bd0228 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
index 1d39971d..3c6b31bc 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index 223a753a..b9a27fdc 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
index 092dc5af..f2a61e94 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
index 01a37bdb..1212a887 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
index 34450f1b..8c45b2b6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index 3bee242a..2311f572 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
index 928ed2d4..26aaa656 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
index cf7481dc..0bef470f 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
index 5678c254..cffdb8b6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
index 5f4ef065..6b971763 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
index fadbeae0..f385d53a 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
index baf7ee60..777d118e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index 346373d2..b92641f6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC
index da40428f..4d94ee04 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
index 3f4f54bd..972c334d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
index 4a1a605c..14696510 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
index 6c09e15e..7e8dff07 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index 576f2cec..ed06d7c9 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index 2a68fc33..b86a88f7 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
index 000c160e..3857111b 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX
index 2dff3547..4462c5ba 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
index 2d3a6567..2afa77e2 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
index 2f214650..bd3a9d40 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
index 590614d4..459a0f23 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
index 603b7257..8a4dace5 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
index e76128c0..92b247fb 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
index 56682c2e..8f1881a6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
index ef103169..f9a97fa7 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
index 9de50023..fe9f621e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
index 4548f4b2..80e45dde 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
index b1efd3e0..9849e748 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
index a034f5d2..78a606de 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
index 86f93853..90d5487e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
index f715319d..afe40ac5 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
index 3a375c7d..43fc271c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
index 3e56fdbd..b66fcccb 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
index 464ab177..ece7eb7e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
index d807877e..17200e0f 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
index ddfad7bc..e3b61f1f 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
index 609af423..6afb7b7d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index dcf18246..08b01753 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
index 46dab59f..80a41a19 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
index 4f224bda..e185e763 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
index 3923da1e..9e587ee0 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
index ac7b1e2a..19da153e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
index 98a27ca3..720d62c9 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
index 505fc4ce..3ca2463a 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
index 17f888f6..2b900017 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
index fec29fcb..39882264 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
index dd9f1ca3..b36be6b6 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 7773dfec..333d0870 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
index 7c129d7f..36bd6598 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
index ab4b8393..a725e1f4 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
index c2916777..c2cbbdf4 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
index ae009dc7..0a931c92 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
index 31a0ce9e..e0cbcf92 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
index 5c7e36b1..a00424d8 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
index 6eb1cd20..9cc97639 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
index 8adf3bf8..384af71e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
index 073b87ff..fd6a7c13 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
index 62fda2c7..71d187a3 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
index 60e2bf96..49a9ff4c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
index c4d1e08a..24a7a770 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
index 6ade89dd..b1536f4c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
index 1fcefcbd..ab342f6b 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
index 1a5b44d9..6f565d6a 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
index 8431e728..f569c5cd 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
index 05ca6eb1..7ce02f20 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
index 58c6097b..48930210 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
index 3b37cbb2..49974502 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
index 81dbee5c..9cfc22eb 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
index 2b68da67..96ea1998 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
index 79552fe0..7ea63edd 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
index d3dddd8e..472486a2 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
index 719123af..409fe598 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
index 07f9adad..0e90dbc1 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
index b60fc07d..b2f44e25 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
index 62a220e4..02a73f61 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
index 25d86b9d..a6441e8d 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
index 90fa6c17..29d6dee5 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index aa9a9d9b..7d3b2e0e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
index 7bcfab7f..12d16a91 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index 1cc77c6d..e8d8683c 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
index c1be6f72..551e326e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index aea83e90..28f0f02e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
index e495504a..8454793e 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
index 5e3a59e2..0ba0feef 100644
--- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
+++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL
index 77c7b827..b8948291 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AL
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_CR b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_CR
index cbc26284..3411d7f1 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_CR
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_CR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR
index 5fada27f..b91acd62 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_FR
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE
index 4496ace2..31013f9f 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_KE
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_MC b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_MC
index 658971e2..eae7953b 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_MC
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_MC
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SA b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SA
index e898145b..dc227c70 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SA
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SA
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SN b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SN
new file mode 100644
index 00000000..cb8ecc01
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_SN
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_US b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_US
index 48891db6..7c0cfb76 100644
--- a/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_US
+++ b/java/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_US
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java b/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
index 959a93c8..5d3aeef1 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
@@ -22,6 +22,7 @@ import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.android.i18n.phonenumbers.prefixmapper.PrefixFileReader;
+import java.util.List;
import java.util.Locale;
/**
@@ -60,11 +61,27 @@ public class PhoneNumberOfflineGeocoder {
/**
* Returns the customary display name in the given language for the given territory the phone
- * number is from.
+ * number is from. If it could be from many territories, nothing is returned.
*/
private String getCountryNameForNumber(PhoneNumber number, Locale language) {
- String regionCode = phoneUtil.getRegionCodeForNumber(number);
- return getRegionDisplayName(regionCode, language);
+ List<String> regionCodes =
+ phoneUtil.getRegionCodesForCountryCode(number.getCountryCode());
+ if (regionCodes.size() == 1) {
+ return getRegionDisplayName(regionCodes.get(0), language);
+ } else {
+ String regionWhereNumberIsValid = "ZZ";
+ for (String regionCode : regionCodes) {
+ if (phoneUtil.isValidNumberForRegion(number, regionCode)) {
+ if (!regionWhereNumberIsValid.equals("ZZ")) {
+ // If we can't assign the phone number as definitely belonging to only one territory,
+ // then we return nothing.
+ return "";
+ }
+ regionWhereNumberIsValid = regionCode;
+ }
+ }
+ return getRegionDisplayName(regionWhereNumberIsValid, language);
+ }
}
/**
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1346_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1346_en
new file mode 100644
index 00000000..a3176e2d
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1346_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1782_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1782_en
new file mode 100644
index 00000000..4968fec9
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1782_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1929_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1929_en
new file mode 100644
index 00000000..9662e515
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1929_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1930_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1930_en
new file mode 100644
index 00000000..bf6ba805
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1930_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1938_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1938_en
new file mode 100644
index 00000000..764aedae
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1938_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/1959_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/1959_en
new file mode 100644
index 00000000..3126e192
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/1959_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/237_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/237_en
new file mode 100644
index 00000000..28ac500d
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/237_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en
index b21858b0..3b413f6e 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/254_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en
index c12cc795..c8f107f1 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr
index 62de8955..e6424bbf 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/33_fr
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/34_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/34_en
index 3ec6b10a..2af5897e 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/34_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/34_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/34_es b/java/src/com/android/i18n/phonenumbers/geocoding/data/34_es
index 749b1621..c03c3ac6 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/34_es
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/34_es
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de
index c43da582..d4de4f8d 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_de
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en
index a6a5f62e..09aa464b 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr
index 20b8469f..dbadfaf3 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/352_fr
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en
index b903bcdb..5275f69c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/355_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/54_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/54_en
index be1c258a..01e66926 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/54_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/54_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en
index 55b1d8bc..e6995f46 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_en
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa
index e6aefc82..00da41f7 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/98_fa
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/geocoding/data/config b/java/src/com/android/i18n/phonenumbers/geocoding/data/config
index 5cb01c1c..df72e10c 100644
--- a/java/src/com/android/i18n/phonenumbers/geocoding/data/config
+++ b/java/src/com/android/i18n/phonenumbers/geocoding/data/config
Binary files differ
diff --git a/java/src/com/android/i18n/phonenumbers/internal/MatcherApi.java b/java/src/com/android/i18n/phonenumbers/internal/MatcherApi.java
new file mode 100644
index 00000000..5dd93654
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/internal/MatcherApi.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2014 The Libphonenumber Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.i18n.phonenumbers.internal;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
+
+/**
+ * Internal phonenumber matching API used to isolate the underlying implementation of the
+ * matcher and allow different implementations to be swapped in easily.
+ */
+public interface MatcherApi {
+ /**
+ * Returns whether the given national number (a string containing only decimal digits) matches
+ * the national number pattern defined in the given {@code PhoneNumberDesc} message.
+ */
+ boolean matchesNationalNumber(String nationalNumber, PhoneNumberDesc numberDesc,
+ boolean allowPrefixMatch);
+
+ /**
+ * Returns whether the given national number (a string containing only decimal digits) matches
+ * the possible number pattern defined in the given {@code PhoneNumberDesc} message.
+ */
+ boolean matchesPossibleNumber(String nationalNumber, PhoneNumberDesc numberDesc);
+}
diff --git a/java/src/com/android/i18n/phonenumbers/internal/RegexBasedMatcher.java b/java/src/com/android/i18n/phonenumbers/internal/RegexBasedMatcher.java
new file mode 100644
index 00000000..228437ce
--- /dev/null
+++ b/java/src/com/android/i18n/phonenumbers/internal/RegexBasedMatcher.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2014 The Libphonenumber Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.i18n.phonenumbers.internal;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
+import com.android.i18n.phonenumbers.RegexCache;
+
+import java.util.regex.Matcher;
+
+/**
+ * Implementation of the matcher API using the regular expressions in the PhoneNumberDesc
+ * proto message to match numbers.
+ */
+public final class RegexBasedMatcher implements MatcherApi {
+ public static MatcherApi create() {
+ return new RegexBasedMatcher();
+ }
+
+ private final RegexCache regexCache = new RegexCache(100);
+
+ private RegexBasedMatcher() {}
+
+ // @Override
+ public boolean matchesNationalNumber(String nationalNumber, PhoneNumberDesc numberDesc,
+ boolean allowPrefixMatch) {
+ Matcher nationalNumberPatternMatcher = regexCache.getPatternForRegex(
+ numberDesc.getNationalNumberPattern()).matcher(nationalNumber);
+ return nationalNumberPatternMatcher.matches()
+ || (allowPrefixMatch && nationalNumberPatternMatcher.lookingAt());
+ }
+
+ // @Override
+ public boolean matchesPossibleNumber(String nationalNumber, PhoneNumberDesc numberDesc) {
+ Matcher possibleNumberPatternMatcher = regexCache.getPatternForRegex(
+ numberDesc.getPossibleNumberPattern()).matcher(nationalNumber);
+ return possibleNumberPatternMatcher.matches();
+ }
+}
diff --git a/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java b/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
index 3b55b83e..9b54f011 100644
--- a/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
+++ b/java/test/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
@@ -38,9 +38,11 @@ public class CountryCodeToRegionCodeMapForTesting {
ArrayList<String> listWithRegionCode;
- listWithRegionCode = new ArrayList<String>(2);
+ listWithRegionCode = new ArrayList<String>(4);
listWithRegionCode.add("US");
+ listWithRegionCode.add("BB");
listWithRegionCode.add("BS");
+ listWithRegionCode.add("CA");
countryCodeToRegionCodeMap.put(1, listWithRegionCode);
listWithRegionCode = new ArrayList<String>(1);
diff --git a/java/test/com/android/i18n/phonenumbers/ExampleNumbersTest.java b/java/test/com/android/i18n/phonenumbers/ExampleNumbersTest.java
index 46f37abc..da100095 100644
--- a/java/test/com/android/i18n/phonenumbers/ExampleNumbersTest.java
+++ b/java/test/com/android/i18n/phonenumbers/ExampleNumbersTest.java
@@ -37,7 +37,7 @@ public class ExampleNumbersTest extends TestCase {
private static final Logger LOGGER = Logger.getLogger(ExampleNumbersTest.class.getName());
private PhoneNumberUtil phoneNumberUtil =
PhoneNumberUtil.createInstance(PhoneNumberUtil.DEFAULT_METADATA_LOADER);
- private ShortNumberInfo shortNumberInfo = new ShortNumberInfo(phoneNumberUtil);
+ private ShortNumberInfo shortNumberInfo = ShortNumberInfo.getInstance();
private List<PhoneNumber> invalidCases = new ArrayList<PhoneNumber>();
private List<PhoneNumber> wrongTypeCases = new ArrayList<PhoneNumber>();
@@ -183,7 +183,8 @@ public class ExampleNumbersTest extends TestCase {
List<String> invalidStringCases = new ArrayList<String>();
for (String regionCode : shortNumberInfo.getSupportedRegions()) {
String exampleShortNumber = shortNumberInfo.getExampleShortNumber(regionCode);
- if (!shortNumberInfo.isValidShortNumberForRegion(exampleShortNumber, regionCode)) {
+ if (!shortNumberInfo.isValidShortNumberForRegion(
+ phoneNumberUtil.parse(exampleShortNumber, regionCode), regionCode)) {
String invalidStringCase = "region_code: " + regionCode + ", national_number: " +
exampleShortNumber;
invalidStringCases.add(invalidStringCase);
@@ -198,7 +199,8 @@ public class ExampleNumbersTest extends TestCase {
for (ShortNumberInfo.ShortNumberCost cost : ShortNumberInfo.ShortNumberCost.values()) {
exampleShortNumber = shortNumberInfo.getExampleShortNumberForCost(regionCode, cost);
if (!exampleShortNumber.equals("")) {
- if (cost != shortNumberInfo.getExpectedCostForRegion(exampleShortNumber, regionCode)) {
+ if (cost != shortNumberInfo.getExpectedCostForRegion(
+ phoneNumberUtil.parse(exampleShortNumber, regionCode), regionCode)) {
wrongTypeCases.add(phoneNumber);
LOGGER.log(Level.SEVERE, "Wrong cost for " + phoneNumber.toString());
}
@@ -217,12 +219,13 @@ public class ExampleNumbersTest extends TestCase {
MetadataManager.getShortNumberMetadataForRegion(regionCode).getEmergency();
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
- if (!exampleNumber.matches(desc.getPossibleNumberPattern()) ||
- !shortNumberInfo.isEmergencyNumber(exampleNumber, regionCode)) {
+ PhoneNumber phoneNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
+ if (!shortNumberInfo.isPossibleShortNumberForRegion(phoneNumber, regionCode)
+ || !shortNumberInfo.isEmergencyNumber(exampleNumber, regionCode)) {
wrongTypeCounter++;
LOGGER.log(Level.SEVERE, "Emergency example number test failed for " + regionCode);
- } else if (shortNumberInfo.getExpectedCostForRegion(exampleNumber, regionCode) !=
- ShortNumberInfo.ShortNumberCost.TOLL_FREE) {
+ } else if (shortNumberInfo.getExpectedCostForRegion(phoneNumber, regionCode)
+ != ShortNumberInfo.ShortNumberCost.TOLL_FREE) {
wrongTypeCounter++;
LOGGER.log(Level.WARNING, "Emergency example number not toll free for " + regionCode);
}
@@ -240,8 +243,8 @@ public class ExampleNumbersTest extends TestCase {
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
PhoneNumber carrierSpecificNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
- if (!exampleNumber.matches(desc.getPossibleNumberPattern()) ||
- !shortNumberInfo.isCarrierSpecific(carrierSpecificNumber)) {
+ if (!shortNumberInfo.isPossibleShortNumberForRegion(carrierSpecificNumber, regionCode)
+ || !shortNumberInfo.isCarrierSpecific(carrierSpecificNumber)) {
wrongTagCounter++;
LOGGER.log(Level.SEVERE, "Carrier-specific test failed for " + regionCode);
}
diff --git a/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java
index 2f588992..be35d5d5 100644
--- a/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java
+++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java
@@ -440,6 +440,10 @@ public class PhoneNumberMatcherTest extends TestMetadataTestCase {
new NumberTest("2012-01-02 08:00", RegionCode.US),
new NumberTest("2012/01/02 08:00", RegionCode.US),
new NumberTest("20120102 08:00", RegionCode.US),
+ new NumberTest("2014-04-12 04:04 PM", RegionCode.US),
+ new NumberTest("2014-04-12 &nbsp;04:04 PM", RegionCode.US),
+ new NumberTest("2014-04-12 &nbsp;04:04 PM", RegionCode.US),
+ new NumberTest("2014-04-12 04:04 PM", RegionCode.US),
};
/**
diff --git a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
index 997430a4..1162bec1 100644
--- a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -25,6 +25,7 @@ import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* Unit tests for PhoneNumberUtil.java
@@ -116,6 +117,16 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertTrue(phoneUtil.getSupportedRegions().size() > 0);
}
+ public void testGetSupportedGlobalNetworkCallingCodes() {
+ Set<Integer> globalNetworkCallingCodes =
+ phoneUtil.getSupportedGlobalNetworkCallingCodes();
+ assertTrue(globalNetworkCallingCodes.size() > 0);
+ for (int callingCode : globalNetworkCallingCodes) {
+ assertTrue(callingCode > 0);
+ assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForCountryCode(callingCode));
+ }
+ }
+
public void testGetInstanceLoadBadMetadata() {
assertNull(phoneUtil.getMetadataForRegion("No Such Region"));
assertNull(phoneUtil.getMetadataForNonGeographicalRegion(-1));
@@ -1314,18 +1325,6 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG,
phoneUtil.isPossibleNumberWithReason(INTERNATIONAL_TOLL_FREE_TOO_LONG));
-
- // Try with number that we don't have metadata for.
- PhoneNumber adNumber = new PhoneNumber();
- adNumber.setCountryCode(376).setNationalNumber(12345L);
- assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE,
- phoneUtil.isPossibleNumberWithReason(adNumber));
- adNumber.setCountryCode(376).setNationalNumber(1L);
- assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT,
- phoneUtil.isPossibleNumberWithReason(adNumber));
- adNumber.setCountryCode(376).setNationalNumber(123456789012345678L);
- assertEquals(PhoneNumberUtil.ValidationResult.TOO_LONG,
- phoneUtil.isPossibleNumberWithReason(adNumber));
}
public void testIsNotPossibleNumber() {
@@ -1701,6 +1700,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64", RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.US));
+ assertEquals(NZ_NUMBER, phoneUtil.parse(
+ "My number is tel:03-331-6005;phone-context=+64", RegionCode.NZ));
// Test parsing RFC3966 format with optional user-defined parameters. The parameters will appear
// after the context if present.
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64;a=%A1",
@@ -1709,6 +1710,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;isub=12345;phone-context=+64",
RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:+64-3-331-6005;isub=12345", RegionCode.NZ));
+ // Test parsing RFC3966 with "tel:" missing.
+ assertEquals(NZ_NUMBER, phoneUtil.parse("03-331-6005;phone-context=+64", RegionCode.NZ));
// Testing international prefixes.
// Should strip country calling code.
assertEquals(NZ_NUMBER, phoneUtil.parse("0064 3 331 6005", RegionCode.NZ));
@@ -2346,7 +2349,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals("+37612345", phoneUtil.format(adNumber, PhoneNumberFormat.E164));
assertEquals("12345", phoneUtil.format(adNumber, PhoneNumberFormat.NATIONAL));
assertEquals(PhoneNumberUtil.PhoneNumberType.UNKNOWN, phoneUtil.getNumberType(adNumber));
- assertTrue(phoneUtil.isValidNumber(adNumber));
+ assertFalse(phoneUtil.isValidNumber(adNumber));
// Test dialing a US number from within Andorra.
assertEquals("00 1 650 253 0000",
diff --git a/java/test/com/android/i18n/phonenumbers/ShortNumberInfoTest.java b/java/test/com/android/i18n/phonenumbers/ShortNumberInfoTest.java
index a409b639..ae8c17bd 100644
--- a/java/test/com/android/i18n/phonenumbers/ShortNumberInfoTest.java
+++ b/java/test/com/android/i18n/phonenumbers/ShortNumberInfoTest.java
@@ -24,22 +24,18 @@ import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
* @author Shaopeng Jia
*/
public class ShortNumberInfoTest extends TestMetadataTestCase {
- private ShortNumberInfo shortInfo;
-
- public ShortNumberInfoTest() {
- shortInfo = new ShortNumberInfo(phoneUtil);
- }
+ private static final ShortNumberInfo shortInfo = ShortNumberInfo.getInstance();
public void testIsPossibleShortNumber() {
PhoneNumber possibleNumber = new PhoneNumber();
possibleNumber.setCountryCode(33).setNationalNumber(123456L);
assertTrue(shortInfo.isPossibleShortNumber(possibleNumber));
- assertTrue(shortInfo.isPossibleShortNumberForRegion("123456", RegionCode.FR));
+ assertTrue(
+ shortInfo.isPossibleShortNumberForRegion(parse("123456", RegionCode.FR), RegionCode.FR));
PhoneNumber impossibleNumber = new PhoneNumber();
impossibleNumber.setCountryCode(33).setNationalNumber(9L);
assertFalse(shortInfo.isPossibleShortNumber(impossibleNumber));
- assertFalse(shortInfo.isPossibleShortNumberForRegion("9", RegionCode.FR));
// Note that GB and GG share the country calling code 44, and that this number is possible but
// not valid.
@@ -50,10 +46,11 @@ public class ShortNumberInfoTest extends TestMetadataTestCase {
public void testIsValidShortNumber() {
assertTrue(shortInfo.isValidShortNumber(
new PhoneNumber().setCountryCode(33).setNationalNumber(1010L)));
- assertTrue(shortInfo.isValidShortNumberForRegion("1010", RegionCode.FR));
+ assertTrue(shortInfo.isValidShortNumberForRegion(parse("1010", RegionCode.FR), RegionCode.FR));
assertFalse(shortInfo.isValidShortNumber(
new PhoneNumber().setCountryCode(33).setNationalNumber(123456L)));
- assertFalse(shortInfo.isValidShortNumberForRegion("123456", RegionCode.FR));
+ assertFalse(
+ shortInfo.isValidShortNumberForRegion(parse("123456", RegionCode.FR), RegionCode.FR));
// Note that GB and GG share the country calling code 44.
assertTrue(shortInfo.isValidShortNumber(
@@ -61,44 +58,45 @@ public class ShortNumberInfoTest extends TestMetadataTestCase {
}
public void testGetExpectedCost() {
- String premiumRateExample = shortInfo.getExampleShortNumberForCost(
- RegionCode.FR, ShortNumberInfo.ShortNumberCost.PREMIUM_RATE);
- assertEquals(ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
- shortInfo.getExpectedCostForRegion(premiumRateExample, RegionCode.FR));
+ String premiumRateExample = shortInfo.getExampleShortNumberForCost(RegionCode.FR,
+ ShortNumberInfo.ShortNumberCost.PREMIUM_RATE);
+ assertEquals(ShortNumberInfo.ShortNumberCost.PREMIUM_RATE, shortInfo.getExpectedCostForRegion(
+ parse(premiumRateExample, RegionCode.FR), RegionCode.FR));
PhoneNumber premiumRateNumber = new PhoneNumber();
premiumRateNumber.setCountryCode(33).setNationalNumber(Integer.parseInt(premiumRateExample));
assertEquals(ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
shortInfo.getExpectedCost(premiumRateNumber));
- String standardRateExample = shortInfo.getExampleShortNumberForCost(
- RegionCode.FR, ShortNumberInfo.ShortNumberCost.STANDARD_RATE);
- assertEquals(ShortNumberInfo.ShortNumberCost.STANDARD_RATE,
- shortInfo.getExpectedCostForRegion(standardRateExample, RegionCode.FR));
+ String standardRateExample = shortInfo.getExampleShortNumberForCost(RegionCode.FR,
+ ShortNumberInfo.ShortNumberCost.STANDARD_RATE);
+ assertEquals(ShortNumberInfo.ShortNumberCost.STANDARD_RATE, shortInfo.getExpectedCostForRegion(
+ parse(standardRateExample, RegionCode.FR), RegionCode.FR));
PhoneNumber standardRateNumber = new PhoneNumber();
standardRateNumber.setCountryCode(33).setNationalNumber(Integer.parseInt(standardRateExample));
assertEquals(ShortNumberInfo.ShortNumberCost.STANDARD_RATE,
shortInfo.getExpectedCost(standardRateNumber));
- String tollFreeExample = shortInfo.getExampleShortNumberForCost(
- RegionCode.FR, ShortNumberInfo.ShortNumberCost.TOLL_FREE);
+ String tollFreeExample = shortInfo.getExampleShortNumberForCost(RegionCode.FR,
+ ShortNumberInfo.ShortNumberCost.TOLL_FREE);
assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
- shortInfo.getExpectedCostForRegion(tollFreeExample, RegionCode.FR));
+ shortInfo.getExpectedCostForRegion(parse(tollFreeExample, RegionCode.FR), RegionCode.FR));
PhoneNumber tollFreeNumber = new PhoneNumber();
tollFreeNumber.setCountryCode(33).setNationalNumber(Integer.parseInt(tollFreeExample));
assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
shortInfo.getExpectedCost(tollFreeNumber));
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion("12345", RegionCode.FR));
+ shortInfo.getExpectedCostForRegion(parse("12345", RegionCode.FR), RegionCode.FR));
PhoneNumber unknownCostNumber = new PhoneNumber();
unknownCostNumber.setCountryCode(33).setNationalNumber(12345L);
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
shortInfo.getExpectedCost(unknownCostNumber));
// Test that an invalid number may nevertheless have a cost other than UNKNOWN_COST.
- assertFalse(shortInfo.isValidShortNumberForRegion("116123", RegionCode.FR));
+ assertFalse(
+ shortInfo.isValidShortNumberForRegion(parse("116123", RegionCode.FR), RegionCode.FR));
assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
- shortInfo.getExpectedCostForRegion("116123", RegionCode.FR));
+ shortInfo.getExpectedCostForRegion(parse("116123", RegionCode.FR), RegionCode.FR));
PhoneNumber invalidNumber = new PhoneNumber();
invalidNumber.setCountryCode(33).setNationalNumber(116123L);
assertFalse(shortInfo.isValidShortNumber(invalidNumber));
@@ -107,7 +105,7 @@ public class ShortNumberInfoTest extends TestMetadataTestCase {
// Test a nonexistent country code.
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion("911", RegionCode.ZZ));
+ shortInfo.getExpectedCostForRegion(parse("911", RegionCode.US), RegionCode.ZZ));
unknownCostNumber.clear();
unknownCostNumber.setCountryCode(123).setNationalNumber(911L);
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
@@ -119,44 +117,50 @@ public class ShortNumberInfoTest extends TestMetadataTestCase {
// code. In Australia, 1234 is premium-rate, 1194 is standard-rate, and 733 is toll-free. These
// are not known to be valid numbers in the Christmas Islands.
String ambiguousPremiumRateString = "1234";
- PhoneNumber ambiguousPremiumRateNumber = new PhoneNumber().setCountryCode(61)
- .setNationalNumber(1234L);
+ PhoneNumber ambiguousPremiumRateNumber =
+ new PhoneNumber().setCountryCode(61).setNationalNumber(1234L);
String ambiguousStandardRateString = "1194";
- PhoneNumber ambiguousStandardRateNumber = new PhoneNumber().setCountryCode(61)
- .setNationalNumber(1194L);
+ PhoneNumber ambiguousStandardRateNumber =
+ new PhoneNumber().setCountryCode(61).setNationalNumber(1194L);
String ambiguousTollFreeString = "733";
- PhoneNumber ambiguousTollFreeNumber = new PhoneNumber().setCountryCode(61)
- .setNationalNumber(733L);
+ PhoneNumber ambiguousTollFreeNumber =
+ new PhoneNumber().setCountryCode(61).setNationalNumber(733L);
assertTrue(shortInfo.isValidShortNumber(ambiguousPremiumRateNumber));
assertTrue(shortInfo.isValidShortNumber(ambiguousStandardRateNumber));
assertTrue(shortInfo.isValidShortNumber(ambiguousTollFreeNumber));
- assertTrue(shortInfo.isValidShortNumberForRegion(ambiguousPremiumRateString, RegionCode.AU));
- assertEquals(ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
- shortInfo.getExpectedCostForRegion(ambiguousPremiumRateString, RegionCode.AU));
- assertFalse(shortInfo.isValidShortNumberForRegion(ambiguousPremiumRateString, RegionCode.CX));
- assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion(ambiguousPremiumRateString, RegionCode.CX));
+ assertTrue(shortInfo.isValidShortNumberForRegion(
+ parse(ambiguousPremiumRateString, RegionCode.AU), RegionCode.AU));
+ assertEquals(ShortNumberInfo.ShortNumberCost.PREMIUM_RATE, shortInfo.getExpectedCostForRegion(
+ parse(ambiguousPremiumRateString, RegionCode.AU), RegionCode.AU));
+ assertFalse(shortInfo.isValidShortNumberForRegion(
+ parse(ambiguousPremiumRateString, RegionCode.CX), RegionCode.CX));
+ assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, shortInfo.getExpectedCostForRegion(
+ parse(ambiguousPremiumRateString, RegionCode.CX), RegionCode.CX));
// PREMIUM_RATE takes precedence over UNKNOWN_COST.
assertEquals(ShortNumberInfo.ShortNumberCost.PREMIUM_RATE,
shortInfo.getExpectedCost(ambiguousPremiumRateNumber));
- assertTrue(shortInfo.isValidShortNumberForRegion(ambiguousStandardRateString, RegionCode.AU));
- assertEquals(ShortNumberInfo.ShortNumberCost.STANDARD_RATE,
- shortInfo.getExpectedCostForRegion(ambiguousStandardRateString, RegionCode.AU));
- assertFalse(shortInfo.isValidShortNumberForRegion(ambiguousStandardRateString, RegionCode.CX));
- assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion(ambiguousStandardRateString, RegionCode.CX));
+ assertTrue(shortInfo.isValidShortNumberForRegion(
+ parse(ambiguousStandardRateString, RegionCode.AU), RegionCode.AU));
+ assertEquals(ShortNumberInfo.ShortNumberCost.STANDARD_RATE, shortInfo.getExpectedCostForRegion(
+ parse(ambiguousStandardRateString, RegionCode.AU), RegionCode.AU));
+ assertFalse(shortInfo.isValidShortNumberForRegion(
+ parse(ambiguousStandardRateString, RegionCode.CX), RegionCode.CX));
+ assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, shortInfo.getExpectedCostForRegion(
+ parse(ambiguousStandardRateString, RegionCode.CX), RegionCode.CX));
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
shortInfo.getExpectedCost(ambiguousStandardRateNumber));
- assertTrue(shortInfo.isValidShortNumberForRegion(ambiguousTollFreeString, RegionCode.AU));
- assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
- shortInfo.getExpectedCostForRegion(ambiguousTollFreeString, RegionCode.AU));
- assertFalse(shortInfo.isValidShortNumberForRegion(ambiguousTollFreeString, RegionCode.CX));
- assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion(ambiguousTollFreeString, RegionCode.CX));
+ assertTrue(shortInfo.isValidShortNumberForRegion(parse(ambiguousTollFreeString, RegionCode.AU),
+ RegionCode.AU));
+ assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE, shortInfo.getExpectedCostForRegion(
+ parse(ambiguousTollFreeString, RegionCode.AU), RegionCode.AU));
+ assertFalse(shortInfo.isValidShortNumberForRegion(parse(ambiguousTollFreeString, RegionCode.CX),
+ RegionCode.CX));
+ assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST, shortInfo.getExpectedCostForRegion(
+ parse(ambiguousTollFreeString, RegionCode.CX), RegionCode.CX));
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
shortInfo.getExpectedCost(ambiguousTollFreeNumber));
}
@@ -301,13 +305,13 @@ public class ShortNumberInfoTest extends TestMetadataTestCase {
public void testEmergencyNumberForSharedCountryCallingCode() {
// Test the emergency number 112, which is valid in both Australia and the Christmas Islands.
assertTrue(shortInfo.isEmergencyNumber("112", RegionCode.AU));
- assertTrue(shortInfo.isValidShortNumberForRegion("112", RegionCode.AU));
+ assertTrue(shortInfo.isValidShortNumberForRegion(parse("112", RegionCode.AU), RegionCode.AU));
assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
- shortInfo.getExpectedCostForRegion("112", RegionCode.AU));
+ shortInfo.getExpectedCostForRegion(parse("112", RegionCode.AU), RegionCode.AU));
assertTrue(shortInfo.isEmergencyNumber("112", RegionCode.CX));
- assertTrue(shortInfo.isValidShortNumberForRegion("112", RegionCode.CX));
+ assertTrue(shortInfo.isValidShortNumberForRegion(parse("112", RegionCode.CX), RegionCode.CX));
assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
- shortInfo.getExpectedCostForRegion("112", RegionCode.CX));
+ shortInfo.getExpectedCostForRegion(parse("112", RegionCode.CX), RegionCode.CX));
PhoneNumber sharedEmergencyNumber =
new PhoneNumber().setCountryCode(61).setNationalNumber(112L);
assertTrue(shortInfo.isValidShortNumber(sharedEmergencyNumber));
@@ -320,12 +324,21 @@ public class ShortNumberInfoTest extends TestMetadataTestCase {
// and the USA.
assertTrue(shortInfo.isEmergencyNumber("211", RegionCode.BB));
assertEquals(ShortNumberInfo.ShortNumberCost.TOLL_FREE,
- shortInfo.getExpectedCostForRegion("211", RegionCode.BB));
+ shortInfo.getExpectedCostForRegion(parse("211", RegionCode.BB), RegionCode.BB));
assertFalse(shortInfo.isEmergencyNumber("211", RegionCode.US));
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion("211", RegionCode.US));
+ shortInfo.getExpectedCostForRegion(parse("211", RegionCode.US), RegionCode.US));
assertFalse(shortInfo.isEmergencyNumber("211", RegionCode.CA));
assertEquals(ShortNumberInfo.ShortNumberCost.UNKNOWN_COST,
- shortInfo.getExpectedCostForRegion("211", RegionCode.CA));
+ shortInfo.getExpectedCostForRegion(parse("211", RegionCode.CA), RegionCode.CA));
+ }
+
+ private PhoneNumber parse(String number, String regionCode) {
+ try {
+ return phoneUtil.parse(number, regionCode);
+ } catch (NumberParseException e) {
+ throw new AssertionError(
+ "Test input data should always parse correctly: " + number + " (" + regionCode + ")", e);
+ }
}
}
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BB b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BB
new file mode 100644
index 00000000..672f42b1
--- /dev/null
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BB
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CA b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CA
new file mode 100644
index 00000000..a169c934
--- /dev/null
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CA
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CX b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CX
index ad6bff5c..334390d4 100644
--- a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CX
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CX
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_FR b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_FR
index 48689250..db0a6b39 100644
--- a/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_FR
+++ b/java/test/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_FR
Binary files differ
diff --git a/java/test/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java b/java/test/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java
index 83bd9ef8..b75120b0 100644
--- a/java/test/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java
+++ b/java/test/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java
@@ -51,6 +51,8 @@ public class PhoneNumberOfflineGeocoderTest extends TestCase {
new PhoneNumber().setCountryCode(1).setNationalNumber(6174240000L);
private static final PhoneNumber US_INVALID_NUMBER =
new PhoneNumber().setCountryCode(1).setNationalNumber(123456789L);
+ private static final PhoneNumber NANPA_TOLL_FREE =
+ new PhoneNumber().setCountryCode(1).setNationalNumber(8002431234L);
private static final PhoneNumber BS_NUMBER1 =
new PhoneNumber().setCountryCode(1).setNationalNumber(2423651234L);
private static final PhoneNumber AU_NUMBER =
@@ -84,6 +86,13 @@ public class PhoneNumberOfflineGeocoderTest extends TestCase {
geocoder.getDescriptionForNumber(US_NUMBER4, new Locale("en", "US")));
}
+ public void testGetDescriptionForNumberBelongingToMultipleCountriesIsEmpty() {
+ // Test that nothing is returned when the number passed in is valid but not
+ // covered by the geocoding data file and belongs to multiple countries
+ assertEquals("",
+ geocoder.getDescriptionForNumber(NANPA_TOLL_FREE, new Locale("en", "US")));
+ }
+
public void testGetDescriptionForNumber_en_US() {
assertEquals("CA",
geocoder.getDescriptionForNumber(US_NUMBER1, new Locale("en", "US")));