summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2022-08-25 20:52:23 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-08-25 20:52:23 +0000
commitf5f32642d44ffa610051d640985a7a0e6e1e62a6 (patch)
tree37017a582ee037520263bab6a4b6394c8753da3e
parentebca162c0e053039762ff380ef4a8ac617637985 (diff)
parent5cdc5094a5be9275b4d2b8700a701f5fff266df7 (diff)
downloadlibphonenumber-f5f32642d44ffa610051d640985a7a0e6e1e62a6.tar.gz
Merge "Update libphonenumber to v8.12.54" am: 84f52584d0 am: 93a35a2c43 am: 5cdc5094a5
Original change: https://android-review.googlesource.com/c/platform/external/libphonenumber/+/2192266 Change-Id: Icfc25d828605e0f3d980fb9a9782f75350197844 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Android.bp4
-rw-r--r--README.android2
-rw-r--r--README.version2
-rw-r--r--carrier/pom.xml8
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java10
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_enbin176 -> 308 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/1345_enbin165 -> 180 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/212_enbin543 -> 549 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/223_enbin180 -> 186 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/226_enbin193 -> 197 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/233_enbin139 -> 162 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/237_enbin174 -> 188 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/244_enbin68 -> 89 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/251_enbin38 -> 53 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/254_enbin303 -> 328 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/262_enbin737 -> 733 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/298_enbin124 -> 128 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/33_enbin2848 -> 2860 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/34_enbin2108 -> 2114 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/351_enbin306 -> 421 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/354_enbin353 -> 359 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/370_enbin574 -> 574 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/372_enbin435 -> 441 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/380_enbin184 -> 190 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/380_ukbin180 -> 186 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/385_enbin149 -> 187 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/386_enbin220 -> 229 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/41_enbin690 -> 726 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/420_enbin1754 -> 1802 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/421_enbin413 -> 419 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/44_enbin4828 -> 4858 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/46_enbin5756 -> 5762 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/48_enbin2230 -> 2272 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/503_enbin1194 -> 1242 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/56_enbin20196 -> 20286 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/57_enbin1846 -> 1834 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/60_enbin2161 -> 2189 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/65_enbin2829 -> 2849 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/675_enbin105 -> 111 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/852_enbin2407 -> 2431 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zhbin2008 -> 2032 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/86_enbin457 -> 468 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/963_enbin134 -> 154 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/972_enbin412 -> 421 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/974_enbin210 -> 222 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/976_enbin174 -> 196 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/977_enbin183 -> 195 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/98_enbin233 -> 239 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/98_fabin294 -> 300 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/992_enbin239 -> 221 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/995_enbin482 -> 506 bytes
-rw-r--r--carrier/src/com/google/i18n/phonenumbers/carrier/data/996_enbin238 -> 238 bytes
-rw-r--r--demo/README25
-rw-r--r--demo/build.xml59
-rw-r--r--demo/pom.xml94
-rw-r--r--demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java (renamed from demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java)0
-rw-r--r--demo/src/main/webapp/WEB-INF/appengine-web.xml (renamed from demo/war/WEB-INF/appengine-web.xml)0
-rw-r--r--demo/src/main/webapp/WEB-INF/logging.properties (renamed from demo/war/WEB-INF/logging.properties)2
-rw-r--r--demo/src/main/webapp/WEB-INF/web.xml (renamed from demo/war/WEB-INF/web.xml)0
-rw-r--r--demo/src/main/webapp/favicon.ico (renamed from demo/war/favicon.ico)bin2417 -> 2417 bytes
-rw-r--r--demo/src/main/webapp/phonenumberparser.jsp (renamed from demo/war/phonenumberparser.jsp)0
-rw-r--r--demo/src/main/webapp/stylesheets/main.css (renamed from demo/war/stylesheets/main.css)0
-rw-r--r--demo/war/WEB-INF/lib/commons-fileupload-1.2.1.jarbin57779 -> 0 bytes
-rw-r--r--demo/war/WEB-INF/lib/commons-io-1.4.jarbin109043 -> 0 bytes
-rw-r--r--demo/war/WEB-INF/lib/commons-lang-2.6.jarbin284220 -> 0 bytes
-rw-r--r--demo/war/WEB-INF/lib/servlet-api-2.5.jarbin105112 -> 0 bytes
-rw-r--r--geocoder/pom.xml8
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java8
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1263_enbin0 -> 37 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1310_enbin1532 -> 3818 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1468_enbin0 -> 31 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1584_enbin0 -> 33 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1656_enbin0 -> 32 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1826_enbin0 -> 33 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1943_enbin0 -> 32 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1948_enbin0 -> 33 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_enbin1256 -> 1256 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_frbin604 -> 604 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_enbin99455 -> 100213 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_enbin1594 -> 1594 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_esbin364 -> 384 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_enbin823 -> 834 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_enbin12869 -> 12774 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_enbin6400 -> 6428 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_enbin9725 -> 9752 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_enbin2597 -> 1522 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_enbin392986 -> 395047 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/geocoding/data/configbin6760 -> 6844 bytes
-rw-r--r--geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_databin26953 -> 27076 bytes
-rw-r--r--internal/prefixmapper/pom.xml6
-rw-r--r--internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReader.java13
-rw-r--r--lib/mockito-all-1.10.19.jarbin0 -> 1234599 bytes
-rw-r--r--libphonenumber/pom.xml4
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java2
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java2
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java233
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/MissingMetadataException.java9
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/MultiFileMetadataSourceImpl.java86
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java5
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java111
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java66
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java2
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java65
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375bin113 -> 0 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380bin328 -> 334 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49bin12125 -> 12141 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63bin86 -> 0 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800bin315 -> 309 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AGbin774 -> 765 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AIbin743 -> 734 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AObin348 -> 348 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ARbin8246 -> 8268 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ASbin712 -> 703 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ATbin1902 -> 1905 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BBbin916 -> 993 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BEbin863 -> 867 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BFbin443 -> 444 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJbin424 -> 424 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BMbin692 -> 683 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BRbin1610 -> 1659 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BSbin963 -> 954 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BWbin816 -> 817 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CAbin976 -> 1031 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CLbin2052 -> 2082 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CMbin455 -> 456 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CNbin7821 -> 7814 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CObin965 -> 827 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DEbin3130 -> 3136 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DMbin737 -> 728 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DObin991 -> 982 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EEbin1041 -> 1042 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EHbin402 -> 407 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ETbin1018 -> 1067 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FObin443 -> 446 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FRbin842 -> 848 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GBbin2882 -> 2884 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GDbin799 -> 790 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GEbin897 -> 919 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GFbin522 -> 523 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GGbin675 -> 678 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GHbin792 -> 792 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GPbin570 -> 564 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GUbin1071 -> 1062 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HKbin1423 -> 1443 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HNbin735 -> 736 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HRbin938 -> 947 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ILbin1163 -> 1162 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IRbin1077 -> 1077 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ISbin868 -> 869 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ITbin2376 -> 2385 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JEbin781 -> 784 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JMbin992 -> 977 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JPbin7970 -> 7948 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KEbin653 -> 656 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KGbin834 -> 837 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KNbin716 -> 707 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KYbin882 -> 873 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LCbin774 -> 765 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MAbin880 -> 879 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MHbin381 -> 382 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MLbin603 -> 604 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MMbin2157 -> 2166 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MNbin824 -> 830 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MPbin841 -> 832 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQbin547 -> 538 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MSbin684 -> 675 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MTbin576 -> 585 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MVbin559 -> 566 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MXbin2233 -> 2239 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MYbin1411 -> 1485 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NCbin459 -> 487 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NLbin1574 -> 1699 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NPbin817 -> 823 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZbin1095 -> 1095 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PAbin999 -> 1001 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PEbin736 -> 743 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PGbin548 -> 549 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PMbin455 -> 457 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PRbin651 -> 642 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PTbin721 -> 758 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QAbin488 -> 492 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_REbin568 -> 592 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SEbin2957 -> 2964 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SGbin983 -> 987 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SIbin784 -> 787 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SXbin705 -> 696 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SYbin496 -> 487 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TCbin746 -> 737 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TTbin838 -> 830 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UAbin952 -> 988 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UGbin667 -> 664 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_USbin2276 -> 2387 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VCbin780 -> 800 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VGbin795 -> 786 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VIbin927 -> 918 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VNbin1337 -> 1337 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YTbin395 -> 398 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ATbin286 -> 323 bytes
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/internal/GeoEntityUtility.java56
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java115
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java42
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/MetadataParser.java108
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java78
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java69
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java37
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java57
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java74
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java35
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataContainer.java (renamed from libphonenumber/src/com/google/i18n/phonenumbers/MetadataSource.java)23
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSource.java21
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java72
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java42
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java47
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java36
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSource.java40
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java62
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java35
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java10
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java75
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java88
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/MultiFileMetadataSourceImplTest.java62
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java49
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/RegionCode.java1
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/SingleFileMetadataSourceImplTest.java48
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java14
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CObin0 -> 424 bytes
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_HUbin258 -> 0 bytes
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/internal/GeoEntityUtilityTest.java42
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/PhoneMetadataCollectionUtil.java21
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/init/MetadataParserTest.java88
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuardTest.java102
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainerTest.java66
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainerTest.java62
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProviderTest.java45
-rw-r--r--libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProviderTest.java31
-rw-r--r--pom.xml10
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java8
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1263_enbin0 -> 37 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1310_enbin1532 -> 3818 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1468_enbin0 -> 31 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1584_enbin0 -> 33 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1656_enbin0 -> 32 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1826_enbin0 -> 33 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1943_enbin0 -> 32 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1948_enbin0 -> 33 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_enbin1256 -> 1256 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_frbin604 -> 604 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/33_enbin99455 -> 100213 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_enbin1594 -> 1594 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_esbin364 -> 384 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/351_enbin823 -> 834 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/44_enbin12869 -> 12774 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/52_enbin6400 -> 6428 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/54_enbin9725 -> 9752 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/57_enbin2597 -> 1522 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/61_enbin392986 -> 395047 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/configbin6760 -> 6844 bytes
-rw-r--r--repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_databin26953 -> 27076 bytes
-rw-r--r--repackaged/internal/prefixmapper/src/com/android/i18n/phonenumbers/prefixmapper/PrefixFileReader.java13
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java2
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java2
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataManager.java234
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MissingMetadataException.java11
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MultiFileMetadataSourceImpl.java87
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java5
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java111
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumberInfo.java66
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java2
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/SingleFileMetadataSourceImpl.java66
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375bin113 -> 0 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380bin328 -> 334 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49bin12125 -> 12141 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63bin86 -> 0 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800bin315 -> 309 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AGbin774 -> 765 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AIbin743 -> 734 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AObin348 -> 348 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ARbin8246 -> 8268 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ASbin712 -> 703 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ATbin1902 -> 1905 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BBbin916 -> 993 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BEbin863 -> 867 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BFbin443 -> 444 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJbin424 -> 424 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BMbin692 -> 683 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BRbin1610 -> 1659 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BSbin963 -> 954 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BWbin816 -> 817 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CAbin976 -> 1031 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CLbin2052 -> 2082 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CMbin455 -> 456 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CNbin7821 -> 7814 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CObin965 -> 827 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DEbin3130 -> 3136 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DMbin737 -> 728 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DObin991 -> 982 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EEbin1041 -> 1042 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EHbin402 -> 407 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ETbin1018 -> 1067 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FObin443 -> 446 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FRbin842 -> 848 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GBbin2882 -> 2884 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GDbin799 -> 790 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GEbin897 -> 919 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GFbin522 -> 523 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GGbin675 -> 678 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GHbin792 -> 792 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GPbin570 -> 564 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GUbin1071 -> 1062 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HKbin1423 -> 1443 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HNbin735 -> 736 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HRbin938 -> 947 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ILbin1163 -> 1162 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IRbin1077 -> 1077 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ISbin868 -> 869 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ITbin2376 -> 2385 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JEbin781 -> 784 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JMbin992 -> 977 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JPbin7970 -> 7948 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KEbin653 -> 656 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KGbin834 -> 837 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KNbin716 -> 707 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KYbin882 -> 873 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LCbin774 -> 765 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MAbin880 -> 879 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MHbin381 -> 382 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MLbin603 -> 604 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MMbin2157 -> 2166 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MNbin824 -> 830 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MPbin841 -> 832 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQbin547 -> 538 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MSbin684 -> 675 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MTbin576 -> 585 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MVbin559 -> 566 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MXbin2233 -> 2239 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MYbin1411 -> 1485 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NCbin459 -> 487 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NLbin1574 -> 1699 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NPbin817 -> 823 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZbin1095 -> 1095 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PAbin999 -> 1001 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PEbin736 -> 743 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PGbin548 -> 549 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PMbin455 -> 457 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PRbin651 -> 642 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PTbin721 -> 758 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_QAbin488 -> 492 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_REbin568 -> 592 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SEbin2957 -> 2964 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SGbin983 -> 987 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SIbin784 -> 787 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SXbin705 -> 696 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SYbin496 -> 487 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TCbin746 -> 737 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TTbin838 -> 830 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UAbin952 -> 988 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UGbin667 -> 664 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_USbin2276 -> 2387 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VCbin780 -> 800 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VGbin795 -> 786 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VIbin927 -> 918 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VNbin1337 -> 1337 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_YTbin395 -> 398 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_ATbin286 -> 323 bytes
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/internal/GeoEntityUtility.java58
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java117
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java44
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/MetadataParser.java110
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java79
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java70
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java39
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java59
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java75
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java37
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataContainer.java (renamed from repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataSource.java)23
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSource.java23
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java74
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java44
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java49
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java38
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSource.java42
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java64
-rw-r--r--repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java37
383 files changed, 3005 insertions, 1373 deletions
diff --git a/Android.bp b/Android.bp
index 5942d4f4..5e27397f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -115,6 +115,10 @@ java_library {
static_libs: [
"libphonenumber",
"junit",
+ "mockito-target-extended",
+ ],
+ libs: [
+ "android.test.mock",
],
java_version: "1.7",
}
diff --git a/README.android b/README.android
index 75c93203..a7522a72 100644
--- a/README.android
+++ b/README.android
@@ -1,5 +1,5 @@
URL: https://github.com/googlei18n/libphonenumber
-Version: 8.12.46
+Version: 8.12.54
License: Apache 2
Description: Google Phone Number Library.
diff --git a/README.version b/README.version
index e1cf22b8..91bd84d5 100644
--- a/README.version
+++ b/README.version
@@ -1,3 +1,3 @@
URL: https://github.com/googlei18n/libphonenumber/
-Version: 8.12.46
+Version: 8.12.54
BugComponent: 20868
diff --git a/carrier/pom.xml b/carrier/pom.xml
index 0ed9500a..5e122949 100644
--- a/carrier/pom.xml
+++ b/carrier/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>carrier</artifactId>
- <version>1.172</version>
+ <version>1.180</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</parent>
<build>
@@ -55,12 +55,12 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
- <version>2.182</version>
+ <version>2.190</version>
</dependency>
</dependencies>
diff --git a/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java b/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java
index b99abe6e..ed3d6d88 100644
--- a/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java
+++ b/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java
@@ -16,11 +16,10 @@
package com.google.i18n.phonenumbers;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import com.google.i18n.phonenumbers.prefixmapper.PrefixFileReader;
-
import java.util.Locale;
/**
@@ -30,9 +29,7 @@ import java.util.Locale;
*/
public class PhoneNumberToCarrierMapper {
private static PhoneNumberToCarrierMapper instance = null;
- private static final String MAPPING_DATA_DIRECTORY =
- "/com/google/i18n/phonenumbers/carrier/data/";
- private PrefixFileReader prefixFileReader = null;
+ private final PrefixFileReader prefixFileReader;
private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -51,7 +48,8 @@ public class PhoneNumberToCarrierMapper {
*/
public static synchronized PhoneNumberToCarrierMapper getInstance() {
if (instance == null) {
- instance = new PhoneNumberToCarrierMapper(MAPPING_DATA_DIRECTORY);
+ instance = new PhoneNumberToCarrierMapper(DefaultMetadataDependenciesProvider.getInstance()
+ .getCarrierDataDirectory());
}
return instance;
}
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_en
index 8ffce001..1368ea03 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/1345_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/1345_en
index 39013444..f687d25c 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/1345_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/1345_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en
index 05983c7e..befb5c08 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/223_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/223_en
index 5c04fd1f..f8217c8f 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/223_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/223_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/226_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/226_en
index 88130d58..8230d0aa 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/226_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/226_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/233_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/233_en
index 66bb3700..dc32ada3 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/233_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/233_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en
index 729f6508..483a7655 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/244_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/244_en
index 48e01f4c..e47a30a8 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/244_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/244_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/251_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/251_en
index 354c0111..8e13f331 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/251_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/251_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/254_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/254_en
index 60412710..ea8d7761 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/254_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/254_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/262_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/262_en
index 1df02841..74a5de6f 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/262_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/262_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/298_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/298_en
index e3a67dac..1f76f32a 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/298_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/298_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/33_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/33_en
index 0438dc33..51b64fa8 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/33_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/33_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en
index 42dbe35a..7a54e180 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/34_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/351_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/351_en
index 6e730420..fc8db80c 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/351_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/351_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/354_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/354_en
index 15476176..f7731a6f 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/354_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/354_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/370_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/370_en
index 32cd4aac..076f5925 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/370_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/370_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/372_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/372_en
index b07561a9..1de891a3 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/372_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/372_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en
index 43384783..609b47f3 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_uk b/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_uk
index f4756ff7..add3a08a 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_uk
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_uk
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en
index 3e9b2db4..e0c34c21 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/386_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/386_en
index c0b89dec..461263c5 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/386_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/386_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en
index 058355f2..d5820e5a 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/420_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/420_en
index a17f7d80..c42f60e1 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/420_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/420_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/421_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/421_en
index 83605f0a..424ea380 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/421_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/421_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/44_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/44_en
index 79b9f945..e764cc8a 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/44_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/44_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/46_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/46_en
index 719c0bc4..c85b3d94 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/46_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/46_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/48_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/48_en
index 66546b28..a5ae3fee 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/48_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/48_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/503_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/503_en
index 57520a34..69a232b7 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/503_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/503_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en
index 67386fe3..056751d1 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en
index 811c55d2..1052ada7 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en
index 28ea3fc5..a7021aa8 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en
index 9dc543a2..8b002a4f 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/675_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/675_en
index 328156d4..c044c835 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/675_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/675_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en
index 6828fc69..05339f91 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh b/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh
index 7669b5b7..f05af53e 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en
index 1e2437c1..2d943068 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/963_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/963_en
index 593e0c46..ee4fe314 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/963_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/963_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en
index 862fba3f..556d6645 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en
index c34cabb5..d92d9ddc 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/976_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/976_en
index 5e41d40c..7be52323 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/976_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/976_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en
index 1a3376bc..94d491a7 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_en
index 24d29024..cafaee21 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_fa b/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_fa
index b7635df2..cdacabfb 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_fa
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_fa
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en
index 74499f5a..fa9bb9ba 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en
index 9275bbed..c7243dbb 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en
Binary files differ
diff --git a/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en b/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en
index 1a790e74..93b2fd32 100644
--- a/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en
+++ b/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en
Binary files differ
diff --git a/demo/README b/demo/README
index ae42c5bc..0bc32d88 100644
--- a/demo/README
+++ b/demo/README
@@ -1,21 +1,6 @@
-How to install the Appengine SDK to the Maven local repository?
-Note that this needs to be done only once.
- $ mvn gae:unpack
- Note that you don't need to manually download any SDK.
+Prerequisite:
+ Install the Appengine SDK.
+ $ sudo apt-get install google-cloud-sdk-app-engine-java
-How to generate the WAR?
- $ mvn package
- $ mvn war:war
- Note that this must be done before running the webapp locally and before
- deploying it to Appengine.
-
-How to run the webapp locally?
- $ mvn gae:run
-
-How to deploy the webapp to Appengine?
- $ mvn gae:update
-
-If you have made any changes to the code or pom.xml file of demo here,
-you may need to run Maven commands like ```mvn clean install -U```
-(especially one hierarchy above i.e at java/ folder) to resolve any
-dependency issues w.r.t new developement version.
+How to regenreate the WAR, deploy and run in appengine?
+ $ mvn appengine:run
diff --git a/demo/build.xml b/demo/build.xml
deleted file mode 100644
index 5cc93a78..00000000
--- a/demo/build.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<project>
- <property name="appengine-sdk.dir" location="../../appengine-java-sdk" />
-
- <import file="${appengine-sdk.dir}/config/user/ant-macros.xml" />
-
- <path id="project.classpath">
- <pathelement path="war/WEB-INF/classes" />
- <fileset dir="war/WEB-INF/lib">
- <include name="**/*.jar" />
- </fileset>
- <fileset dir="${appengine-sdk.dir}/lib">
- <include name="shared/**/*.jar" />
- </fileset>
- </path>
-
- <target name="copyjars" description="Copies the App Engine JARs to the WAR.">
- <copy todir="war/WEB-INF/lib" flatten="true">
- <fileset dir="${appengine-sdk.dir}/lib/user">
- <include name="**/*.jar" />
- </fileset>
- </copy>
- </target>
-
- <target name="compile" depends="copyjars"
- description="Compiles Java source and copies other source files to the WAR.">
- <mkdir dir="war/WEB-INF/classes" />
- <copy todir="war/WEB-INF/classes">
- <fileset dir="src">
- <exclude name="**/*.java" />
- </fileset>
- </copy>
- <javac srcdir="src" destdir="war/WEB-INF/classes" classpathref="project.classpath" debug="on"
- includeAntRuntime="false" source="1.8" target="1.8"/>
- </target>
-
- <target name="runserver" depends="compile" description="Starts the development server.">
- <dev_appserver war="war" />
- </target>
-
- <target name="update" depends="compile" description="Uploads the application to App Engine.">
- <appcfg action="update" war="war" />
- </target>
-
- <target name="rollback" depends="compile"
- description="Rolls back an interrupted application update.">
- <appcfg action="rollback" war="war" />
- </target>
-
- <target name="request_logs" description="Downloads log data from App Engine for the application.">
- <appcfg action="request_logs" war="war">
- <options>
- <arg value="--num_days=5"/>
- </options>
- <args>
- <arg value="logs.txt"/>
- </args>
- </appcfg>
- </target>
-</project>
diff --git a/demo/pom.xml b/demo/pom.xml
index 775474c8..76de20b9 100644
--- a/demo/pom.xml
+++ b/demo/pom.xml
@@ -3,73 +3,42 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>demo</artifactId>
- <version>8.12.46</version>
- <packaging>jar</packaging>
+ <version>8.12.54</version>
+ <packaging>war</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</parent>
<properties>
- <gae.version>1.9.32</gae.version>
+ <app.deploy.project>libphonenumber-hrd</app.deploy.project>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <maven.compiler.source>1.8</maven.compiler.source>
+ <maven.compiler.target>1.8</maven.compiler.target>
+ <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
+ <archiveClasses>true</archiveClasses>
</properties>
- <build>
- <sourceDirectory>src</sourceDirectory>
- <testSourceDirectory>test</testSourceDirectory>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
- <configuration>
- <source>1.7</source>
- <target>1.7</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <plugin>
- <groupId>net.kindleit</groupId>
- <artifactId>maven-gae-plugin</artifactId>
- <version>0.9.1</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.1.1</version>
- <configuration>
- <warSourceDirectory>war</warSourceDirectory>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <version>6.1.10</version>
- <configuration>
- <webAppSourceDirectory>webapp</webAppSourceDirectory>
- <scanIntervalSeconds>10</scanIntervalSeconds>
- <webAppConfig>
- <contextPath>/</contextPath>
- </webAppConfig>
- <connectors>
- <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
- <port>8080</port>
- <maxIdleTime>60000</maxIdleTime>
- </connector>
- </connectors>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
+ <prerequisites>
+ <maven>3.5</maven>
+ </prerequisites>
<dependencies>
+ <!-- Compile/runtime dependencies -->
+ <dependency>
+ <groupId>com.google.appengine</groupId>
+ <artifactId>appengine-api-1.0-sdk</artifactId>
+ <version>1.9.96</version>
+ </dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
+ <type>jar</type>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
@@ -79,7 +48,7 @@
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
- <version>1.3.3</version>
+ <version>1.4</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
@@ -89,18 +58,31 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>geocoder</artifactId>
- <version>2.182</version>
+ <version>2.190</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>carrier</artifactId>
- <version>1.172</version>
+ <version>1.180</version>
</dependency>
</dependencies>
+ <build>
+ <!-- for hot reload of the web application-->
+ <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
+ <plugins>
+ <plugin>
+ <groupId>com.google.cloud.tools</groupId>
+ <artifactId>appengine-maven-plugin</artifactId>
+ <version>1.3.1</version>
+ <configuration>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
diff --git a/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java b/demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java
index 40f0fa8f..40f0fa8f 100644
--- a/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java
+++ b/demo/src/main/java/com/google/phonenumbers/PhoneNumberParserServlet.java
diff --git a/demo/war/WEB-INF/appengine-web.xml b/demo/src/main/webapp/WEB-INF/appengine-web.xml
index 1a367eca..1a367eca 100644
--- a/demo/war/WEB-INF/appengine-web.xml
+++ b/demo/src/main/webapp/WEB-INF/appengine-web.xml
diff --git a/demo/war/WEB-INF/logging.properties b/demo/src/main/webapp/WEB-INF/logging.properties
index a1720668..0c2ea51b 100644
--- a/demo/war/WEB-INF/logging.properties
+++ b/demo/src/main/webapp/WEB-INF/logging.properties
@@ -3,7 +3,7 @@
#
# To use this configuration, copy it into your application's WEB-INF
# folder and add the following to your appengine-web.xml:
-#
+#
# <system-properties>
# <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
# </system-properties>
diff --git a/demo/war/WEB-INF/web.xml b/demo/src/main/webapp/WEB-INF/web.xml
index 5a4ba5c9..5a4ba5c9 100644
--- a/demo/war/WEB-INF/web.xml
+++ b/demo/src/main/webapp/WEB-INF/web.xml
diff --git a/demo/war/favicon.ico b/demo/src/main/webapp/favicon.ico
index 789f24fc..789f24fc 100644
--- a/demo/war/favicon.ico
+++ b/demo/src/main/webapp/favicon.ico
Binary files differ
diff --git a/demo/war/phonenumberparser.jsp b/demo/src/main/webapp/phonenumberparser.jsp
index 4e7b7f2f..4e7b7f2f 100644
--- a/demo/war/phonenumberparser.jsp
+++ b/demo/src/main/webapp/phonenumberparser.jsp
diff --git a/demo/war/stylesheets/main.css b/demo/src/main/webapp/stylesheets/main.css
index 80b8361a..80b8361a 100644
--- a/demo/war/stylesheets/main.css
+++ b/demo/src/main/webapp/stylesheets/main.css
diff --git a/demo/war/WEB-INF/lib/commons-fileupload-1.2.1.jar b/demo/war/WEB-INF/lib/commons-fileupload-1.2.1.jar
deleted file mode 100644
index aa209b38..00000000
--- a/demo/war/WEB-INF/lib/commons-fileupload-1.2.1.jar
+++ /dev/null
Binary files differ
diff --git a/demo/war/WEB-INF/lib/commons-io-1.4.jar b/demo/war/WEB-INF/lib/commons-io-1.4.jar
deleted file mode 100644
index 133dc6cb..00000000
--- a/demo/war/WEB-INF/lib/commons-io-1.4.jar
+++ /dev/null
Binary files differ
diff --git a/demo/war/WEB-INF/lib/commons-lang-2.6.jar b/demo/war/WEB-INF/lib/commons-lang-2.6.jar
deleted file mode 100644
index 98467d3a..00000000
--- a/demo/war/WEB-INF/lib/commons-lang-2.6.jar
+++ /dev/null
Binary files differ
diff --git a/demo/war/WEB-INF/lib/servlet-api-2.5.jar b/demo/war/WEB-INF/lib/servlet-api-2.5.jar
deleted file mode 100644
index fb524934..00000000
--- a/demo/war/WEB-INF/lib/servlet-api-2.5.jar
+++ /dev/null
Binary files differ
diff --git a/geocoder/pom.xml b/geocoder/pom.xml
index 37c7cc32..2802afc9 100644
--- a/geocoder/pom.xml
+++ b/geocoder/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>geocoder</artifactId>
- <version>2.182</version>
+ <version>2.190</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</parent>
<build>
@@ -63,12 +63,12 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</dependency>
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
- <version>2.182</version>
+ <version>2.190</version>
</dependency>
</dependencies>
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java b/geocoder/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
index a48ed903..f26cc103 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
@@ -20,6 +20,7 @@ import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import com.google.i18n.phonenumbers.prefixmapper.PrefixFileReader;
import java.util.List;
@@ -32,9 +33,7 @@ import java.util.Locale;
*/
public class PhoneNumberOfflineGeocoder {
private static PhoneNumberOfflineGeocoder instance = null;
- private static final String MAPPING_DATA_DIRECTORY =
- "/com/google/i18n/phonenumbers/geocoding/data/";
- private PrefixFileReader prefixFileReader = null;
+ private final PrefixFileReader prefixFileReader;
private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -54,7 +53,8 @@ public class PhoneNumberOfflineGeocoder {
*/
public static synchronized PhoneNumberOfflineGeocoder getInstance() {
if (instance == null) {
- instance = new PhoneNumberOfflineGeocoder(MAPPING_DATA_DIRECTORY);
+ instance = new PhoneNumberOfflineGeocoder(DefaultMetadataDependenciesProvider.getInstance()
+ .getGeocodingDataDirectory());
}
return instance;
}
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1263_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1263_en
new file mode 100644
index 00000000..04e95159
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1263_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1310_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1310_en
index 26fd3041..edb45ee7 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1310_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1310_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1468_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1468_en
new file mode 100644
index 00000000..93016187
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1468_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1584_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1584_en
new file mode 100644
index 00000000..41d8570b
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1584_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1656_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1656_en
new file mode 100644
index 00000000..8625c98f
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1656_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1826_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1826_en
new file mode 100644
index 00000000..2eda79af
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1826_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1943_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1943_en
new file mode 100644
index 00000000..6cf5625e
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1943_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1948_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1948_en
new file mode 100644
index 00000000..9577cef8
--- /dev/null
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1948_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en
index 2ae8176b..9a806f96 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr
index 9016b0d0..92f3a0ce 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_en
index c94e1399..d8b8de7d 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_en
index 4e81c8af..ced2084e 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_es b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_es
index 3ab2985b..fe9f8a59 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_es
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_es
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_en
index 61f0da1e..5d925521 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en
index b40793e7..0b9330fd 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_en
index e51cd55d..e1006cd9 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_en
index 53245827..a277f96d 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_en
index ec254fad..fde61aae 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_en b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_en
index e56bfb93..b5cd9779 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_en
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_en
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config
index 49659897..909cabf3 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config
+++ b/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config
Binary files differ
diff --git a/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data b/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data
index a2c80e64..aaa5ddfe 100644
--- a/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data
+++ b/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data
Binary files differ
diff --git a/internal/prefixmapper/pom.xml b/internal/prefixmapper/pom.xml
index 47770b85..441cc8f6 100644
--- a/internal/prefixmapper/pom.xml
+++ b/internal/prefixmapper/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>prefixmapper</artifactId>
- <version>2.182</version>
+ <version>2.190</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -50,7 +50,7 @@
<dependency>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</dependency>
</dependencies>
diff --git a/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReader.java b/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReader.java
index 8a4fde70..6033b678 100644
--- a/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReader.java
+++ b/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReader.java
@@ -16,8 +16,10 @@
package com.google.i18n.phonenumbers.prefixmapper;
+import com.google.i18n.phonenumbers.MetadataLoader;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
@@ -40,17 +42,17 @@ public class PrefixFileReader {
private MappingFileProvider mappingFileProvider = new MappingFileProvider();
// A mapping from countryCallingCode_lang to the corresponding phone prefix map that has been
// loaded.
- private Map<String, PhonePrefixMap> availablePhonePrefixMaps =
- new HashMap<String, PhonePrefixMap>();
+ private Map<String, PhonePrefixMap> availablePhonePrefixMaps = new HashMap<>();
+ private final MetadataLoader metadataLoader;
public PrefixFileReader(String phonePrefixDataDirectory) {
this.phonePrefixDataDirectory = phonePrefixDataDirectory;
+ this.metadataLoader = DefaultMetadataDependenciesProvider.getInstance().getMetadataLoader();
loadMappingFileProvider();
}
private void loadMappingFileProvider() {
- InputStream source =
- PrefixFileReader.class.getResourceAsStream(phonePrefixDataDirectory + "config");
+ InputStream source = metadataLoader.loadMetadata(phonePrefixDataDirectory + "config");
ObjectInputStream in = null;
try {
in = new ObjectInputStream(source);
@@ -75,8 +77,7 @@ public class PrefixFileReader {
}
private void loadPhonePrefixMapFromFile(String fileName) {
- InputStream source =
- PrefixFileReader.class.getResourceAsStream(phonePrefixDataDirectory + fileName);
+ InputStream source = metadataLoader.loadMetadata(phonePrefixDataDirectory + fileName);
ObjectInputStream in = null;
try {
in = new ObjectInputStream(source);
diff --git a/lib/mockito-all-1.10.19.jar b/lib/mockito-all-1.10.19.jar
new file mode 100644
index 00000000..c831489c
--- /dev/null
+++ b/lib/mockito-all-1.10.19.jar
Binary files differ
diff --git a/libphonenumber/pom.xml b/libphonenumber/pom.xml
index eb163163..332ec818 100644
--- a/libphonenumber/pom.xml
+++ b/libphonenumber/pom.xml
@@ -3,14 +3,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
<packaging>jar</packaging>
<url>https://github.com/google/libphonenumber/</url>
<parent>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
</parent>
<build>
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java b/libphonenumber/src/com/google/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
index 834c9d80..3975c2d3 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
@@ -25,7 +25,7 @@ import java.util.Set;
public class AlternateFormatsCountryCodeSet {
// A set of all country codes for which data is available.
- static Set<Integer> getCountryCodeSet() {
+ public static Set<Integer> getCountryCodeSet() {
// The capacity is set to 61 as there are 46 different entries,
// and this offers a load factor of roughly 0.75.
Set<Integer> countryCodeSet = new HashSet<Integer>(61);
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java b/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
index 159f940d..06571d15 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
@@ -30,7 +30,7 @@ public class CountryCodeToRegionCodeMap {
// country/region represented by that country code. In the case of multiple
// countries sharing a calling code, such as the NANPA countries, the one
// indicated with "isMainCountryForCode" in the metadata should be first.
- static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
+ public static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
// The capacity is set to 286 as there are 215 different entries,
// and this offers a load factor of roughly 0.75.
Map<Integer, List<String>> countryCodeToRegionCodeMap =
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java b/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java
deleted file mode 100644
index 5c072d6a..00000000
--- a/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (C) 2012 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.google.i18n.phonenumbers;
-
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Manager for loading metadata for alternate formats and short numbers. We also declare some
- * constants for phone number metadata loading, to more easily maintain all three types of metadata
- * together.
- * TODO: Consider managing phone number metadata loading here too.
- */
-final class MetadataManager {
- static final String MULTI_FILE_PHONE_NUMBER_METADATA_FILE_PREFIX =
- "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto";
- static final String SINGLE_FILE_PHONE_NUMBER_METADATA_FILE_NAME =
- "/com/google/i18n/phonenumbers/data/SingleFilePhoneNumberMetadataProto";
- private static final String ALTERNATE_FORMATS_FILE_PREFIX =
- "/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto";
- private static final String SHORT_NUMBER_METADATA_FILE_PREFIX =
- "/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto";
-
- static final MetadataLoader DEFAULT_METADATA_LOADER = new MetadataLoader() {
- @Override
- public InputStream loadMetadata(String metadataFileName) {
- return MetadataManager.class.getResourceAsStream(metadataFileName);
- }
- };
-
- private static final Logger logger = Logger.getLogger(MetadataManager.class.getName());
-
- // A mapping from a country calling code to the alternate formats for that country calling code.
- private static final ConcurrentHashMap<Integer, PhoneMetadata> alternateFormatsMap =
- new ConcurrentHashMap<Integer, PhoneMetadata>();
-
- // A mapping from a region code to the short number metadata for that region code.
- private static final ConcurrentHashMap<String, PhoneMetadata> shortNumberMetadataMap =
- new ConcurrentHashMap<String, PhoneMetadata>();
-
- // The set of country calling codes for which there are alternate formats. For every country
- // calling code in this set there should be metadata linked into the resources.
- private static final Set<Integer> alternateFormatsCountryCodes =
- AlternateFormatsCountryCodeSet.getCountryCodeSet();
-
- // The set of region codes for which there are short number metadata. For every region code in
- // this set there should be metadata linked into the resources.
- private static final Set<String> shortNumberMetadataRegionCodes =
- ShortNumbersRegionCodeSet.getRegionCodeSet();
-
- private MetadataManager() {}
-
- static PhoneMetadata getAlternateFormatsForCountry(int countryCallingCode) {
- if (!alternateFormatsCountryCodes.contains(countryCallingCode)) {
- return null;
- }
- return getMetadataFromMultiFilePrefix(countryCallingCode, alternateFormatsMap,
- ALTERNATE_FORMATS_FILE_PREFIX, DEFAULT_METADATA_LOADER);
- }
-
- static PhoneMetadata getShortNumberMetadataForRegion(String regionCode) {
- if (!shortNumberMetadataRegionCodes.contains(regionCode)) {
- return null;
- }
- return getMetadataFromMultiFilePrefix(regionCode, shortNumberMetadataMap,
- SHORT_NUMBER_METADATA_FILE_PREFIX, DEFAULT_METADATA_LOADER);
- }
-
- static Set<String> getSupportedShortNumberRegions() {
- return Collections.unmodifiableSet(shortNumberMetadataRegionCodes);
- }
-
- /**
- * @param key the lookup key for the provided map, typically a region code or a country calling
- * code
- * @param map the map containing mappings of already loaded metadata from their {@code key}. If
- * this {@code key}'s metadata isn't already loaded, it will be added to this map after
- * loading
- * @param filePrefix the prefix of the file to load metadata from
- * @param metadataLoader the metadata loader used to inject alternative metadata sources
- */
- static <T> PhoneMetadata getMetadataFromMultiFilePrefix(T key,
- ConcurrentHashMap<T, PhoneMetadata> map, String filePrefix, MetadataLoader metadataLoader) {
- PhoneMetadata metadata = map.get(key);
- if (metadata != null) {
- return metadata;
- }
- // We assume key.toString() is well-defined.
- String fileName = filePrefix + "_" + key;
- List<PhoneMetadata> metadataList = getMetadataFromSingleFileName(fileName, metadataLoader);
- if (metadataList.size() > 1) {
- logger.log(Level.WARNING, "more than one metadata in file " + fileName);
- }
- metadata = metadataList.get(0);
- PhoneMetadata oldValue = map.putIfAbsent(key, metadata);
- return (oldValue != null) ? oldValue : metadata;
- }
-
- // Loader and holder for the metadata maps loaded from a single file.
- static class SingleFileMetadataMaps {
- static SingleFileMetadataMaps load(String fileName, MetadataLoader metadataLoader) {
- List<PhoneMetadata> metadataList = getMetadataFromSingleFileName(fileName, metadataLoader);
- Map<String, PhoneMetadata> regionCodeToMetadata = new HashMap<String, PhoneMetadata>();
- Map<Integer, PhoneMetadata> countryCallingCodeToMetadata =
- new HashMap<Integer, PhoneMetadata>();
- for (PhoneMetadata metadata : metadataList) {
- String regionCode = metadata.getId();
- if (PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCode)) {
- // regionCode belongs to a non-geographical entity.
- countryCallingCodeToMetadata.put(metadata.getCountryCode(), metadata);
- } else {
- regionCodeToMetadata.put(regionCode, metadata);
- }
- }
- return new SingleFileMetadataMaps(regionCodeToMetadata, countryCallingCodeToMetadata);
- }
-
- // A map from a region code to the PhoneMetadata for that region.
- // For phone number metadata, the region code "001" is excluded, since that is used for the
- // non-geographical phone number entities.
- private final Map<String, PhoneMetadata> regionCodeToMetadata;
-
- // A map from a country calling code to the PhoneMetadata for that country calling code.
- // Examples of the country calling codes include 800 (International Toll Free Service) and 808
- // (International Shared Cost Service).
- // For phone number metadata, only the non-geographical phone number entities' country calling
- // codes are present.
- private final Map<Integer, PhoneMetadata> countryCallingCodeToMetadata;
-
- private SingleFileMetadataMaps(Map<String, PhoneMetadata> regionCodeToMetadata,
- Map<Integer, PhoneMetadata> countryCallingCodeToMetadata) {
- this.regionCodeToMetadata = Collections.unmodifiableMap(regionCodeToMetadata);
- this.countryCallingCodeToMetadata = Collections.unmodifiableMap(countryCallingCodeToMetadata);
- }
-
- PhoneMetadata get(String regionCode) {
- return regionCodeToMetadata.get(regionCode);
- }
-
- PhoneMetadata get(int countryCallingCode) {
- return countryCallingCodeToMetadata.get(countryCallingCode);
- }
- }
-
- // Manages the atomic reference lifecycle of a SingleFileMetadataMaps encapsulation.
- static SingleFileMetadataMaps getSingleFileMetadataMaps(
- AtomicReference<SingleFileMetadataMaps> ref, String fileName, MetadataLoader metadataLoader) {
- SingleFileMetadataMaps maps = ref.get();
- if (maps != null) {
- return maps;
- }
- maps = SingleFileMetadataMaps.load(fileName, metadataLoader);
- ref.compareAndSet(null, maps);
- return ref.get();
- }
-
- private static List<PhoneMetadata> getMetadataFromSingleFileName(String fileName,
- MetadataLoader metadataLoader) {
- InputStream source = metadataLoader.loadMetadata(fileName);
- if (source == null) {
- // Sanity check; this would only happen if we packaged jars incorrectly.
- throw new IllegalStateException("missing metadata: " + fileName);
- }
- PhoneMetadataCollection metadataCollection = loadMetadataAndCloseInput(source);
- List<PhoneMetadata> metadataList = metadataCollection.getMetadataList();
- if (metadataList.size() == 0) {
- // Sanity check; this should not happen since we build with non-empty metadata.
- throw new IllegalStateException("empty metadata: " + fileName);
- }
- return metadataList;
- }
-
- /**
- * Loads and returns the metadata from the given stream and closes the stream.
- *
- * @param source the non-null stream from which metadata is to be read
- * @return the loaded metadata
- */
- private static PhoneMetadataCollection loadMetadataAndCloseInput(InputStream source) {
- ObjectInputStream ois = null;
- try {
- try {
- ois = new ObjectInputStream(source);
- } catch (IOException e) {
- throw new RuntimeException("cannot load/parse metadata", e);
- }
- PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection();
- try {
- metadataCollection.readExternal(ois);
- } catch (IOException e) {
- throw new RuntimeException("cannot load/parse metadata", e);
- }
- return metadataCollection;
- } finally {
- try {
- if (ois != null) {
- // This will close all underlying streams as well, including source.
- ois.close();
- } else {
- source.close();
- }
- } catch (IOException e) {
- logger.log(Level.WARNING, "error closing input stream (ignored)", e);
- }
- }
- }
-}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/MissingMetadataException.java b/libphonenumber/src/com/google/i18n/phonenumbers/MissingMetadataException.java
new file mode 100644
index 00000000..c2a8544c
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/MissingMetadataException.java
@@ -0,0 +1,9 @@
+package com.google.i18n.phonenumbers;
+
+/** Exception class for cases when expected metadata cannot be found. */
+public final class MissingMetadataException extends IllegalStateException {
+
+ public MissingMetadataException(String message) {
+ super(message);
+ }
+} \ No newline at end of file
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/MultiFileMetadataSourceImpl.java b/libphonenumber/src/com/google/i18n/phonenumbers/MultiFileMetadataSourceImpl.java
deleted file mode 100644
index 9a0b8e69..00000000
--- a/libphonenumber/src/com/google/i18n/phonenumbers/MultiFileMetadataSourceImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2015 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.google.i18n.phonenumbers;
-
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Implementation of {@link MetadataSource} that reads from multiple resource files.
- */
-final class MultiFileMetadataSourceImpl implements MetadataSource {
- // The prefix of the binary files containing phone number metadata for different regions.
- // This enables us to set up with different metadata, such as for testing.
- private final String phoneNumberMetadataFilePrefix;
-
- // The {@link MetadataLoader} used to inject alternative metadata sources.
- private final MetadataLoader metadataLoader;
-
- // A mapping from a region code to the phone number metadata for that region code.
- // Unlike the mappings for alternate formats and short number metadata, the phone number metadata
- // is loaded from a non-statically determined file prefix; therefore this map is bound to the
- // instance and not static.
- private final ConcurrentHashMap<String, PhoneMetadata> geographicalRegions =
- new ConcurrentHashMap<String, PhoneMetadata>();
-
- // A mapping from a country calling code for a non-geographical entity to the phone number
- // metadata for that country calling code. Examples of the country calling codes include 800
- // (International Toll Free Service) and 808 (International Shared Cost Service).
- // Unlike the mappings for alternate formats and short number metadata, the phone number metadata
- // is loaded from a non-statically determined file prefix; therefore this map is bound to the
- // instance and not static.
- private final ConcurrentHashMap<Integer, PhoneMetadata> nonGeographicalRegions =
- new ConcurrentHashMap<Integer, PhoneMetadata>();
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- // @VisibleForTesting
- MultiFileMetadataSourceImpl(String phoneNumberMetadataFilePrefix, MetadataLoader metadataLoader) {
- this.phoneNumberMetadataFilePrefix = phoneNumberMetadataFilePrefix;
- this.metadataLoader = metadataLoader;
- }
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- MultiFileMetadataSourceImpl(MetadataLoader metadataLoader) {
- this(MetadataManager.MULTI_FILE_PHONE_NUMBER_METADATA_FILE_PREFIX, metadataLoader);
- }
-
- @Override
- public PhoneMetadata getMetadataForRegion(String regionCode) {
- return MetadataManager.getMetadataFromMultiFilePrefix(regionCode, geographicalRegions,
- phoneNumberMetadataFilePrefix, metadataLoader);
- }
-
- @Override
- public PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
- if (!isNonGeographical(countryCallingCode)) {
- // The given country calling code was for a geographical region.
- return null;
- }
- return MetadataManager.getMetadataFromMultiFilePrefix(countryCallingCode, nonGeographicalRegions,
- phoneNumberMetadataFilePrefix, metadataLoader);
- }
-
- // A country calling code is non-geographical if it only maps to the non-geographical region code,
- // i.e. "001".
- private boolean isNonGeographical(int countryCallingCode) {
- List<String> regionCodes =
- CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap().get(countryCallingCode);
- return (regionCodes.size() == 1
- && PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCodes.get(0)));
- }
-}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java b/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
index c7bde8e1..b812551d 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java
@@ -24,6 +24,7 @@ import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.google.i18n.phonenumbers.internal.RegexCache;
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import java.lang.Character.UnicodeBlock;
import java.util.Iterator;
import java.util.NoSuchElementException;
@@ -575,7 +576,9 @@ final class PhoneNumberMatcher implements Iterator<PhoneNumberMatch> {
}
// If this didn't pass, see if there are any alternate formats that match, and try them instead.
PhoneMetadata alternateFormats =
- MetadataManager.getAlternateFormatsForCountry(number.getCountryCode());
+ DefaultMetadataDependenciesProvider.getInstance()
+ .getAlternateFormatsMetadataSource()
+ .getFormattingMetadataForCountryCallingCode(number.getCountryCode());
String nationalSignificantNumber = util.getNationalSignificantNumber(number);
if (alternateFormats != null) {
for (NumberFormat alternateFormat : alternateFormats.getNumberFormatList()) {
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
index 646b1345..200bea5a 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
@@ -24,11 +24,12 @@ import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
import com.google.i18n.phonenumbers.internal.MatcherApi;
import com.google.i18n.phonenumbers.internal.RegexBasedMatcher;
import com.google.i18n.phonenumbers.internal.RegexCache;
-
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
+import com.google.i18n.phonenumbers.metadata.source.MetadataSource;
+import com.google.i18n.phonenumbers.metadata.source.MetadataSourceImpl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -73,10 +74,6 @@ public class PhoneNumberUtil {
private static final int NANPA_COUNTRY_CODE = 1;
- // The prefix that needs to be inserted in front of a Colombian landline number when dialed from
- // a mobile phone in Colombia.
- private static final String COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX = "3";
-
// Map of country calling codes that use a mobile token before the area code. One example of when
// this is relevant is when determining the length of the national destination code, which should
// be the length of the area code plus the length of the mobile token.
@@ -121,16 +118,16 @@ public class PhoneNumberUtil {
private static final Map<Character, Character> ALL_PLUS_NUMBER_GROUPING_SYMBOLS;
static {
- HashMap<Integer, String> mobileTokenMap = new HashMap<Integer, String>();
+ HashMap<Integer, String> mobileTokenMap = new HashMap<>();
mobileTokenMap.put(54, "9");
MOBILE_TOKEN_MAPPINGS = Collections.unmodifiableMap(mobileTokenMap);
- HashSet<Integer> geoMobileCountriesWithoutMobileAreaCodes = new HashSet<Integer>();
+ HashSet<Integer> geoMobileCountriesWithoutMobileAreaCodes = new HashSet<>();
geoMobileCountriesWithoutMobileAreaCodes.add(86); // China
GEO_MOBILE_COUNTRIES_WITHOUT_MOBILE_AREA_CODES =
Collections.unmodifiableSet(geoMobileCountriesWithoutMobileAreaCodes);
- HashSet<Integer> geoMobileCountries = new HashSet<Integer>();
+ HashSet<Integer> geoMobileCountries = new HashSet<>();
geoMobileCountries.add(52); // Mexico
geoMobileCountries.add(54); // Argentina
geoMobileCountries.add(55); // Brazil
@@ -140,7 +137,7 @@ public class PhoneNumberUtil {
// Simple ASCII digits map used to populate ALPHA_PHONE_MAPPINGS and
// ALL_PLUS_NUMBER_GROUPING_SYMBOLS.
- HashMap<Character, Character> asciiDigitMappings = new HashMap<Character, Character>();
+ HashMap<Character, Character> asciiDigitMappings = new HashMap<>();
asciiDigitMappings.put('0', '0');
asciiDigitMappings.put('1', '1');
asciiDigitMappings.put('2', '2');
@@ -152,7 +149,7 @@ public class PhoneNumberUtil {
asciiDigitMappings.put('8', '8');
asciiDigitMappings.put('9', '9');
- HashMap<Character, Character> alphaMap = new HashMap<Character, Character>(40);
+ HashMap<Character, Character> alphaMap = new HashMap<>(40);
alphaMap.put('A', '2');
alphaMap.put('B', '2');
alphaMap.put('C', '2');
@@ -181,19 +178,19 @@ public class PhoneNumberUtil {
alphaMap.put('Z', '9');
ALPHA_MAPPINGS = Collections.unmodifiableMap(alphaMap);
- HashMap<Character, Character> combinedMap = new HashMap<Character, Character>(100);
+ HashMap<Character, Character> combinedMap = new HashMap<>(100);
combinedMap.putAll(ALPHA_MAPPINGS);
combinedMap.putAll(asciiDigitMappings);
ALPHA_PHONE_MAPPINGS = Collections.unmodifiableMap(combinedMap);
- HashMap<Character, Character> diallableCharMap = new HashMap<Character, Character>();
+ HashMap<Character, Character> diallableCharMap = new HashMap<>();
diallableCharMap.putAll(asciiDigitMappings);
diallableCharMap.put(PLUS_SIGN, PLUS_SIGN);
diallableCharMap.put('*', '*');
diallableCharMap.put('#', '#');
DIALLABLE_CHAR_MAPPINGS = Collections.unmodifiableMap(diallableCharMap);
- HashMap<Character, Character> allPlusNumberGroupings = new HashMap<Character, Character>();
+ HashMap<Character, Character> allPlusNumberGroupings = new HashMap<>();
// Put (lower letter -> upper letter) and (upper letter -> upper letter) mappings.
for (char c : ALPHA_MAPPINGS.keySet()) {
allPlusNumberGroupings.put(Character.toLowerCase(c), c);
@@ -308,8 +305,8 @@ public class PhoneNumberUtil {
// version.
private static final String EXTN_PATTERNS_FOR_PARSING = createExtnPattern(true);
static final String EXTN_PATTERNS_FOR_MATCHING = createExtnPattern(false);
-
- /**
+
+ /**
* Helper method for constructing regular expressions for parsing. Creates an expression that
* captures up to maxLength digits.
*/
@@ -659,7 +656,7 @@ public class PhoneNumberUtil {
// The set of regions that share country calling code 1.
// 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);
+ private final Set<String> nanpaRegions = new HashSet<>(35);
// A cache for frequently used region-specific regular expressions.
// The initial capacity is set to 100 as this seems to be an optimal value for Android, based on
@@ -669,11 +666,11 @@ public class PhoneNumberUtil {
// The set of regions the library supports.
// There are roughly 240 of them and we set the initial capacity of the HashSet to 320 to offer a
// load factor of roughly 0.75.
- private final Set<String> supportedRegions = new HashSet<String>(320);
+ private final Set<String> supportedRegions = new HashSet<>(320);
// The set of country calling codes that map to the non-geo entity region ("001"). This set
// currently contains < 12 elements so the default capacity of 16 (load factor=0.75) is fine.
- private final Set<Integer> countryCodesForNonGeographicalRegion = new HashSet<Integer>();
+ private final Set<Integer> countryCodesForNonGeographicalRegion = new HashSet<>();
/**
* This class implements a singleton, the constructor is only visible to facilitate testing.
@@ -1089,7 +1086,7 @@ public class PhoneNumberUtil {
* be non-null.
*/
private Set<PhoneNumberType> getSupportedTypesForMetadata(PhoneMetadata metadata) {
- Set<PhoneNumberType> types = new TreeSet<PhoneNumberType>();
+ Set<PhoneNumberType> types = new TreeSet<>();
for (PhoneNumberType type : PhoneNumberType.values()) {
if (type == PhoneNumberType.FIXED_LINE_OR_MOBILE || type == PhoneNumberType.UNKNOWN) {
// Never return FIXED_LINE_OR_MOBILE (it is a convenience type, and represents that a
@@ -1149,7 +1146,9 @@ public class PhoneNumberUtil {
*/
public static synchronized PhoneNumberUtil getInstance() {
if (instance == null) {
- setInstance(createInstance(MetadataManager.DEFAULT_METADATA_LOADER));
+ MetadataLoader metadataLoader = DefaultMetadataDependenciesProvider.getInstance()
+ .getMetadataLoader();
+ setInstance(createInstance(metadataLoader));
}
return instance;
}
@@ -1170,7 +1169,11 @@ public class PhoneNumberUtil {
if (metadataLoader == null) {
throw new IllegalArgumentException("metadataLoader could not be null.");
}
- return createInstance(new MultiFileMetadataSourceImpl(metadataLoader));
+ return createInstance(new MetadataSourceImpl(
+ DefaultMetadataDependenciesProvider.getInstance().getPhoneNumberMetadataFileNameProvider(),
+ metadataLoader,
+ DefaultMetadataDependenciesProvider.getInstance().getMetadataParser()
+ ));
}
/**
@@ -1464,10 +1467,7 @@ public class PhoneNumberUtil {
(numberType == PhoneNumberType.FIXED_LINE) || (numberType == PhoneNumberType.MOBILE)
|| (numberType == PhoneNumberType.FIXED_LINE_OR_MOBILE);
// Carrier codes may be needed in some countries. We handle this here.
- if (regionCode.equals("CO") && numberType == PhoneNumberType.FIXED_LINE) {
- formattedNumber =
- formatNationalNumberWithCarrierCode(numberNoExt, COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX);
- } else if (regionCode.equals("BR") && isFixedLineOrMobile) {
+ if (regionCode.equals("BR") && isFixedLineOrMobile) {
// Historically, we set this to an empty string when parsing with raw input if none was
// found in the input string. However, this doesn't result in a number we can dial. For this
// reason, we treat the empty string the same as if it isn't set at all.
@@ -1608,19 +1608,21 @@ public class PhoneNumberUtil {
}
/**
- * Formats a phone number using the original phone number format that the number is parsed from.
- * The original format is embedded in the country_code_source field of the PhoneNumber object
- * passed in. If such information is missing, the number will be formatted into the NATIONAL
- * format by default. When we don't have a formatting pattern for the number, the method returns
- * the raw input when it is available.
+ * Formats a phone number using the original phone number format (e.g. INTERNATIONAL or NATIONAL)
+ * that the number is parsed from, provided that the number has been parsed with {@link
+ * parseAndKeepRawInput}. Otherwise the number will be formatted in NATIONAL format.
+ *
+ * <p>The original format is embedded in the country_code_source field of the PhoneNumber object
+ * passed in, which is only set when parsing keeps the raw input. When we don't have a formatting
+ * pattern for the number, the method falls back to returning the raw input.
*
- * Note this method guarantees no digit will be inserted, removed or modified as a result of
+ * <p>Note this method guarantees no digit will be inserted, removed or modified as a result of
* formatting.
*
- * @param number the phone number that needs to be formatted in its original number format
- * @param regionCallingFrom the region whose IDD needs to be prefixed if the original number
- * has one
- * @return the formatted phone number in its original number format
+ * @param number the phone number that needs to be formatted in its original number format
+ * @param regionCallingFrom the region whose IDD needs to be prefixed if the original number has
+ * one
+ * @return the formatted phone number in its original number format
*/
public String formatInOriginalFormat(PhoneNumber number, String regionCallingFrom) {
if (number.hasRawInput() && !hasFormattingPatternForNumber(number)) {
@@ -1699,7 +1701,7 @@ public class PhoneNumberUtil {
NumberFormat.Builder numFormatCopy = NumberFormat.newBuilder();
numFormatCopy.mergeFrom(formatRule);
numFormatCopy.clearNationalPrefixFormattingRule();
- List<NumberFormat> numberFormats = new ArrayList<NumberFormat>(1);
+ List<NumberFormat> numberFormats = new ArrayList<>(1);
numberFormats.add(numFormatCopy.build());
formattedNumber = formatByPattern(number, PhoneNumberFormat.NATIONAL, numberFormats);
break;
@@ -2275,21 +2277,42 @@ public class PhoneNumberUtil {
}
/**
- * Returns the metadata for the given region code or {@code null} if the region code is invalid
- * or unknown.
+ * Returns the metadata for the given region code or {@code null} if the region code is invalid or
+ * unknown.
+ *
+ * @throws MissingMetadataException if the region code is valid, but metadata cannot be found.
*/
PhoneMetadata getMetadataForRegion(String regionCode) {
if (!isValidRegionCode(regionCode)) {
return null;
}
- return metadataSource.getMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = metadataSource.getMetadataForRegion(regionCode);
+ ensureMetadataIsNonNull(phoneMetadata, "Missing metadata for region code " + regionCode);
+ return phoneMetadata;
}
+ /**
+ * Returns the metadata for the given country calling code or {@code null} if the country calling
+ * code is invalid or unknown.
+ *
+ * @throws MissingMetadataException if the country calling code is valid, but metadata cannot be
+ * found.
+ */
PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
- if (!countryCallingCodeToRegionCodeMap.containsKey(countryCallingCode)) {
+ if (!countryCodesForNonGeographicalRegion.contains(countryCallingCode)) {
return null;
}
- return metadataSource.getMetadataForNonGeographicalRegion(countryCallingCode);
+ PhoneMetadata phoneMetadata = metadataSource.getMetadataForNonGeographicalRegion(
+ countryCallingCode);
+ ensureMetadataIsNonNull(phoneMetadata,
+ "Missing metadata for country code " + countryCallingCode);
+ return phoneMetadata;
+ }
+
+ private static void ensureMetadataIsNonNull(PhoneMetadata phoneMetadata, String message) {
+ if (phoneMetadata == null) {
+ throw new MissingMetadataException(message);
+ }
}
boolean isNumberMatchingDesc(String nationalNumber, PhoneNumberDesc numberDesc) {
@@ -2585,7 +2608,7 @@ public class PhoneNumberUtil {
PhoneNumberDesc mobileDesc = getNumberDescByType(metadata, PhoneNumberType.MOBILE);
if (descHasPossibleNumberData(mobileDesc)) {
// Merge the mobile data in if there was any. We have to make a copy to do this.
- possibleLengths = new ArrayList<Integer>(possibleLengths);
+ possibleLengths = new ArrayList<>(possibleLengths);
// Note that when adding the possible lengths from mobile, we have to again check they
// aren't empty since if they are this indicates they are the same as the general desc and
// should be obtained from there.
@@ -2599,7 +2622,7 @@ public class PhoneNumberUtil {
if (localLengths.isEmpty()) {
localLengths = mobileDesc.getPossibleLengthLocalOnlyList();
} else {
- localLengths = new ArrayList<Integer>(localLengths);
+ localLengths = new ArrayList<>(localLengths);
localLengths.addAll(mobileDesc.getPossibleLengthLocalOnlyList());
Collections.sort(localLengths);
}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java b/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
index 3e7df59e..7ce2972b 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
@@ -22,6 +22,8 @@ import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
+import com.google.i18n.phonenumbers.metadata.source.RegionMetadataSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -44,12 +46,13 @@ public class ShortNumberInfo {
private static final Logger logger = Logger.getLogger(ShortNumberInfo.class.getName());
private static final ShortNumberInfo INSTANCE =
- new ShortNumberInfo(RegexBasedMatcher.create());
+ new ShortNumberInfo(
+ RegexBasedMatcher.create(),
+ DefaultMetadataDependenciesProvider.getInstance().getShortNumberMetadataSource());
// In these countries, if extra digits are added to an emergency number, it no longer connects
// to the emergency service.
- private static final Set<String> REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT =
- new HashSet<String>();
+ private static final Set<String> REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT = new HashSet<>();
static {
REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.add("BR");
REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.add("CL");
@@ -61,7 +64,7 @@ public class ShortNumberInfo {
TOLL_FREE,
STANDARD_RATE,
PREMIUM_RATE,
- UNKNOWN_COST;
+ UNKNOWN_COST
}
/** Returns the singleton instance of the ShortNumberInfo. */
@@ -79,9 +82,13 @@ public class ShortNumberInfo {
// first.
private final Map<Integer, List<String>> countryCallingCodeToRegionCodeMap;
+ private final RegionMetadataSource shortNumberMetadataSource;
+
// @VisibleForTesting
- ShortNumberInfo(MatcherApi matcherApi) {
+ ShortNumberInfo(MatcherApi matcherApi,
+ RegionMetadataSource shortNumberMetadataSource) {
this.matcherApi = matcherApi;
+ this.shortNumberMetadataSource = shortNumberMetadataSource;
// TODO: Create ShortNumberInfo for a given map
this.countryCallingCodeToRegionCodeMap =
CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap();
@@ -109,6 +116,21 @@ public class ShortNumberInfo {
}
/**
+ * A thin wrapper around {@code shortNumberMetadataSource} which catches {@link
+ * IllegalArgumentException} for invalid region code and instead returns {@code null}
+ */
+ private PhoneMetadata getShortNumberMetadataForRegion(String regionCode) {
+ if (regionCode == null) {
+ return null;
+ }
+ try {
+ return shortNumberMetadataSource.getMetadataForRegion(regionCode);
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+ }
+
+ /**
* Check whether a short number is a possible number when dialed from the given region. This
* provides a more lenient check than {@link #isValidShortNumberForRegion}.
*
@@ -120,8 +142,7 @@ public class ShortNumberInfo {
if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
return false;
}
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return false;
}
@@ -142,7 +163,7 @@ public class ShortNumberInfo {
List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
int shortNumberLength = getNationalSignificantNumber(number).length();
for (String region : regionCodes) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(region);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(region);
if (phoneMetadata == null) {
continue;
}
@@ -166,8 +187,7 @@ public class ShortNumberInfo {
if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
return false;
}
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return false;
}
@@ -228,8 +248,7 @@ public class ShortNumberInfo {
return ShortNumberCost.UNKNOWN_COST;
}
// Note that regionDialingFrom may be null, in which case phoneMetadata will also be null.
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(
- regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return ShortNumberCost.UNKNOWN_COST;
}
@@ -326,7 +345,7 @@ public class ShortNumberInfo {
}
String nationalNumber = getNationalSignificantNumber(number);
for (String regionCode : regionCodes) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata != null
&& matchesPossibleNumberAndNationalNumber(nationalNumber, phoneMetadata.getShortCode())) {
// The number is valid for this region.
@@ -337,13 +356,6 @@ public class ShortNumberInfo {
}
/**
- * Convenience method to get a list of what regions the library has metadata for.
- */
- Set<String> getSupportedRegions() {
- return MetadataManager.getSupportedShortNumberRegions();
- }
-
- /**
* Gets a valid short number for the specified region.
*
* @param regionCode the region for which an example short number is needed
@@ -352,7 +364,7 @@ public class ShortNumberInfo {
*/
// @VisibleForTesting
String getExampleShortNumber(String regionCode) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata == null) {
return "";
}
@@ -373,7 +385,7 @@ public class ShortNumberInfo {
*/
// @VisibleForTesting
String getExampleShortNumberForCost(String regionCode, ShortNumberCost cost) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata == null) {
return "";
}
@@ -441,7 +453,7 @@ public class ShortNumberInfo {
// add additional logic here to handle it.
return false;
}
- PhoneMetadata metadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata metadata = getShortNumberMetadataForRegion(regionCode);
if (metadata == null || !metadata.hasEmergency()) {
return false;
}
@@ -468,7 +480,7 @@ public class ShortNumberInfo {
List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
String regionCode = getRegionCodeForShortNumberFromRegionList(number, regionCodes);
String nationalNumber = getNationalSignificantNumber(number);
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
return (phoneMetadata != null)
&& (matchesPossibleNumberAndNationalNumber(nationalNumber,
phoneMetadata.getCarrierSpecific()));
@@ -492,8 +504,7 @@ public class ShortNumberInfo {
return false;
}
String nationalNumber = getNationalSignificantNumber(number);
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
return (phoneMetadata != null)
&& (matchesPossibleNumberAndNationalNumber(nationalNumber,
phoneMetadata.getCarrierSpecific()));
@@ -516,8 +527,7 @@ public class ShortNumberInfo {
if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
return false;
}
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
return phoneMetadata != null
&& matchesPossibleNumberAndNationalNumber(getNationalSignificantNumber(number),
phoneMetadata.getSmsServices());
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java b/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
index 4b5e8b07..e2046b0c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
@@ -25,7 +25,7 @@ import java.util.Set;
public class ShortNumbersRegionCodeSet {
// A set of all region codes for which data is available.
- static Set<String> getRegionCodeSet() {
+ public static Set<String> getRegionCodeSet() {
// The capacity is set to 321 as there are 241 different entries,
// and this offers a load factor of roughly 0.75.
Set<String> regionCodeSet = new HashSet<String>(321);
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java b/libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java
deleted file mode 100644
index a988a543..00000000
--- a/libphonenumber/src/com/google/i18n/phonenumbers/SingleFileMetadataSourceImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2015 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.google.i18n.phonenumbers;
-
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Implementation of {@link MetadataSource} that reads from a single resource file.
- */
-final class SingleFileMetadataSourceImpl implements MetadataSource {
- // The name of the binary file containing phone number metadata for different regions.
- // This enables us to set up with different metadata, such as for testing.
- private final String phoneNumberMetadataFileName;
-
- // The {@link MetadataLoader} used to inject alternative metadata sources.
- private final MetadataLoader metadataLoader;
-
- private final AtomicReference<MetadataManager.SingleFileMetadataMaps> phoneNumberMetadataRef =
- new AtomicReference<MetadataManager.SingleFileMetadataMaps>();
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- // @VisibleForTesting
- SingleFileMetadataSourceImpl(String phoneNumberMetadataFileName, MetadataLoader metadataLoader) {
- this.phoneNumberMetadataFileName = phoneNumberMetadataFileName;
- this.metadataLoader = metadataLoader;
- }
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- SingleFileMetadataSourceImpl(MetadataLoader metadataLoader) {
- this(MetadataManager.SINGLE_FILE_PHONE_NUMBER_METADATA_FILE_NAME, metadataLoader);
- }
-
- @Override
- public PhoneMetadata getMetadataForRegion(String regionCode) {
- return MetadataManager.getSingleFileMetadataMaps(phoneNumberMetadataRef,
- phoneNumberMetadataFileName, metadataLoader).get(regionCode);
- }
-
- @Override
- public PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
- // A country calling code is non-geographical if it only maps to the non-geographical region
- // code, i.e. "001". If this is not true of the given country calling code, then we will return
- // null here. If not for the atomic reference, such as if we were loading in multiple stages, we
- // would check that the passed in country calling code was indeed non-geographical to avoid
- // loading costs for a null result. Here though we do not check this since the entire data must
- // be loaded anyway if any of it is needed at some point in the life cycle of this class.
- return MetadataManager.getSingleFileMetadataMaps(phoneNumberMetadataRef,
- phoneNumberMetadataFileName, metadataLoader).get(countryCallingCode);
- }
-}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375 b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375
deleted file mode 100644
index b7d8cacd..00000000
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375
+++ /dev/null
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380 b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380
index 874e5e13..f01473b5 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49 b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49
index d169d31e..fdb9f55c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63 b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63
deleted file mode 100644
index e6f03ad1..00000000
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63
+++ /dev/null
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
index 6806a009..f4091758 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
index dfe50786..600f043a 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
index 6ba5be41..50c61861 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
index 894d4fab..09ca4ed5 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index 41c00923..dd6e97b0 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
index 29424fbe..8fd93bf2 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
index a54f4ca3..c9dc3115 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
index 339334bf..51ce25ba 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
index 01bb8dac..d3feed89 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index dc01444b..2bcb8e83 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
index bb43464a..09d12540 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
index efa9b058..4a01f606 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
index ed648e4b..6a1c9818 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
index 6ccdd69a..73e27753 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
index e1cab68c..ca363123 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index 5e981c85..b9ee37d2 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
index ddebc8f7..6bc75af5 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
index 283e679d..5fc149d4 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index 3f7fcbbc..95fc994a 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index 492f70af..b2942a98 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
index ebb5fb49..4be09b00 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
index 2b89782e..4075371b 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
index 5a7271eb..245f2c6c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
index cdfd1f86..fbe8f680 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
index 43163312..c91bbb61 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
index 33d742f9..bbc37a6f 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
index c7ee185a..9fea3ab0 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
index d52abcfc..80847ce0 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
index b11e9fda..12d9f4a7 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
index e11e957c..5538023d 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
index 009e48ab..eb003a64 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
index 8a056eb2..f6d9e149 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
index e1da75ca..c765fb03 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
index 296fcf9d..45e6bc8f 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
index d0da8506..2633c4ad 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
index f6a759c8..5ccbef1a 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
index 7d938623..7b464ce8 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
index 00752953..883376c4 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
index 11de05ac..a38c7113 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
index 993af32f..2a4a84c8 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
index 8a720626..43229559 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
index c75dce67..857459b8 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
index 0cea04e8..d7001a5f 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
index bd6d7e51..0393a859 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
index fa01bc2c..ca4265cc 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
index 97585357..3ac3c9de 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
index ec6030f6..85766380 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index 7672fa34..eeff6fe0 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
index 0c9dd320..1bf09f59 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
index 4ba22785..da2f3cf0 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
index 85135ca2..36adc17f 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 47c2eec0..25cac90d 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
index a29c69d8..fc1542b9 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
index 7efdbaee..cabf18c5 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
index dbd636e5..c4e58998 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
index 5ab6a0d6..2723b92c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
index 41b92f5b..51eaccdc 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
index f8b5f35c..a53de1f6 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
index 51ff6a48..a51b808d 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
index cde7ce65..e7133bec 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
index 365bafd7..22fc4c93 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
index a885cb56..8c6a632c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
index 4622c358..9317fcae 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
index 21951ced..486c78a0 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
index 852c356a..4ee5e60c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
index 36dc1e39..6b02afaa 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
index 49e38ad9..05a1d226 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
index 6ec881ff..e1eddfda 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
index 45b707a5..db7408c2 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
index 81dd47e2..f68e5223 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
index 305b85e9..257a20e6 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
index 67735fad..204e12d5 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
index 15e4a2a7..53563095 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
index 857b6d9b..1ae59572 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
index dddb34ea..62d1a5d1 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
index fb9422cc..170d0d5c 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
index d3d777cf..eadddf85 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
index 0e2e60c2..9b044f61 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
index b0fd135b..4b330f71 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
index 1f1ce10f..b2d56078 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
index 23c56495..ce6cd976 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index ddbeb93b..ae0d173b 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
index 76b49f27..ed30c934 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
index d08e73c7..ee2e0579 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index f8859190..6fad5941 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
index 7cfd32e7..a94967ad 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index 057bc582..87aa6c65 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
index b340ff45..0e99feaa 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
index 0a8fd5af..d7470ecd 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
index cec9da09..728c7e64 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT b/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT
index 1947aa2a..ecfe1344 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT
Binary files differ
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/internal/GeoEntityUtility.java b/libphonenumber/src/com/google/i18n/phonenumbers/internal/GeoEntityUtility.java
new file mode 100644
index 00000000..ef0cf67f
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/internal/GeoEntityUtility.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.internal;
+
+import com.google.i18n.phonenumbers.CountryCodeToRegionCodeMap;
+import java.util.List;
+
+/**
+ * Utility class for checking whether identifiers region code and country calling code belong
+ * to geographical entities. For more information about geo vs. non-geo entities see {@link
+ * com.google.i18n.phonenumbers.metadata.source.RegionMetadataSource} and {@link
+ * com.google.i18n.phonenumbers.metadata.source.NonGeographicalEntityMetadataSource}
+ */
+public final class GeoEntityUtility {
+
+ /** Region code with a special meaning, used to mark non-geographical entities */
+ public static final String REGION_CODE_FOR_NON_GEO_ENTITIES = "001";
+
+ /** Determines whether {@code regionCode} belongs to a geographical entity. */
+ public static boolean isGeoEntity(String regionCode) {
+ return !regionCode.equals(REGION_CODE_FOR_NON_GEO_ENTITIES);
+ }
+
+ /**
+ * Determines whether {@code countryCallingCode} belongs to a geographical entity.
+ *
+ * <p>A single country calling code could map to several different regions. It is considered that
+ * {@code countryCallingCode} belongs to a geo entity if all of these regions are geo entities
+ *
+ * <p>Note that this method will not throw an exception even when the underlying mapping for the
+ * {@code countryCallingCode} does not exist, instead it will return {@code false}
+ */
+ public static boolean isGeoEntity(int countryCallingCode) {
+ List<String> regionCodesForCountryCallingCode =
+ CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap().get(countryCallingCode);
+
+ return regionCodesForCountryCallingCode != null
+ && !regionCodesForCountryCallingCode.contains(REGION_CODE_FOR_NON_GEO_ENTITIES);
+ }
+
+ private GeoEntityUtility() {}
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java
new file mode 100644
index 00000000..6bf4df94
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import com.google.i18n.phonenumbers.metadata.init.ClassPathResourceMetadataLoader;
+import com.google.i18n.phonenumbers.metadata.init.MetadataParser;
+import com.google.i18n.phonenumbers.metadata.source.FormattingMetadataSource;
+import com.google.i18n.phonenumbers.metadata.source.FormattingMetadataSourceImpl;
+import com.google.i18n.phonenumbers.metadata.source.MetadataSource;
+import com.google.i18n.phonenumbers.metadata.source.MetadataSourceImpl;
+import com.google.i18n.phonenumbers.metadata.source.MultiFileModeFileNameProvider;
+import com.google.i18n.phonenumbers.metadata.source.PhoneMetadataFileNameProvider;
+import com.google.i18n.phonenumbers.metadata.source.RegionMetadataSource;
+import com.google.i18n.phonenumbers.metadata.source.RegionMetadataSourceImpl;
+
+/**
+ * Provides metadata init and source dependencies when metadata is stored in multi-file mode and
+ * loaded as a classpath resource.
+ */
+public final class DefaultMetadataDependenciesProvider {
+
+ private static final DefaultMetadataDependenciesProvider INSTANCE = new DefaultMetadataDependenciesProvider();
+
+ public static DefaultMetadataDependenciesProvider getInstance() {
+ return INSTANCE;
+ }
+
+ private DefaultMetadataDependenciesProvider() {
+ }
+
+ private final MetadataParser metadataParser = MetadataParser.newLenientParser();
+ private final MetadataLoader metadataLoader = new ClassPathResourceMetadataLoader();
+
+ private final PhoneMetadataFileNameProvider phoneNumberMetadataFileNameProvider =
+ new MultiFileModeFileNameProvider(
+ "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto");
+ private final MetadataSource phoneNumberMetadataSource =
+ new MetadataSourceImpl(
+ phoneNumberMetadataFileNameProvider,
+ metadataLoader,
+ metadataParser);
+
+ private final PhoneMetadataFileNameProvider shortNumberMetadataFileNameProvider =
+ new MultiFileModeFileNameProvider(
+ "/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto");
+ private final RegionMetadataSource shortNumberMetadataSource =
+ new RegionMetadataSourceImpl(
+ shortNumberMetadataFileNameProvider,
+ metadataLoader,
+ metadataParser);
+
+ private final PhoneMetadataFileNameProvider alternateFormatsMetadataFileNameProvider =
+ new MultiFileModeFileNameProvider(
+ "/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto");
+ private final FormattingMetadataSource alternateFormatsMetadataSource =
+ new FormattingMetadataSourceImpl(
+ alternateFormatsMetadataFileNameProvider,
+ metadataLoader,
+ metadataParser);
+
+ public MetadataParser getMetadataParser() {
+ return metadataParser;
+ }
+
+ public MetadataLoader getMetadataLoader() {
+ return metadataLoader;
+ }
+
+ public PhoneMetadataFileNameProvider getPhoneNumberMetadataFileNameProvider() {
+ return phoneNumberMetadataFileNameProvider;
+ }
+
+ public MetadataSource getPhoneNumberMetadataSource() {
+ return phoneNumberMetadataSource;
+ }
+
+ public PhoneMetadataFileNameProvider getShortNumberMetadataFileNameProvider() {
+ return shortNumberMetadataFileNameProvider;
+ }
+
+ public RegionMetadataSource getShortNumberMetadataSource() {
+ return shortNumberMetadataSource;
+ }
+
+ public PhoneMetadataFileNameProvider getAlternateFormatsMetadataFileNameProvider() {
+ return alternateFormatsMetadataFileNameProvider;
+ }
+
+ public FormattingMetadataSource getAlternateFormatsMetadataSource() {
+ return alternateFormatsMetadataSource;
+ }
+
+ public String getCarrierDataDirectory() {
+ return "/com/google/i18n/phonenumbers/carrier/data/";
+ }
+
+ public String getGeocodingDataDirectory() {
+ return "/com/google/i18n/phonenumbers/geocoding/data/";
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java
new file mode 100644
index 00000000..76122b8a
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.init;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import java.io.InputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A {@link MetadataLoader} implementation that reads phone number metadata files as classpath
+ * resources.
+ */
+public final class ClassPathResourceMetadataLoader implements MetadataLoader {
+
+ private static final Logger logger =
+ Logger.getLogger(ClassPathResourceMetadataLoader.class.getName());
+
+ @Override
+ public InputStream loadMetadata(String metadataFileName) {
+ InputStream inputStream =
+ ClassPathResourceMetadataLoader.class.getResourceAsStream(metadataFileName);
+ if (inputStream == null) {
+ logger.log(Level.WARNING, String.format("File %s not found", metadataFileName));
+ }
+ return inputStream;
+ }
+} \ No newline at end of file
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/MetadataParser.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/MetadataParser.java
new file mode 100644
index 00000000..e923dfad
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/init/MetadataParser.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.init;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Exposes single method for parsing {@link InputStream} content into {@link Collection} of {@link
+ * PhoneMetadata}
+ */
+public final class MetadataParser {
+
+ private static final Logger logger = Logger.getLogger(MetadataParser.class.getName());
+
+ /**
+ * Creates new instance in lenient mode, see {@link MetadataParser#parse(InputStream)} for more
+ * info.
+ */
+ public static MetadataParser newLenientParser() {
+ return new MetadataParser(false);
+ }
+
+ /**
+ * Creates new instance in strict mode, see {@link MetadataParser#parse(InputStream)} for more
+ * info
+ */
+ public static MetadataParser newStrictParser() {
+ return new MetadataParser(true);
+ }
+
+ private final boolean strictMode;
+
+ private MetadataParser(boolean strictMode) {
+ this.strictMode = strictMode;
+ }
+
+ /**
+ * Parses given {@link InputStream} into a {@link Collection} of {@link PhoneMetadata}.
+ *
+ * @throws IllegalArgumentException if {@code source} is {@code null} and strict mode is on
+ * @return parsed {@link PhoneMetadata}, or empty {@link Collection} if {@code source} is {@code
+ * null} and lenient mode is on
+ */
+ public Collection<PhoneMetadata> parse(InputStream source) {
+ if (source == null) {
+ return handleNullSource();
+ }
+ ObjectInputStream ois = null;
+ try {
+ ois = new ObjectInputStream(source);
+ PhoneMetadataCollection phoneMetadataCollection = new PhoneMetadataCollection();
+ phoneMetadataCollection.readExternal(ois);
+ List<PhoneMetadata> phoneMetadata = phoneMetadataCollection.getMetadataList();
+ // Sanity check; this should not happen if provided InputStream is valid
+ if (phoneMetadata.isEmpty()) {
+ throw new IllegalStateException("Empty metadata");
+ }
+ return phoneMetadataCollection.getMetadataList();
+ } catch (IOException e) {
+ throw new IllegalStateException("Unable to parse metadata file", e);
+ } finally {
+ if (ois != null) {
+ // This will close all underlying streams as well, including source.
+ close(ois);
+ } else {
+ close(source);
+ }
+ }
+ }
+
+ private List<PhoneMetadata> handleNullSource() {
+ if (strictMode) {
+ throw new IllegalArgumentException("Source cannot be null");
+ }
+ return Collections.emptyList();
+ }
+
+ private void close(InputStream inputStream) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ logger.log(Level.WARNING, "Error closing input stream (ignored)", e);
+ }
+ }
+} \ No newline at end of file
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java
new file mode 100644
index 00000000..d621e0cf
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.metadata.init.MetadataParser;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * A blocking implementation of {@link MetadataBootstrappingGuard}. Can be used for both single-file
+ * (bulk) and multi-file metadata
+ *
+ * @param <T> needs to extend {@link MetadataContainer}
+ */
+final class BlockingMetadataBootstrappingGuard<T extends MetadataContainer>
+ implements MetadataBootstrappingGuard<T> {
+
+ private final MetadataLoader metadataLoader;
+ private final MetadataParser metadataParser;
+ private final T metadataContainer;
+ private final Map<String, String> loadedFiles; // identity map
+
+ BlockingMetadataBootstrappingGuard(
+ MetadataLoader metadataLoader, MetadataParser metadataParser, T metadataContainer) {
+ this.metadataLoader = metadataLoader;
+ this.metadataParser = metadataParser;
+ this.metadataContainer = metadataContainer;
+ this.loadedFiles = new ConcurrentHashMap<>();
+ }
+
+ @Override
+ public T getOrBootstrap(String phoneMetadataFile) {
+ if (!loadedFiles.containsKey(phoneMetadataFile)) {
+ bootstrapMetadata(phoneMetadataFile);
+ }
+ return metadataContainer;
+ }
+
+ private synchronized void bootstrapMetadata(String phoneMetadataFile) {
+ // Additional check is needed because multiple threads could pass the first check when calling
+ // getOrBootstrap() at the same time for unloaded metadata file
+ if (loadedFiles.containsKey(phoneMetadataFile)) {
+ return;
+ }
+ Collection<PhoneMetadata> phoneMetadata = read(phoneMetadataFile);
+ for (PhoneMetadata metadata : phoneMetadata) {
+ metadataContainer.accept(metadata);
+ }
+ loadedFiles.put(phoneMetadataFile, phoneMetadataFile);
+ }
+
+ private Collection<PhoneMetadata> read(String phoneMetadataFile) {
+ try {
+ InputStream metadataStream = metadataLoader.loadMetadata(phoneMetadataFile);
+ return metadataParser.parse(metadataStream);
+ } catch (IllegalArgumentException | IllegalStateException e) {
+ throw new IllegalStateException("Failed to read file " + phoneMetadataFile, e);
+ }
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java
new file mode 100644
index 00000000..72757495
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.internal.GeoEntityUtility;
+
+/**
+ * Implementation of {@link MetadataContainer} which is a composition of different {@link
+ * MapBackedMetadataContainer}s. It adds items to a single simpler container at a time depending on
+ * the content of {@link PhoneMetadata}.
+ */
+final class CompositeMetadataContainer implements MetadataContainer {
+
+ private final MapBackedMetadataContainer<Integer> metadataByCountryCode =
+ MapBackedMetadataContainer.byCountryCallingCode();
+ private final MapBackedMetadataContainer<String> metadataByRegionCode =
+ MapBackedMetadataContainer.byRegionCode();
+
+ /**
+ * Intended to be called for geographical regions only. For non-geographical entities, use {@link
+ * CompositeMetadataContainer#getMetadataBy(int)}
+ */
+ PhoneMetadata getMetadataBy(String regionCode) {
+ return metadataByRegionCode.getMetadataBy(regionCode);
+ }
+
+ /**
+ * Intended to be called for non-geographical entities only, such as 800 (country code assigned to
+ * the Universal International Freephone Service). For geographical regions, use {@link
+ * CompositeMetadataContainer#getMetadataBy(String)}
+ */
+ PhoneMetadata getMetadataBy(int countryCallingCode) {
+ return metadataByCountryCode.getMetadataBy(countryCallingCode);
+ }
+
+ /**
+ * If the metadata belongs to a specific geographical region (it has a region code other than
+ * {@link GeoEntityUtility#REGION_CODE_FOR_NON_GEO_ENTITIES}), it will be added to a {@link
+ * MapBackedMetadataContainer} which stores metadata by region code. Otherwise, it will be added
+ * to a {@link MapBackedMetadataContainer} which stores metadata by country calling code. This
+ * means that {@link CompositeMetadataContainer#getMetadataBy(int)} will not work for country
+ * calling codes such as 41 (country calling code for Switzerland), only for country calling codes
+ * such as 800 (country code assigned to the Universal International Freephone Service)
+ */
+ @Override
+ public void accept(PhoneMetadata phoneMetadata) {
+ String regionCode = metadataByRegionCode.getKeyProvider().getKeyOf(phoneMetadata);
+ if (GeoEntityUtility.isGeoEntity(regionCode)) {
+ metadataByRegionCode.accept(phoneMetadata);
+ } else {
+ metadataByCountryCode.accept(phoneMetadata);
+ }
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java
new file mode 100644
index 00000000..f4f332cb
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+
+/** A source of formatting phone metadata. */
+public interface FormattingMetadataSource {
+
+ /**
+ * Returns formatting phone metadata for provided country calling code.
+ *
+ * <p>This method is similar to the one in {@link
+ * NonGeographicalEntityMetadataSource#getMetadataForNonGeographicalRegion(int)}, except that it
+ * will not fail for geographical regions, it can be used for both geo- and non-geo entities.
+ *
+ * <p>In case the provided {@code countryCallingCode} maps to several different regions, only one
+ * would contain formatting metadata.
+ *
+ * @return the phone metadata for provided {@code countryCallingCode}, or null if there is none.
+ */
+ PhoneMetadata getFormattingMetadataForCountryCallingCode(int countryCallingCode);
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java
new file mode 100644
index 00000000..d6a81909
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.metadata.init.MetadataParser;
+
+/**
+ * Implementation of {@link FormattingMetadataSource} guarded by {@link MetadataBootstrappingGuard}
+ *
+ * <p>By default, a {@link BlockingMetadataBootstrappingGuard} will be used, but any custom
+ * implementation can be injected.
+ */
+public final class FormattingMetadataSourceImpl implements FormattingMetadataSource {
+
+ private final PhoneMetadataFileNameProvider phoneMetadataFileNameProvider;
+ private final MetadataBootstrappingGuard<MapBackedMetadataContainer<Integer>> bootstrappingGuard;
+
+ public FormattingMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataBootstrappingGuard<MapBackedMetadataContainer<Integer>> bootstrappingGuard) {
+ this.phoneMetadataFileNameProvider = phoneMetadataFileNameProvider;
+ this.bootstrappingGuard = bootstrappingGuard;
+ }
+
+ public FormattingMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataLoader metadataLoader,
+ MetadataParser metadataParser) {
+ this(
+ phoneMetadataFileNameProvider,
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, metadataParser, MapBackedMetadataContainer.byCountryCallingCode()));
+ }
+
+ @Override
+ public PhoneMetadata getFormattingMetadataForCountryCallingCode(int countryCallingCode) {
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(countryCallingCode))
+ .getMetadataBy(countryCallingCode);
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java
new file mode 100644
index 00000000..639280d8
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * A {@link MetadataContainer} implementation backed by a {@link ConcurrentHashMap} with generic
+ * keys.
+ */
+final class MapBackedMetadataContainer<T> implements MetadataContainer {
+
+ static MapBackedMetadataContainer<String> byRegionCode() {
+ return new MapBackedMetadataContainer<>(
+ new KeyProvider<String>() {
+ @Override
+ public String getKeyOf(PhoneMetadata phoneMetadata) {
+ return phoneMetadata.getId();
+ }
+ });
+ }
+
+ static MapBackedMetadataContainer<Integer> byCountryCallingCode() {
+ return new MapBackedMetadataContainer<>(
+ new KeyProvider<Integer>() {
+ @Override
+ public Integer getKeyOf(PhoneMetadata phoneMetadata) {
+ return phoneMetadata.getCountryCode();
+ }
+ });
+ }
+
+ private final ConcurrentMap<T, PhoneMetadata> metadataMap;
+
+ private final KeyProvider<T> keyProvider;
+
+ private MapBackedMetadataContainer(KeyProvider<T> keyProvider) {
+ this.metadataMap = new ConcurrentHashMap<>();
+ this.keyProvider = keyProvider;
+ }
+
+ PhoneMetadata getMetadataBy(T key) {
+ return key != null ? metadataMap.get(key) : null;
+ }
+
+ KeyProvider<T> getKeyProvider() {
+ return keyProvider;
+ }
+
+ @Override
+ public void accept(PhoneMetadata phoneMetadata) {
+ metadataMap.put(keyProvider.getKeyOf(phoneMetadata), phoneMetadata);
+ }
+
+ interface KeyProvider<T> {
+ T getKeyOf(PhoneMetadata phoneMetadata);
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java
new file mode 100644
index 00000000..9380c595
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+/**
+ * Guard that ensures that metadata bootstrapping process (loading and parsing) is triggered only
+ * once per metadata file.
+ *
+ * @param <T> needs to extend {@link MetadataContainer}
+ */
+public interface MetadataBootstrappingGuard<T extends MetadataContainer> {
+
+ /**
+ * If metadata from the provided file has not yet been read, invokes loading and parsing from the
+ * provided file and adds the result to guarded {@link MetadataContainer}.
+ *
+ * @param phoneMetadataFile to read from
+ * @return guarded {@link MetadataContainer}
+ */
+ T getOrBootstrap(String phoneMetadataFile);
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/MetadataSource.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataContainer.java
index f5ffcad8..3f6b21ed 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/MetadataSource.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 The Libphonenumber Authors
+ * Copyright (C) 2022 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.
@@ -14,26 +14,19 @@
* limitations under the License.
*/
-package com.google.i18n.phonenumbers;
+package com.google.i18n.phonenumbers.metadata.source;
import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
/**
- * A source for phone metadata for all regions.
+ * A container for {@link PhoneMetadata}
*/
-interface MetadataSource {
+interface MetadataContainer {
/**
- * Gets phone metadata for a region.
- * @param regionCode the region code.
- * @return the phone metadata for that region, or null if there is none.
+ * Adds {@link PhoneMetadata} to the container. It depends on the implementation of the interface
+ * what this means, for example {@link MapBackedMetadataContainer} simply adds the provided
+ * metadata into the backing map. Implementing classes should ensure thread-safety.
*/
- PhoneMetadata getMetadataForRegion(String regionCode);
-
- /**
- * Gets phone metadata for a non-geographical region.
- * @param countryCallingCode the country calling code.
- * @return the phone metadata for that region, or null if there is none.
- */
- PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode);
+ void accept(PhoneMetadata phoneMetadata);
}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSource.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSource.java
new file mode 100644
index 00000000..d353ce96
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSource.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+/** A source of phone metadata split by different regions. */
+public interface MetadataSource extends RegionMetadataSource, NonGeographicalEntityMetadataSource {
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java
new file mode 100644
index 00000000..c3d1c736
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.internal.GeoEntityUtility;
+import com.google.i18n.phonenumbers.metadata.init.MetadataParser;
+
+/**
+ * Implementation of {@link MetadataSource} guarded by {@link MetadataBootstrappingGuard}.
+ *
+ * <p>By default, a {@link BlockingMetadataBootstrappingGuard} will be used, but any custom
+ * implementation can be injected.
+ */
+public final class MetadataSourceImpl implements MetadataSource {
+
+ private final PhoneMetadataFileNameProvider phoneMetadataFileNameProvider;
+ private final MetadataBootstrappingGuard<CompositeMetadataContainer> bootstrappingGuard;
+
+ public MetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataBootstrappingGuard<CompositeMetadataContainer> bootstrappingGuard) {
+ this.phoneMetadataFileNameProvider = phoneMetadataFileNameProvider;
+ this.bootstrappingGuard = bootstrappingGuard;
+ }
+
+ public MetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataLoader metadataLoader,
+ MetadataParser metadataParser) {
+ this(
+ phoneMetadataFileNameProvider,
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, metadataParser, new CompositeMetadataContainer()));
+ }
+
+ @Override
+ public PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
+ if (GeoEntityUtility.isGeoEntity(countryCallingCode)) {
+ throw new IllegalArgumentException(
+ countryCallingCode + " calling code belongs to a geo entity");
+ }
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(countryCallingCode))
+ .getMetadataBy(countryCallingCode);
+ }
+
+ @Override
+ public PhoneMetadata getMetadataForRegion(String regionCode) {
+ if (!GeoEntityUtility.isGeoEntity(regionCode)) {
+ throw new IllegalArgumentException(regionCode + " region code is a non-geo entity");
+ }
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(regionCode))
+ .getMetadataBy(regionCode);
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java
new file mode 100644
index 00000000..0d9adb5e
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import java.util.regex.Pattern;
+
+/**
+ * {@link PhoneMetadataFileNameProvider} implementation which appends key as a suffix to the
+ * predefined metadata file name base.
+ */
+public final class MultiFileModeFileNameProvider implements PhoneMetadataFileNameProvider {
+
+ private final String phoneMetadataFileNamePrefix;
+ private static final Pattern ALPHANUMERIC = Pattern.compile("^[\\p{L}\\p{N}]+$");
+
+ public MultiFileModeFileNameProvider(String phoneMetadataFileNameBase) {
+ this.phoneMetadataFileNamePrefix = phoneMetadataFileNameBase + "_";
+ }
+
+ @Override
+ public String getFor(Object key) {
+ String keyAsString = key.toString();
+ if (!ALPHANUMERIC.matcher(keyAsString).matches()) {
+ throw new IllegalArgumentException("Invalid key: " + keyAsString);
+ }
+ return phoneMetadataFileNamePrefix + key;
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java
new file mode 100644
index 00000000..70db06df
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+
+/**
+ * A source of phone metadata for non-geographical entities.
+ *
+ * <p>Non-geographical entities are phone number ranges that have a country calling code, but either
+ * do not belong to an actual country (some international services), or belong to a region which has
+ * a different country calling code from the country it is part of. Examples of such ranges are
+ * those starting with:
+ *
+ * <ul>
+ * <li>800 - country code assigned to the Universal International Freephone Service
+ * <li>808 - country code assigned to the International Shared Cost Service
+ * <li>870 - country code assigned to the Pitcairn Islands
+ * <li>...
+ * </ul>
+ */
+public interface NonGeographicalEntityMetadataSource {
+
+ /**
+ * Gets phone metadata for a non-geographical entity.
+ *
+ * @param countryCallingCode the country calling code.
+ * @return the phone metadata for that entity, or null if there is none.
+ * @throws IllegalArgumentException if provided {@code countryCallingCode} does not belong to a
+ * non-geographical entity
+ */
+ PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode);
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java
new file mode 100644
index 00000000..c3d16887
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+/**
+ * Abstraction responsible for inferring the metadata file name.
+ *
+ * <p>Two implementations are available:
+ *
+ * <ul>
+ * <li>{@link SingleFileModeFileNameProvider} for single-file metadata.
+ * <li>{@link MultiFileModeFileNameProvider} for multi-file metadata.
+ * </ul>
+ */
+public interface PhoneMetadataFileNameProvider {
+
+ /**
+ * Returns phone metadata file path for the given key. Assumes that key.toString() is
+ * well-defined.
+ */
+ String getFor(Object key);
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSource.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSource.java
new file mode 100644
index 00000000..3cf15c20
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSource.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.internal.GeoEntityUtility;
+
+/**
+ * A source of phone metadata split by geographical regions.
+ */
+public interface RegionMetadataSource {
+
+ /**
+ * Returns phone metadata for provided geographical region.
+ *
+ * <p>The {@code regionCode} must be different from {@link
+ * GeoEntityUtility#REGION_CODE_FOR_NON_GEO_ENTITIES}, which has a special meaning and is used to
+ * mark non-geographical regions (see {@link NonGeographicalEntityMetadataSource} for more
+ * information).
+ *
+ * @return the phone metadata for provided {@code regionCode}, or null if there is none.
+ * @throws IllegalArgumentException if provided {@code regionCode} is {@link
+ * GeoEntityUtility#REGION_CODE_FOR_NON_GEO_ENTITIES}
+ */
+ PhoneMetadata getMetadataForRegion(String regionCode);
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java
new file mode 100644
index 00000000..0078dd94
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.internal.GeoEntityUtility;
+import com.google.i18n.phonenumbers.metadata.init.MetadataParser;
+
+/**
+ * Implementation of {@link RegionMetadataSource} guarded by {@link MetadataBootstrappingGuard}
+ *
+ * <p>By default, a {@link BlockingMetadataBootstrappingGuard} will be used, but any custom
+ * implementation can be injected.
+ */
+public final class RegionMetadataSourceImpl implements RegionMetadataSource {
+
+ private final PhoneMetadataFileNameProvider phoneMetadataFileNameProvider;
+ private final MetadataBootstrappingGuard<MapBackedMetadataContainer<String>>
+ bootstrappingGuard;
+
+ public RegionMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataBootstrappingGuard<MapBackedMetadataContainer<String>> bootstrappingGuard) {
+ this.phoneMetadataFileNameProvider = phoneMetadataFileNameProvider;
+ this.bootstrappingGuard = bootstrappingGuard;
+ }
+
+ public RegionMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataLoader metadataLoader,
+ MetadataParser metadataParser) {
+ this(
+ phoneMetadataFileNameProvider,
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, metadataParser, MapBackedMetadataContainer.byRegionCode()));
+ }
+
+ @Override
+ public PhoneMetadata getMetadataForRegion(String regionCode) {
+ if (!GeoEntityUtility.isGeoEntity(regionCode)) {
+ throw new IllegalArgumentException(regionCode + " region code is a non-geo entity");
+ }
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(regionCode))
+ .getMetadataBy(regionCode);
+ }
+}
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java
new file mode 100644
index 00000000..1d3d1eb8
--- /dev/null
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+/**
+ * {@link PhoneMetadataFileNameProvider} implementation that returns the same metadata file name for
+ * each key
+ */
+public final class SingleFileModeFileNameProvider implements PhoneMetadataFileNameProvider {
+
+ private final String phoneMetadataFileName;
+
+ public SingleFileModeFileNameProvider(String phoneMetadataFileName) {
+ this.phoneMetadataFileName = phoneMetadataFileName;
+ }
+
+ @Override
+ public String getFor(Object key) {
+ return phoneMetadataFileName;
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java b/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
index 0c2188e8..a68d45fe 100644
--- a/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
@@ -30,11 +30,11 @@ public class CountryCodeToRegionCodeMapForTesting {
// country/region represented by that country code. In the case of multiple
// countries sharing a calling code, such as the NANPA countries, the one
// indicated with "isMainCountryForCode" in the metadata should be first.
- static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
- // The capacity is set to 37 as there are 28 different entries,
+ public static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
+ // The capacity is set to 38 as there are 29 different entries,
// and this offers a load factor of roughly 0.75.
Map<Integer, List<String>> countryCodeToRegionCodeMap =
- new HashMap<Integer, List<String>>(37);
+ new HashMap<Integer, List<String>>(38);
ArrayList<String> listWithRegionCode;
@@ -86,6 +86,10 @@ public class CountryCodeToRegionCodeMapForTesting {
listWithRegionCode.add("BR");
countryCodeToRegionCodeMap.put(55, listWithRegionCode);
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CO");
+ countryCodeToRegionCodeMap.put(57, listWithRegionCode);
+
listWithRegionCode = new ArrayList<String>(3);
listWithRegionCode.add("AU");
listWithRegionCode.add("CC");
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
index ebea7b7d..e98470bf 100644
--- a/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
@@ -19,15 +19,15 @@ package com.google.i18n.phonenumbers;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-
-import junit.framework.TestCase;
-
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
+import com.google.i18n.phonenumbers.metadata.source.RegionMetadataSource;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
+import junit.framework.TestCase;
/**
* Verifies all of the example numbers in the metadata are valid and of the correct type. If no
@@ -37,10 +37,14 @@ import java.util.logging.Logger;
*/
public class ExampleNumbersTest extends TestCase {
private static final Logger logger = Logger.getLogger(ExampleNumbersTest.class.getName());
- private PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
- private ShortNumberInfo shortNumberInfo = ShortNumberInfo.getInstance();
- private List<PhoneNumber> invalidCases = new ArrayList<PhoneNumber>();
- private List<PhoneNumber> wrongTypeCases = new ArrayList<PhoneNumber>();
+ private final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
+ private final ShortNumberInfo shortNumberInfo = ShortNumberInfo.getInstance();
+ private final RegionMetadataSource shortNumberMetadataSource =
+ DefaultMetadataDependenciesProvider.getInstance().getShortNumberMetadataSource();
+
+ private final List<PhoneNumber> invalidCases = new ArrayList<>();
+ private final List<PhoneNumber> wrongTypeCases = new ArrayList<>();
+ private final Set<String> shortNumberSupportedRegions = ShortNumbersRegionCodeSet.getRegionCodeSet();
/**
* @param exampleNumberRequestedType type we are requesting an example number for
@@ -55,14 +59,14 @@ public class ExampleNumbersTest extends TestCase {
if (exampleNumber != null) {
if (!phoneNumberUtil.isValidNumber(exampleNumber)) {
invalidCases.add(exampleNumber);
- logger.log(Level.SEVERE, "Failed validation for " + exampleNumber.toString());
+ logger.log(Level.SEVERE, "Failed validation for " + exampleNumber);
} else {
// We know the number is valid, now we check the type.
PhoneNumberType exampleNumberType = phoneNumberUtil.getNumberType(exampleNumber);
if (!possibleExpectedTypes.contains(exampleNumberType)) {
wrongTypeCases.add(exampleNumber);
logger.log(Level.SEVERE, "Wrong type for "
- + exampleNumber.toString()
+ + exampleNumber
+ ": got " + exampleNumberType);
logger.log(Level.WARNING, "Expected types: ");
for (PhoneNumberType type : possibleExpectedTypes) {
@@ -74,7 +78,7 @@ public class ExampleNumbersTest extends TestCase {
}
}
- public void testFixedLine() throws Exception {
+ public void testFixedLine() {
Set<PhoneNumberType> fixedLineTypes = EnumSet.of(PhoneNumberType.FIXED_LINE,
PhoneNumberType.FIXED_LINE_OR_MOBILE);
checkNumbersValidAndCorrectType(PhoneNumberType.FIXED_LINE, fixedLineTypes);
@@ -82,7 +86,7 @@ public class ExampleNumbersTest extends TestCase {
assertEquals(0, wrongTypeCases.size());
}
- public void testMobile() throws Exception {
+ public void testMobile() {
Set<PhoneNumberType> mobileTypes = EnumSet.of(PhoneNumberType.MOBILE,
PhoneNumberType.FIXED_LINE_OR_MOBILE);
checkNumbersValidAndCorrectType(PhoneNumberType.MOBILE, mobileTypes);
@@ -90,56 +94,56 @@ public class ExampleNumbersTest extends TestCase {
assertEquals(0, wrongTypeCases.size());
}
- public void testTollFree() throws Exception {
+ public void testTollFree() {
Set<PhoneNumberType> tollFreeTypes = EnumSet.of(PhoneNumberType.TOLL_FREE);
checkNumbersValidAndCorrectType(PhoneNumberType.TOLL_FREE, tollFreeTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testPremiumRate() throws Exception {
+ public void testPremiumRate() {
Set<PhoneNumberType> premiumRateTypes = EnumSet.of(PhoneNumberType.PREMIUM_RATE);
checkNumbersValidAndCorrectType(PhoneNumberType.PREMIUM_RATE, premiumRateTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testVoip() throws Exception {
+ public void testVoip() {
Set<PhoneNumberType> voipTypes = EnumSet.of(PhoneNumberType.VOIP);
checkNumbersValidAndCorrectType(PhoneNumberType.VOIP, voipTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testPager() throws Exception {
+ public void testPager() {
Set<PhoneNumberType> pagerTypes = EnumSet.of(PhoneNumberType.PAGER);
checkNumbersValidAndCorrectType(PhoneNumberType.PAGER, pagerTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testUan() throws Exception {
+ public void testUan() {
Set<PhoneNumberType> uanTypes = EnumSet.of(PhoneNumberType.UAN);
checkNumbersValidAndCorrectType(PhoneNumberType.UAN, uanTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testVoicemail() throws Exception {
+ public void testVoicemail() {
Set<PhoneNumberType> voicemailTypes = EnumSet.of(PhoneNumberType.VOICEMAIL);
checkNumbersValidAndCorrectType(PhoneNumberType.VOICEMAIL, voicemailTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testSharedCost() throws Exception {
+ public void testSharedCost() {
Set<PhoneNumberType> sharedCostTypes = EnumSet.of(PhoneNumberType.SHARED_COST);
checkNumbersValidAndCorrectType(PhoneNumberType.SHARED_COST, sharedCostTypes);
assertEquals(0, invalidCases.size());
assertEquals(0, wrongTypeCases.size());
}
- public void testCanBeInternationallyDialled() throws Exception {
+ public void testCanBeInternationallyDialled() {
for (String regionCode : phoneNumberUtil.getSupportedRegions()) {
PhoneNumber exampleNumber = null;
PhoneNumberDesc desc =
@@ -153,41 +157,41 @@ public class ExampleNumbersTest extends TestCase {
}
if (exampleNumber != null && phoneNumberUtil.canBeInternationallyDialled(exampleNumber)) {
wrongTypeCases.add(exampleNumber);
- logger.log(Level.SEVERE, "Number " + exampleNumber.toString()
+ logger.log(Level.SEVERE, "Number " + exampleNumber
+ " should not be internationally diallable");
}
}
assertEquals(0, wrongTypeCases.size());
}
- public void testGlobalNetworkNumbers() throws Exception {
+ public void testGlobalNetworkNumbers() {
for (Integer callingCode : phoneNumberUtil.getSupportedGlobalNetworkCallingCodes()) {
PhoneNumber exampleNumber =
phoneNumberUtil.getExampleNumberForNonGeoEntity(callingCode);
assertNotNull("No example phone number for calling code " + callingCode, exampleNumber);
if (!phoneNumberUtil.isValidNumber(exampleNumber)) {
invalidCases.add(exampleNumber);
- logger.log(Level.SEVERE, "Failed validation for " + exampleNumber.toString());
+ logger.log(Level.SEVERE, "Failed validation for " + exampleNumber);
}
}
assertEquals(0, invalidCases.size());
}
- public void testEveryRegionHasAnExampleNumber() throws Exception {
+ public void testEveryRegionHasAnExampleNumber() {
for (String regionCode : phoneNumberUtil.getSupportedRegions()) {
PhoneNumber exampleNumber = phoneNumberUtil.getExampleNumber(regionCode);
assertNotNull("No example number found for region " + regionCode, exampleNumber);
}
}
- public void testEveryRegionHasAnInvalidExampleNumber() throws Exception {
+ public void testEveryRegionHasAnInvalidExampleNumber() {
for (String regionCode : phoneNumberUtil.getSupportedRegions()) {
PhoneNumber exampleNumber = phoneNumberUtil.getInvalidExampleNumber(regionCode);
assertNotNull("No invalid example number found for region " + regionCode, exampleNumber);
}
}
- public void testEveryTypeHasAnExampleNumber() throws Exception {
+ public void testEveryTypeHasAnExampleNumber() {
for (PhoneNumberUtil.PhoneNumberType type : PhoneNumberUtil.PhoneNumberType.values()) {
if (type == PhoneNumberType.UNKNOWN) {
continue;
@@ -198,8 +202,8 @@ public class ExampleNumbersTest extends TestCase {
}
public void testShortNumbersValidAndCorrectCost() throws Exception {
- List<String> invalidStringCases = new ArrayList<String>();
- for (String regionCode : shortNumberInfo.getSupportedRegions()) {
+ List<String> invalidStringCases = new ArrayList<>();
+ for (String regionCode : shortNumberSupportedRegions) {
String exampleShortNumber = shortNumberInfo.getExampleShortNumber(regionCode);
if (!shortNumberInfo.isValidShortNumberForRegion(
phoneNumberUtil.parse(exampleShortNumber, regionCode), regionCode)) {
@@ -211,7 +215,7 @@ public class ExampleNumbersTest extends TestCase {
PhoneNumber phoneNumber = phoneNumberUtil.parse(exampleShortNumber, regionCode);
if (!shortNumberInfo.isValidShortNumber(phoneNumber)) {
invalidCases.add(phoneNumber);
- logger.log(Level.SEVERE, "Failed validation for " + phoneNumber.toString());
+ logger.log(Level.SEVERE, "Failed validation for " + phoneNumber);
}
for (ShortNumberInfo.ShortNumberCost cost : ShortNumberInfo.ShortNumberCost.values()) {
@@ -236,9 +240,8 @@ public class ExampleNumbersTest extends TestCase {
public void testEmergency() throws Exception {
int wrongTypeCounter = 0;
- for (String regionCode : shortNumberInfo.getSupportedRegions()) {
- PhoneNumberDesc desc =
- MetadataManager.getShortNumberMetadataForRegion(regionCode).getEmergency();
+ for (String regionCode : shortNumberSupportedRegions) {
+ PhoneNumberDesc desc = shortNumberMetadataSource.getMetadataForRegion(regionCode).getEmergency();
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
PhoneNumber phoneNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
@@ -258,9 +261,8 @@ public class ExampleNumbersTest extends TestCase {
public void testCarrierSpecificShortNumbers() throws Exception {
int wrongTagCounter = 0;
- for (String regionCode : shortNumberInfo.getSupportedRegions()) {
- PhoneNumberDesc desc =
- MetadataManager.getShortNumberMetadataForRegion(regionCode).getCarrierSpecific();
+ for (String regionCode : shortNumberSupportedRegions) {
+ PhoneNumberDesc desc = shortNumberMetadataSource.getMetadataForRegion(regionCode).getCarrierSpecific();
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
PhoneNumber carrierSpecificNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
@@ -276,9 +278,8 @@ public class ExampleNumbersTest extends TestCase {
public void testSmsServiceShortNumbers() throws Exception {
int wrongTagCounter = 0;
- for (String regionCode : shortNumberInfo.getSupportedRegions()) {
- PhoneNumberDesc desc =
- MetadataManager.getShortNumberMetadataForRegion(regionCode).getSmsServices();
+ for (String regionCode : shortNumberSupportedRegions) {
+ PhoneNumberDesc desc = shortNumberMetadataSource.getMetadataForRegion(regionCode).getSmsServices();
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
PhoneNumber smsServiceNumber = phoneNumberUtil.parse(exampleNumber, regionCode);
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java
deleted file mode 100644
index 91b2f395..00000000
--- a/libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2012 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.google.i18n.phonenumbers;
-
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import java.util.concurrent.ConcurrentHashMap;
-import junit.framework.TestCase;
-
-/**
- * Some basic tests to check that metadata can be correctly loaded.
- */
-public class MetadataManagerTest extends TestCase {
- public void testAlternateFormatsLoadCorrectly() {
- // We should have some data for Germany.
- PhoneMetadata germanyMetadata = MetadataManager.getAlternateFormatsForCountry(49);
- assertNotNull(germanyMetadata);
- assertTrue(germanyMetadata.getNumberFormatCount() > 0);
- }
-
- public void testAlternateFormatsFailsGracefully() throws Exception {
- PhoneMetadata noAlternateFormats = MetadataManager.getAlternateFormatsForCountry(999);
- assertNull(noAlternateFormats);
- }
-
- public void testShortNumberMetadataLoadCorrectly() throws Exception {
- // We should have some data for France.
- PhoneMetadata franceMetadata = MetadataManager.getShortNumberMetadataForRegion("FR");
- assertNotNull(franceMetadata);
- assertTrue(franceMetadata.hasShortCode());
- }
-
- public void testShortNumberMetadataFailsGracefully() throws Exception {
- PhoneMetadata noShortNumberMetadata = MetadataManager.getShortNumberMetadataForRegion("XXX");
- assertNull(noShortNumberMetadata);
- }
-
- public void testGetMetadataFromMultiFilePrefix_regionCode() {
- ConcurrentHashMap<String, PhoneMetadata> map = new ConcurrentHashMap<String, PhoneMetadata>();
- PhoneMetadata metadata = MetadataManager.getMetadataFromMultiFilePrefix("CA", map,
- "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting",
- MetadataManager.DEFAULT_METADATA_LOADER);
- assertEquals(metadata, map.get("CA"));
- }
-
- public void testGetMetadataFromMultiFilePrefix_countryCallingCode() {
- ConcurrentHashMap<Integer, PhoneMetadata> map = new ConcurrentHashMap<Integer, PhoneMetadata>();
- PhoneMetadata metadata = MetadataManager.getMetadataFromMultiFilePrefix(800, map,
- "/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting",
- MetadataManager.DEFAULT_METADATA_LOADER);
- assertEquals(metadata, map.get(800));
- }
-
- public void testGetMetadataFromMultiFilePrefix_missingMetadataFileThrowsRuntimeException() {
- // In normal usage we should never get a state where we are asking to load metadata that doesn't
- // exist. However if the library is packaged incorrectly in the jar, this could happen and the
- // best we can do is make sure the exception has the file name in it.
- try {
- MetadataManager.getMetadataFromMultiFilePrefix("XX",
- new ConcurrentHashMap<String, PhoneMetadata>(), "no/such/file",
- MetadataManager.DEFAULT_METADATA_LOADER);
- fail("expected exception");
- } catch (RuntimeException e) {
- assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file_XX"));
- }
- try {
- MetadataManager.getMetadataFromMultiFilePrefix(123,
- new ConcurrentHashMap<Integer, PhoneMetadata>(), "no/such/file",
- MetadataManager.DEFAULT_METADATA_LOADER);
- fail("expected exception");
- } catch (RuntimeException e) {
- assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file_123"));
- }
- }
-}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/MultiFileMetadataSourceImplTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/MultiFileMetadataSourceImplTest.java
deleted file mode 100644
index 7c9b0faf..00000000
--- a/libphonenumber/test/com/google/i18n/phonenumbers/MultiFileMetadataSourceImplTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 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.google.i18n.phonenumbers;
-
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import junit.framework.TestCase;
-
-/**
- * Unit tests for MultiFileMetadataSourceImpl.java.
- */
-public class MultiFileMetadataSourceImplTest extends TestCase {
- private static final MultiFileMetadataSourceImpl SOURCE =
- new MultiFileMetadataSourceImpl(MetadataManager.DEFAULT_METADATA_LOADER);
- private static final MultiFileMetadataSourceImpl MISSING_FILE_SOURCE =
- new MultiFileMetadataSourceImpl("no/such/file", MetadataManager.DEFAULT_METADATA_LOADER);
-
- public void testGeoPhoneNumberMetadataLoadCorrectly() {
- // We should have some data for the UAE.
- PhoneMetadata uaeMetadata = SOURCE.getMetadataForRegion("AE");
- assertEquals(uaeMetadata.getCountryCode(), 971);
- assertTrue(uaeMetadata.hasGeneralDesc());
- }
-
- public void testGeoPhoneNumberMetadataLoadFromMissingFileThrowsException() throws Exception {
- try {
- MISSING_FILE_SOURCE.getMetadataForRegion("AE");
- fail("expected exception");
- } catch (RuntimeException e) {
- assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file"));
- }
- }
-
- public void testNonGeoPhoneNumberMetadataLoadCorrectly() {
- // We should have some data for international toll-free numbers.
- PhoneMetadata intlMetadata = SOURCE.getMetadataForNonGeographicalRegion(800);
- assertEquals(intlMetadata.getId(), "001");
- assertTrue(intlMetadata.hasGeneralDesc());
- }
-
- public void testNonGeoPhoneNumberMetadataLoadFromMissingFileThrowsException() throws Exception {
- try {
- MISSING_FILE_SOURCE.getMetadataForNonGeographicalRegion(800);
- fail("expected exception");
- } catch (RuntimeException e) {
- assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file"));
- }
- }
-}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
index 641bd77d..6a466e43 100644
--- a/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -16,6 +16,8 @@
package com.google.i18n.phonenumbers;
+import static org.junit.Assert.assertThrows;
+
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult;
@@ -25,9 +27,13 @@ import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
+import com.google.i18n.phonenumbers.metadata.source.MetadataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import org.junit.Assert;
+import org.junit.function.ThrowingRunnable;
+import org.mockito.Mockito;
/**
* Unit tests for PhoneNumberUtil.java
@@ -55,6 +61,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
new PhoneNumber().setCountryCode(1).setNationalNumber(2423570000L);
private static final PhoneNumber BS_NUMBER =
new PhoneNumber().setCountryCode(1).setNationalNumber(2423651234L);
+ private static final PhoneNumber CO_FIXED_LINE =
+ new PhoneNumber().setCountryCode(57).setNationalNumber(6012345678L);
// Note that this is the same as the example number for DE in the metadata.
private static final PhoneNumber DE_NUMBER =
new PhoneNumber().setCountryCode(49).setNationalNumber(30123456L);
@@ -119,6 +127,11 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
private static final PhoneNumber UNKNOWN_COUNTRY_CODE_NO_RAW_INPUT =
new PhoneNumber().setCountryCode(2).setNationalNumber(12345L);
+ private final MetadataSource mockedMetadataSource = Mockito.mock(MetadataSource.class);
+ private final PhoneNumberUtil phoneNumberUtilWithMissingMetadata =
+ new PhoneNumberUtil(mockedMetadataSource,
+ CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap());
+
public void testGetSupportedRegions() {
assertTrue(phoneUtil.getSupportedRegions().size() > 0);
}
@@ -799,6 +812,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
public void testFormatNumberForMobileDialing() {
// Numbers are normally dialed in national format in-country, and international format from
// outside the country.
+ assertEquals("6012345678",
+ phoneUtil.formatNumberForMobileDialing(CO_FIXED_LINE, RegionCode.CO, false));
assertEquals("030123456",
phoneUtil.formatNumberForMobileDialing(DE_NUMBER, RegionCode.DE, false));
assertEquals("+4930123456",
@@ -3160,4 +3175,38 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertFalse(phoneUtil.isMobileNumberPortableRegion(RegionCode.AE));
assertFalse(phoneUtil.isMobileNumberPortableRegion(RegionCode.BS));
}
+
+ public void testGetMetadataForRegionForNonGeoEntity_shouldBeNull() {
+ assertNull(phoneUtil.getMetadataForRegion(RegionCode.UN001));
+ }
+
+ public void testGetMetadataForRegionForUnknownRegion_shouldBeNull() {
+ assertNull(phoneUtil.getMetadataForRegion(RegionCode.ZZ));
+ }
+
+ public void testGetMetadataForNonGeographicalRegionForGeoRegion_shouldBeNull() {
+ assertNull(phoneUtil.getMetadataForNonGeographicalRegion(/* countryCallingCode = */ 1));
+ }
+
+ public void testGetMetadataForRegionForMissingMetadata() {
+ assertThrows(
+ MissingMetadataException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ phoneNumberUtilWithMissingMetadata.getMetadataForRegion(RegionCode.US);
+ }
+ });
+ }
+
+ public void testGetMetadataForNonGeographicalRegionForMissingMetadata() {
+ assertThrows(
+ MissingMetadataException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ phoneNumberUtilWithMissingMetadata.getMetadataForNonGeographicalRegion(800);
+ }
+ });
+ }
}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/RegionCode.java b/libphonenumber/test/com/google/i18n/phonenumbers/RegionCode.java
index 32169f6a..20fc1212 100644
--- a/libphonenumber/test/com/google/i18n/phonenumbers/RegionCode.java
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/RegionCode.java
@@ -37,6 +37,7 @@ final class RegionCode {
static final String CH = "CH";
static final String CL = "CL";
static final String CN = "CN";
+ static final String CO = "CO";
static final String CS = "CS";
static final String CX = "CX";
static final String DE = "DE";
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/SingleFileMetadataSourceImplTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/SingleFileMetadataSourceImplTest.java
deleted file mode 100644
index 664fc52d..00000000
--- a/libphonenumber/test/com/google/i18n/phonenumbers/SingleFileMetadataSourceImplTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2015 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.google.i18n.phonenumbers;
-
-import junit.framework.TestCase;
-
-/**
- * Unit tests for SingleFileMetadataSourceImpl.java.
- *
- * <p>
- * We do not package single file metadata files, so it is only possible to test failures here.
- */
-public class SingleFileMetadataSourceImplTest extends TestCase {
- private static final SingleFileMetadataSourceImpl MISSING_FILE_SOURCE =
- new SingleFileMetadataSourceImpl("no/such/file", MetadataManager.DEFAULT_METADATA_LOADER);
-
- public void testGeoPhoneNumberMetadataLoadFromMissingFileThrowsException() throws Exception {
- try {
- MISSING_FILE_SOURCE.getMetadataForRegion("AE");
- fail("expected exception");
- } catch (RuntimeException e) {
- assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file"));
- }
- }
-
- public void testNonGeoPhoneNumberMetadataLoadFromMissingFileThrowsException() throws Exception {
- try {
- MISSING_FILE_SOURCE.getMetadataForNonGeographicalRegion(800);
- fail("expected exception");
- } catch (RuntimeException e) {
- assertTrue("Unexpected error: " + e, e.getMessage().contains("no/such/file"));
- }
- }
-}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java b/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java
index 51360d71..5dfb56e9 100644
--- a/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java
@@ -16,6 +16,9 @@
package com.google.i18n.phonenumbers;
+import com.google.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
+import com.google.i18n.phonenumbers.metadata.source.MetadataSourceImpl;
+import com.google.i18n.phonenumbers.metadata.source.MultiFileModeFileNameProvider;
import junit.framework.TestCase;
/**
@@ -33,15 +36,20 @@ import junit.framework.TestCase;
* @author Shaopeng Jia
*/
public class TestMetadataTestCase extends TestCase {
+
private static final String TEST_METADATA_FILE_PREFIX =
"/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting";
- /** An instance of PhoneNumberUtil that uses test metadata. */
+ /**
+ * An instance of PhoneNumberUtil that uses test metadata.
+ */
protected final PhoneNumberUtil phoneUtil;
public TestMetadataTestCase() {
- phoneUtil = new PhoneNumberUtil(new MultiFileMetadataSourceImpl(TEST_METADATA_FILE_PREFIX,
- MetadataManager.DEFAULT_METADATA_LOADER),
+ phoneUtil = new PhoneNumberUtil(
+ new MetadataSourceImpl(new MultiFileModeFileNameProvider(TEST_METADATA_FILE_PREFIX),
+ DefaultMetadataDependenciesProvider.getInstance().getMetadataLoader(),
+ DefaultMetadataDependenciesProvider.getInstance().getMetadataParser()),
CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap());
}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CO b/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CO
new file mode 100644
index 00000000..daea5fb9
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CO
Binary files differ
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_HU b/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_HU
deleted file mode 100644
index 8e7a77b1..00000000
--- a/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_HU
+++ /dev/null
Binary files differ
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/internal/GeoEntityUtilityTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/internal/GeoEntityUtilityTest.java
new file mode 100644
index 00000000..300c5f53
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/internal/GeoEntityUtilityTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.internal;
+
+import junit.framework.TestCase;
+
+public class GeoEntityUtilityTest extends TestCase {
+
+ public void test_isGeoEntity_shouldReturnTrueForCountryRegionCode() {
+ assertTrue(GeoEntityUtility.isGeoEntity("DE"));
+ }
+
+ public void test_isGeoEntity_shouldReturnFalseForWorldRegionCode() {
+ assertFalse(GeoEntityUtility.isGeoEntity("001"));
+ }
+
+ public void test_isGeoEntity_shouldReturnTrueForCountryCallingCode() {
+ assertTrue(GeoEntityUtility.isGeoEntity(41));
+ }
+
+ public void test_isGeoEntity_shouldReturnFalseForInternationalSharedCostServiceCallingCode() {
+ assertFalse(GeoEntityUtility.isGeoEntity(808));
+ }
+
+ public void test_isGeoEntity_shouldReturnFalseForNonExistingCountryCallingCode() {
+ assertFalse(GeoEntityUtility.isGeoEntity(111111111));
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/PhoneMetadataCollectionUtil.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/PhoneMetadataCollectionUtil.java
new file mode 100644
index 00000000..57fab191
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/PhoneMetadataCollectionUtil.java
@@ -0,0 +1,21 @@
+package com.google.i18n.phonenumbers.metadata;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectOutputStream;
+
+public class PhoneMetadataCollectionUtil {
+
+ public static InputStream toInputStream(PhoneMetadataCollection metadata) throws IOException {
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
+ metadata.writeExternal(objectOutputStream);
+ objectOutputStream.flush();
+ InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+ objectOutputStream.close();
+ return inputStream;
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/init/MetadataParserTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/init/MetadataParserTest.java
new file mode 100644
index 00000000..22c52e29
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/init/MetadataParserTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.init;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.Assert.assertThrows;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import com.google.i18n.phonenumbers.metadata.PhoneMetadataCollectionUtil;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import junit.framework.TestCase;
+import org.junit.function.ThrowingRunnable;
+
+public final class MetadataParserTest extends TestCase {
+
+ private static final MetadataParser metadataParser = MetadataParser.newStrictParser();
+
+ public void test_parse_shouldThrowExceptionForNullInput() {
+ assertThrows(
+ IllegalArgumentException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ metadataParser.parse(null);
+ }
+ });
+ }
+
+ public void test_parse_shouldThrowExceptionForEmptyInput() {
+ final InputStream emptyInput = new ByteArrayInputStream(new byte[0]);
+
+ assertThrows(
+ IllegalStateException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ metadataParser.parse(emptyInput);
+ }
+ });
+ }
+
+ public void test_parse_shouldThrowExceptionForInvalidInput() {
+ final InputStream invalidInput = new ByteArrayInputStream("Some random input".getBytes(UTF_8));
+
+ assertThrows(
+ IllegalStateException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ metadataParser.parse(invalidInput);
+ }
+ });
+ }
+
+ public void test_parse_shouldParseValidInput() throws IOException {
+ InputStream input = PhoneMetadataCollectionUtil.toInputStream(
+ PhoneMetadataCollection.newBuilder()
+ .addMetadata(PhoneMetadata.newBuilder().setId("id").build()));
+
+ Collection<PhoneMetadata> actual = metadataParser.parse(input);
+
+ assertEquals(1, actual.size());
+ }
+
+ public void test_parse_shouldReturnEmptyCollectionForNullInput() {
+ Collection<PhoneMetadata> actual = MetadataParser.newLenientParser().parse(null);
+
+ assertTrue(actual.isEmpty());
+ }
+} \ No newline at end of file
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuardTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuardTest.java
new file mode 100644
index 00000000..c2917708
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuardTest.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import static org.junit.Assert.assertThrows;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.google.i18n.phonenumbers.MetadataLoader;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import com.google.i18n.phonenumbers.metadata.PhoneMetadataCollectionUtil;
+import com.google.i18n.phonenumbers.metadata.init.MetadataParser;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import junit.framework.TestCase;
+import org.junit.Assert;
+import org.junit.function.ThrowingRunnable;
+import org.mockito.Mockito;
+
+public class BlockingMetadataBootstrappingGuardTest extends TestCase {
+
+ private static final String PHONE_METADATA_FILE = "some metadata file";
+ private static final PhoneMetadataCollection PHONE_METADATA =
+ PhoneMetadataCollection.newBuilder()
+ .addMetadata(PhoneMetadata.newBuilder().setId("id").build());
+
+ private final MetadataLoader metadataLoader = Mockito.mock(MetadataLoader.class);
+ private final MetadataContainer metadataContainer = Mockito.mock(MetadataContainer.class);
+
+ private BlockingMetadataBootstrappingGuard<MetadataContainer> bootstrappingGuard;
+
+ @Override
+ public void setUp() throws IOException {
+ when(metadataLoader.loadMetadata(PHONE_METADATA_FILE))
+ .thenReturn(PhoneMetadataCollectionUtil.toInputStream(PHONE_METADATA));
+ bootstrappingGuard =
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, MetadataParser.newStrictParser(), metadataContainer);
+ }
+
+ public void test_getOrBootstrap_shouldInvokeBootstrappingOnlyOnce() {
+ bootstrappingGuard.getOrBootstrap(PHONE_METADATA_FILE);
+ bootstrappingGuard.getOrBootstrap(PHONE_METADATA_FILE);
+
+ verify(metadataLoader, times(1)).loadMetadata(PHONE_METADATA_FILE);
+ }
+
+ public void test_getOrBootstrap_shouldIncludeFileNameInExceptionOnFailure() {
+ when(metadataLoader.loadMetadata(PHONE_METADATA_FILE)).thenReturn(null);
+
+ ThrowingRunnable throwingRunnable =
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ bootstrappingGuard.getOrBootstrap(PHONE_METADATA_FILE);
+ }
+ };
+
+ IllegalStateException exception = assertThrows(IllegalStateException.class, throwingRunnable);
+ Assert.assertTrue(exception.getMessage().contains(PHONE_METADATA_FILE));
+ }
+
+ public void test_getOrBootstrap_shouldInvokeBootstrappingOnlyOnceWhenThreadsCallItAtTheSameTime()
+ throws InterruptedException {
+ ExecutorService executorService = Executors.newFixedThreadPool(2);
+
+ List<BootstrappingRunnable> runnables = new ArrayList<>();
+ runnables.add(new BootstrappingRunnable());
+ runnables.add(new BootstrappingRunnable());
+ executorService.invokeAll(runnables);
+
+ verify(metadataLoader, times(1)).loadMetadata(PHONE_METADATA_FILE);
+ }
+
+ private class BootstrappingRunnable implements Callable<MetadataContainer> {
+
+ @Override
+ public MetadataContainer call() {
+ return bootstrappingGuard.getOrBootstrap(PHONE_METADATA_FILE);
+ }
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainerTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainerTest.java
new file mode 100644
index 00000000..75b66c49
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/CompositeMetadataContainerTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.internal.GeoEntityUtility;
+import junit.framework.TestCase;
+
+public class CompositeMetadataContainerTest extends TestCase {
+
+ private static final String REGION_CODE = "US";
+ private static final Integer COUNTRY_CODE = 1;
+ private static final PhoneMetadata PHONE_METADATA_WITH_REGION_CODE =
+ PhoneMetadata.newBuilder().setId(REGION_CODE).setCountryCode(COUNTRY_CODE);
+ private static final PhoneMetadata PHONE_METADATA_WITH_COUNTRY_CODE =
+ PhoneMetadata.newBuilder()
+ .setId(GeoEntityUtility.REGION_CODE_FOR_NON_GEO_ENTITIES)
+ .setCountryCode(COUNTRY_CODE);
+
+ private CompositeMetadataContainer metadataContainer;
+
+ @Override
+ public void setUp() {
+ metadataContainer = new CompositeMetadataContainer();
+ }
+
+ public void test_getMetadataBy_shouldReturnNullForNonExistingRegionCode() {
+ assertNull(metadataContainer.getMetadataBy(REGION_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnMetadataForExistingRegionCode() {
+ metadataContainer.accept(PHONE_METADATA_WITH_REGION_CODE);
+
+ assertSame(PHONE_METADATA_WITH_REGION_CODE, metadataContainer.getMetadataBy(REGION_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnNullForNonExistingCountryCode() {
+ assertNull(metadataContainer.getMetadataBy(COUNTRY_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnMetadataForExistingCountryCode() {
+ metadataContainer.accept(PHONE_METADATA_WITH_COUNTRY_CODE);
+
+ assertSame(PHONE_METADATA_WITH_COUNTRY_CODE, metadataContainer.getMetadataBy(COUNTRY_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnNullForExistingCountryCodeOfGeoRegion() {
+ metadataContainer.accept(PHONE_METADATA_WITH_REGION_CODE);
+
+ assertNull(metadataContainer.getMetadataBy(COUNTRY_CODE));
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainerTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainerTest.java
new file mode 100644
index 00000000..21fbea64
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MapBackedMetadataContainerTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import junit.framework.TestCase;
+
+public class MapBackedMetadataContainerTest extends TestCase {
+
+ private static final String REGION_CODE = "US";
+ private static final Integer COUNTRY_CODE = 41;
+ private static final PhoneMetadata PHONE_METADATA =
+ PhoneMetadata.newBuilder().setId(REGION_CODE).setCountryCode(COUNTRY_CODE);
+
+ public void test_getMetadataBy_shouldReturnNullForNullRegionCode() {
+ assertNull(MapBackedMetadataContainer.byRegionCode().getMetadataBy(null));
+ }
+
+ public void test_getMetadataBy_shouldReturnNullForNonExistingRegionCode() {
+ assertNull(MapBackedMetadataContainer.byRegionCode().getMetadataBy(REGION_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnMetadataForExistingRegionCode() {
+ MapBackedMetadataContainer<String> metadataContainer =
+ MapBackedMetadataContainer.byRegionCode();
+
+ metadataContainer.accept(PHONE_METADATA);
+
+ assertSame(PHONE_METADATA, metadataContainer.getMetadataBy(REGION_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnNullForNullCountryCode() {
+ assertNull(MapBackedMetadataContainer.byCountryCallingCode().getMetadataBy(null));
+ }
+
+ public void test_getMetadataBy_shouldReturnNullForNonExistingCountryCode() {
+ assertNull(MapBackedMetadataContainer.byCountryCallingCode().getMetadataBy(COUNTRY_CODE));
+ }
+
+ public void test_getMetadataBy_shouldReturnMetadataForExistingCountryCode() {
+ MapBackedMetadataContainer<Integer> metadataContainer =
+ MapBackedMetadataContainer.byCountryCallingCode();
+
+ metadataContainer.accept(PHONE_METADATA);
+
+ assertSame(PHONE_METADATA, metadataContainer.getMetadataBy(COUNTRY_CODE));
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProviderTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProviderTest.java
new file mode 100644
index 00000000..c7ad7ddc
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProviderTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import static org.junit.Assert.assertThrows;
+
+import junit.framework.TestCase;
+import org.junit.function.ThrowingRunnable;
+
+public final class MultiFileModeFileNameProviderTest extends TestCase {
+
+ private final PhoneMetadataFileNameProvider metadataFileNameProvider =
+ new MultiFileModeFileNameProvider("some/file");
+
+ public void test_getFor_shouldAppendKeyToTheBase() {
+ String metadataFileName = metadataFileNameProvider.getFor("key1");
+
+ assertEquals("some/file_key1", metadataFileName);
+ }
+
+ public void test_getFor_shouldThrowExceptionForNonAlphanumericKey() {
+ assertThrows(
+ IllegalArgumentException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() {
+ metadataFileNameProvider.getFor("\tkey1\n");
+ }
+ });
+ }
+}
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProviderTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProviderTest.java
new file mode 100644
index 00000000..21d3bf75
--- /dev/null
+++ b/libphonenumber/test/com/google/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProviderTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2022 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.google.i18n.phonenumbers.metadata.source;
+
+import junit.framework.TestCase;
+
+public final class SingleFileModeFileNameProviderTest extends TestCase {
+
+ private final PhoneMetadataFileNameProvider metadataFileNameProvider =
+ new SingleFileModeFileNameProvider("some/file");
+
+ public void test_getFor_shouldReturnTheFileNameBase() {
+ String metadataFileName = metadataFileNameProvider.getFor("key1");
+
+ assertEquals("some/file", metadataFileName);
+ }
+}
diff --git a/pom.xml b/pom.xml
index 97b8cc5d..1e3957e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.googlecode.libphonenumber</groupId>
<artifactId>libphonenumber-parent</artifactId>
- <version>8.12.46</version>
+ <version>8.12.54</version>
<packaging>pom</packaging>
<url>https://github.com/google/libphonenumber/</url>
@@ -34,7 +34,7 @@
<connection>scm:git:https://github.com/google/libphonenumber.git</connection>
<developerConnection>scm:git:git@github.com:googlei18n/libphonenumber.git</developerConnection>
<url>https://github.com/google/libphonenumber/</url>
- <tag>v8.12.46</tag>
+ <tag>v8.12.54</tag>
</scm>
<properties>
@@ -235,6 +235,12 @@
<version>4.13.1</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.10.19</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
index 34829607..e40d68ab 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java
@@ -21,6 +21,7 @@ import com.android.i18n.phonenumbers.NumberParseException;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.android.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import com.android.i18n.phonenumbers.prefixmapper.PrefixFileReader;
import java.util.List;
@@ -34,9 +35,7 @@ import java.util.Locale;
*/
public class PhoneNumberOfflineGeocoder {
private static PhoneNumberOfflineGeocoder instance = null;
- private static final String MAPPING_DATA_DIRECTORY =
- "/com/android/i18n/phonenumbers/geocoding/data/";
- private PrefixFileReader prefixFileReader = null;
+ private final PrefixFileReader prefixFileReader;
private final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@@ -57,7 +56,8 @@ public class PhoneNumberOfflineGeocoder {
@android.compat.annotation.UnsupportedAppUsage
public static synchronized PhoneNumberOfflineGeocoder getInstance() {
if (instance == null) {
- instance = new PhoneNumberOfflineGeocoder(MAPPING_DATA_DIRECTORY);
+ instance = new PhoneNumberOfflineGeocoder(DefaultMetadataDependenciesProvider.getInstance()
+ .getGeocodingDataDirectory());
}
return instance;
}
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1263_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1263_en
new file mode 100644
index 00000000..04e95159
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1263_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1310_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1310_en
index 26fd3041..edb45ee7 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1310_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1310_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1468_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1468_en
new file mode 100644
index 00000000..93016187
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1468_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1584_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1584_en
new file mode 100644
index 00000000..41d8570b
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1584_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1656_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1656_en
new file mode 100644
index 00000000..8625c98f
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1656_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1826_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1826_en
new file mode 100644
index 00000000..2eda79af
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1826_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1943_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1943_en
new file mode 100644
index 00000000..6cf5625e
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1943_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1948_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1948_en
new file mode 100644
index 00000000..9577cef8
--- /dev/null
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/1948_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_en
index 2ae8176b..9a806f96 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_fr b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_fr
index 9016b0d0..92f3a0ce 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_fr
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/212_fr
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/33_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/33_en
index c94e1399..d8b8de7d 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/33_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/33_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_en
index 4e81c8af..ced2084e 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_es b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_es
index 3ab2985b..fe9f8a59 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_es
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/34_es
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/351_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/351_en
index 61f0da1e..5d925521 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/351_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/351_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/44_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/44_en
index b40793e7..0b9330fd 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/44_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/44_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/52_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/52_en
index e51cd55d..e1006cd9 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/52_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/52_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/54_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/54_en
index 53245827..a277f96d 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/54_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/54_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/57_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/57_en
index ec254fad..fde61aae 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/57_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/57_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/61_en b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/61_en
index e56bfb93..b5cd9779 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/61_en
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/61_en
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/config b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/config
index 49659897..909cabf3 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/config
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/geocoding/data/config
Binary files differ
diff --git a/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data b/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data
index a2c80e64..aaa5ddfe 100644
--- a/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data
+++ b/repackaged/geocoder/src/com/android/i18n/phonenumbers/timezones/data/map_data
Binary files differ
diff --git a/repackaged/internal/prefixmapper/src/com/android/i18n/phonenumbers/prefixmapper/PrefixFileReader.java b/repackaged/internal/prefixmapper/src/com/android/i18n/phonenumbers/prefixmapper/PrefixFileReader.java
index 98861215..825e53b3 100644
--- a/repackaged/internal/prefixmapper/src/com/android/i18n/phonenumbers/prefixmapper/PrefixFileReader.java
+++ b/repackaged/internal/prefixmapper/src/com/android/i18n/phonenumbers/prefixmapper/PrefixFileReader.java
@@ -17,8 +17,10 @@
package com.android.i18n.phonenumbers.prefixmapper;
+import com.android.i18n.phonenumbers.MetadataLoader;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.android.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
@@ -42,17 +44,17 @@ public class PrefixFileReader {
private MappingFileProvider mappingFileProvider = new MappingFileProvider();
// A mapping from countryCallingCode_lang to the corresponding phone prefix map that has been
// loaded.
- private Map<String, PhonePrefixMap> availablePhonePrefixMaps =
- new HashMap<String, PhonePrefixMap>();
+ private Map<String, PhonePrefixMap> availablePhonePrefixMaps = new HashMap<>();
+ private final MetadataLoader metadataLoader;
public PrefixFileReader(String phonePrefixDataDirectory) {
this.phonePrefixDataDirectory = phonePrefixDataDirectory;
+ this.metadataLoader = DefaultMetadataDependenciesProvider.getInstance().getMetadataLoader();
loadMappingFileProvider();
}
private void loadMappingFileProvider() {
- InputStream source =
- PrefixFileReader.class.getResourceAsStream(phonePrefixDataDirectory + "config");
+ InputStream source = metadataLoader.loadMetadata(phonePrefixDataDirectory + "config");
ObjectInputStream in = null;
try {
in = new ObjectInputStream(source);
@@ -77,8 +79,7 @@ public class PrefixFileReader {
}
private void loadPhonePrefixMapFromFile(String fileName) {
- InputStream source =
- PrefixFileReader.class.getResourceAsStream(phonePrefixDataDirectory + fileName);
+ InputStream source = metadataLoader.loadMetadata(phonePrefixDataDirectory + fileName);
ObjectInputStream in = null;
try {
in = new ObjectInputStream(source);
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
index cca8a0b8..1b964008 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java
@@ -29,7 +29,7 @@ import java.util.Set;
*/
public class AlternateFormatsCountryCodeSet {
// A set of all country codes for which data is available.
- static Set<Integer> getCountryCodeSet() {
+ public static Set<Integer> getCountryCodeSet() {
// The capacity is set to 61 as there are 46 different entries,
// and this offers a load factor of roughly 0.75.
Set<Integer> countryCodeSet = new HashSet<Integer>(61);
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
index 6d6b33f6..28072bfb 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
@@ -34,7 +34,7 @@ public class CountryCodeToRegionCodeMap {
// country/region represented by that country code. In the case of multiple
// countries sharing a calling code, such as the NANPA countries, the one
// indicated with "isMainCountryForCode" in the metadata should be first.
- static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
+ public static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
// The capacity is set to 286 as there are 215 different entries,
// and this offers a load factor of roughly 0.75.
Map<Integer, List<String>> countryCodeToRegionCodeMap =
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataManager.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataManager.java
deleted file mode 100644
index 45941115..00000000
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataManager.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2012 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;
-
-import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Manager for loading metadata for alternate formats and short numbers. We also declare some
- * constants for phone number metadata loading, to more easily maintain all three types of metadata
- * together.
- * TODO: Consider managing phone number metadata loading here too.
- */
-final class MetadataManager {
- static final String MULTI_FILE_PHONE_NUMBER_METADATA_FILE_PREFIX =
- "/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto";
- static final String SINGLE_FILE_PHONE_NUMBER_METADATA_FILE_NAME =
- "/com/android/i18n/phonenumbers/data/SingleFilePhoneNumberMetadataProto";
- private static final String ALTERNATE_FORMATS_FILE_PREFIX =
- "/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto";
- private static final String SHORT_NUMBER_METADATA_FILE_PREFIX =
- "/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto";
-
- static final MetadataLoader DEFAULT_METADATA_LOADER = new MetadataLoader() {
- @Override
- public InputStream loadMetadata(String metadataFileName) {
- return MetadataManager.class.getResourceAsStream(metadataFileName);
- }
- };
-
- private static final Logger logger = Logger.getLogger(MetadataManager.class.getName());
-
- // A mapping from a country calling code to the alternate formats for that country calling code.
- private static final ConcurrentHashMap<Integer, PhoneMetadata> alternateFormatsMap =
- new ConcurrentHashMap<Integer, PhoneMetadata>();
-
- // A mapping from a region code to the short number metadata for that region code.
- private static final ConcurrentHashMap<String, PhoneMetadata> shortNumberMetadataMap =
- new ConcurrentHashMap<String, PhoneMetadata>();
-
- // The set of country calling codes for which there are alternate formats. For every country
- // calling code in this set there should be metadata linked into the resources.
- private static final Set<Integer> alternateFormatsCountryCodes =
- AlternateFormatsCountryCodeSet.getCountryCodeSet();
-
- // The set of region codes for which there are short number metadata. For every region code in
- // this set there should be metadata linked into the resources.
- private static final Set<String> shortNumberMetadataRegionCodes =
- ShortNumbersRegionCodeSet.getRegionCodeSet();
-
- private MetadataManager() {}
-
- static PhoneMetadata getAlternateFormatsForCountry(int countryCallingCode) {
- if (!alternateFormatsCountryCodes.contains(countryCallingCode)) {
- return null;
- }
- return getMetadataFromMultiFilePrefix(countryCallingCode, alternateFormatsMap,
- ALTERNATE_FORMATS_FILE_PREFIX, DEFAULT_METADATA_LOADER);
- }
-
- static PhoneMetadata getShortNumberMetadataForRegion(String regionCode) {
- if (!shortNumberMetadataRegionCodes.contains(regionCode)) {
- return null;
- }
- return getMetadataFromMultiFilePrefix(regionCode, shortNumberMetadataMap,
- SHORT_NUMBER_METADATA_FILE_PREFIX, DEFAULT_METADATA_LOADER);
- }
-
- static Set<String> getSupportedShortNumberRegions() {
- return Collections.unmodifiableSet(shortNumberMetadataRegionCodes);
- }
-
- /**
- * @param key the lookup key for the provided map, typically a region code or a country calling
- * code
- * @param map the map containing mappings of already loaded metadata from their {@code key}. If
- * this {@code key}'s metadata isn't already loaded, it will be added to this map after
- * loading
- * @param filePrefix the prefix of the file to load metadata from
- * @param metadataLoader the metadata loader used to inject alternative metadata sources
- */
- static <T> PhoneMetadata getMetadataFromMultiFilePrefix(T key,
- ConcurrentHashMap<T, PhoneMetadata> map, String filePrefix, MetadataLoader metadataLoader) {
- PhoneMetadata metadata = map.get(key);
- if (metadata != null) {
- return metadata;
- }
- // We assume key.toString() is well-defined.
- String fileName = filePrefix + "_" + key;
- List<PhoneMetadata> metadataList = getMetadataFromSingleFileName(fileName, metadataLoader);
- if (metadataList.size() > 1) {
- logger.log(Level.WARNING, "more than one metadata in file " + fileName);
- }
- metadata = metadataList.get(0);
- PhoneMetadata oldValue = map.putIfAbsent(key, metadata);
- return (oldValue != null) ? oldValue : metadata;
- }
-
- // Loader and holder for the metadata maps loaded from a single file.
- static class SingleFileMetadataMaps {
- static SingleFileMetadataMaps load(String fileName, MetadataLoader metadataLoader) {
- List<PhoneMetadata> metadataList = getMetadataFromSingleFileName(fileName, metadataLoader);
- Map<String, PhoneMetadata> regionCodeToMetadata = new HashMap<String, PhoneMetadata>();
- Map<Integer, PhoneMetadata> countryCallingCodeToMetadata =
- new HashMap<Integer, PhoneMetadata>();
- for (PhoneMetadata metadata : metadataList) {
- String regionCode = metadata.getId();
- if (PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCode)) {
- // regionCode belongs to a non-geographical entity.
- countryCallingCodeToMetadata.put(metadata.getCountryCode(), metadata);
- } else {
- regionCodeToMetadata.put(regionCode, metadata);
- }
- }
- return new SingleFileMetadataMaps(regionCodeToMetadata, countryCallingCodeToMetadata);
- }
-
- // A map from a region code to the PhoneMetadata for that region.
- // For phone number metadata, the region code "001" is excluded, since that is used for the
- // non-geographical phone number entities.
- private final Map<String, PhoneMetadata> regionCodeToMetadata;
-
- // A map from a country calling code to the PhoneMetadata for that country calling code.
- // Examples of the country calling codes include 800 (International Toll Free Service) and 808
- // (International Shared Cost Service).
- // For phone number metadata, only the non-geographical phone number entities' country calling
- // codes are present.
- private final Map<Integer, PhoneMetadata> countryCallingCodeToMetadata;
-
- private SingleFileMetadataMaps(Map<String, PhoneMetadata> regionCodeToMetadata,
- Map<Integer, PhoneMetadata> countryCallingCodeToMetadata) {
- this.regionCodeToMetadata = Collections.unmodifiableMap(regionCodeToMetadata);
- this.countryCallingCodeToMetadata = Collections.unmodifiableMap(countryCallingCodeToMetadata);
- }
-
- PhoneMetadata get(String regionCode) {
- return regionCodeToMetadata.get(regionCode);
- }
-
- PhoneMetadata get(int countryCallingCode) {
- return countryCallingCodeToMetadata.get(countryCallingCode);
- }
- }
-
- // Manages the atomic reference lifecycle of a SingleFileMetadataMaps encapsulation.
- static SingleFileMetadataMaps getSingleFileMetadataMaps(
- AtomicReference<SingleFileMetadataMaps> ref, String fileName, MetadataLoader metadataLoader) {
- SingleFileMetadataMaps maps = ref.get();
- if (maps != null) {
- return maps;
- }
- maps = SingleFileMetadataMaps.load(fileName, metadataLoader);
- ref.compareAndSet(null, maps);
- return ref.get();
- }
-
- private static List<PhoneMetadata> getMetadataFromSingleFileName(String fileName,
- MetadataLoader metadataLoader) {
- InputStream source = metadataLoader.loadMetadata(fileName);
- if (source == null) {
- // Sanity check; this would only happen if we packaged jars incorrectly.
- throw new IllegalStateException("missing metadata: " + fileName);
- }
- PhoneMetadataCollection metadataCollection = loadMetadataAndCloseInput(source);
- List<PhoneMetadata> metadataList = metadataCollection.getMetadataList();
- if (metadataList.size() == 0) {
- // Sanity check; this should not happen since we build with non-empty metadata.
- throw new IllegalStateException("empty metadata: " + fileName);
- }
- return metadataList;
- }
-
- /**
- * Loads and returns the metadata from the given stream and closes the stream.
- *
- * @param source the non-null stream from which metadata is to be read
- * @return the loaded metadata
- */
- private static PhoneMetadataCollection loadMetadataAndCloseInput(InputStream source) {
- ObjectInputStream ois = null;
- try {
- try {
- ois = new ObjectInputStream(source);
- } catch (IOException e) {
- throw new RuntimeException("cannot load/parse metadata", e);
- }
- PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection();
- try {
- metadataCollection.readExternal(ois);
- } catch (IOException e) {
- throw new RuntimeException("cannot load/parse metadata", e);
- }
- return metadataCollection;
- } finally {
- try {
- if (ois != null) {
- // This will close all underlying streams as well, including source.
- ois.close();
- } else {
- source.close();
- }
- } catch (IOException e) {
- logger.log(Level.WARNING, "error closing input stream (ignored)", e);
- }
- }
- }
-}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MissingMetadataException.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MissingMetadataException.java
new file mode 100644
index 00000000..ee09e99f
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MissingMetadataException.java
@@ -0,0 +1,11 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+package com.android.i18n.phonenumbers;
+
+/** Exception class for cases when expected metadata cannot be found.
+ * @hide This class is not part of the Android public SDK API*/
+public final class MissingMetadataException extends IllegalStateException {
+
+ public MissingMetadataException(String message) {
+ super(message);
+ }
+} \ No newline at end of file
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MultiFileMetadataSourceImpl.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MultiFileMetadataSourceImpl.java
deleted file mode 100644
index 7d9e713c..00000000
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MultiFileMetadataSourceImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2015 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;
-
-import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Implementation of {@link MetadataSource} that reads from multiple resource files.
- */
-final class MultiFileMetadataSourceImpl implements MetadataSource {
- // The prefix of the binary files containing phone number metadata for different regions.
- // This enables us to set up with different metadata, such as for testing.
- private final String phoneNumberMetadataFilePrefix;
-
- // The {@link MetadataLoader} used to inject alternative metadata sources.
- private final MetadataLoader metadataLoader;
-
- // A mapping from a region code to the phone number metadata for that region code.
- // Unlike the mappings for alternate formats and short number metadata, the phone number metadata
- // is loaded from a non-statically determined file prefix; therefore this map is bound to the
- // instance and not static.
- private final ConcurrentHashMap<String, PhoneMetadata> geographicalRegions =
- new ConcurrentHashMap<String, PhoneMetadata>();
-
- // A mapping from a country calling code for a non-geographical entity to the phone number
- // metadata for that country calling code. Examples of the country calling codes include 800
- // (International Toll Free Service) and 808 (International Shared Cost Service).
- // Unlike the mappings for alternate formats and short number metadata, the phone number metadata
- // is loaded from a non-statically determined file prefix; therefore this map is bound to the
- // instance and not static.
- private final ConcurrentHashMap<Integer, PhoneMetadata> nonGeographicalRegions =
- new ConcurrentHashMap<Integer, PhoneMetadata>();
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- // @VisibleForTesting
- MultiFileMetadataSourceImpl(String phoneNumberMetadataFilePrefix, MetadataLoader metadataLoader) {
- this.phoneNumberMetadataFilePrefix = phoneNumberMetadataFilePrefix;
- this.metadataLoader = metadataLoader;
- }
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- MultiFileMetadataSourceImpl(MetadataLoader metadataLoader) {
- this(MetadataManager.MULTI_FILE_PHONE_NUMBER_METADATA_FILE_PREFIX, metadataLoader);
- }
-
- @Override
- public PhoneMetadata getMetadataForRegion(String regionCode) {
- return MetadataManager.getMetadataFromMultiFilePrefix(regionCode, geographicalRegions,
- phoneNumberMetadataFilePrefix, metadataLoader);
- }
-
- @Override
- public PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
- if (!isNonGeographical(countryCallingCode)) {
- // The given country calling code was for a geographical region.
- return null;
- }
- return MetadataManager.getMetadataFromMultiFilePrefix(countryCallingCode, nonGeographicalRegions,
- phoneNumberMetadataFilePrefix, metadataLoader);
- }
-
- // A country calling code is non-geographical if it only maps to the non-geographical region code,
- // i.e. "001".
- private boolean isNonGeographical(int countryCallingCode) {
- List<String> regionCodes =
- CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap().get(countryCallingCode);
- return (regionCodes.size() == 1
- && PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCodes.get(0)));
- }
-}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
index 2e2d96a3..a9f60e96 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberMatcher.java
@@ -25,6 +25,7 @@ import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.android.i18n.phonenumbers.internal.RegexCache;
+import com.android.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
import java.lang.Character.UnicodeBlock;
import java.util.Iterator;
import java.util.NoSuchElementException;
@@ -576,7 +577,9 @@ final class PhoneNumberMatcher implements Iterator<PhoneNumberMatch> {
}
// If this didn't pass, see if there are any alternate formats that match, and try them instead.
PhoneMetadata alternateFormats =
- MetadataManager.getAlternateFormatsForCountry(number.getCountryCode());
+ DefaultMetadataDependenciesProvider.getInstance()
+ .getAlternateFormatsMetadataSource()
+ .getFormattingMetadataForCountryCallingCode(number.getCountryCode());
String nationalSignificantNumber = util.getNationalSignificantNumber(number);
if (alternateFormats != null) {
for (NumberFormat alternateFormat : alternateFormats.getNumberFormatList()) {
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
index 95e4c4e7..77f1a13c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java
@@ -25,11 +25,12 @@ import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
import com.android.i18n.phonenumbers.internal.MatcherApi;
import com.android.i18n.phonenumbers.internal.RegexBasedMatcher;
import com.android.i18n.phonenumbers.internal.RegexCache;
-
+import com.android.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
+import com.android.i18n.phonenumbers.metadata.source.MetadataSource;
+import com.android.i18n.phonenumbers.metadata.source.MetadataSourceImpl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -75,10 +76,6 @@ public class PhoneNumberUtil {
private static final int NANPA_COUNTRY_CODE = 1;
- // The prefix that needs to be inserted in front of a Colombian landline number when dialed from
- // a mobile phone in Colombia.
- private static final String COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX = "3";
-
// Map of country calling codes that use a mobile token before the area code. One example of when
// this is relevant is when determining the length of the national destination code, which should
// be the length of the area code plus the length of the mobile token.
@@ -123,16 +120,16 @@ public class PhoneNumberUtil {
private static final Map<Character, Character> ALL_PLUS_NUMBER_GROUPING_SYMBOLS;
static {
- HashMap<Integer, String> mobileTokenMap = new HashMap<Integer, String>();
+ HashMap<Integer, String> mobileTokenMap = new HashMap<>();
mobileTokenMap.put(54, "9");
MOBILE_TOKEN_MAPPINGS = Collections.unmodifiableMap(mobileTokenMap);
- HashSet<Integer> geoMobileCountriesWithoutMobileAreaCodes = new HashSet<Integer>();
+ HashSet<Integer> geoMobileCountriesWithoutMobileAreaCodes = new HashSet<>();
geoMobileCountriesWithoutMobileAreaCodes.add(86); // China
GEO_MOBILE_COUNTRIES_WITHOUT_MOBILE_AREA_CODES =
Collections.unmodifiableSet(geoMobileCountriesWithoutMobileAreaCodes);
- HashSet<Integer> geoMobileCountries = new HashSet<Integer>();
+ HashSet<Integer> geoMobileCountries = new HashSet<>();
geoMobileCountries.add(52); // Mexico
geoMobileCountries.add(54); // Argentina
geoMobileCountries.add(55); // Brazil
@@ -142,7 +139,7 @@ public class PhoneNumberUtil {
// Simple ASCII digits map used to populate ALPHA_PHONE_MAPPINGS and
// ALL_PLUS_NUMBER_GROUPING_SYMBOLS.
- HashMap<Character, Character> asciiDigitMappings = new HashMap<Character, Character>();
+ HashMap<Character, Character> asciiDigitMappings = new HashMap<>();
asciiDigitMappings.put('0', '0');
asciiDigitMappings.put('1', '1');
asciiDigitMappings.put('2', '2');
@@ -154,7 +151,7 @@ public class PhoneNumberUtil {
asciiDigitMappings.put('8', '8');
asciiDigitMappings.put('9', '9');
- HashMap<Character, Character> alphaMap = new HashMap<Character, Character>(40);
+ HashMap<Character, Character> alphaMap = new HashMap<>(40);
alphaMap.put('A', '2');
alphaMap.put('B', '2');
alphaMap.put('C', '2');
@@ -183,19 +180,19 @@ public class PhoneNumberUtil {
alphaMap.put('Z', '9');
ALPHA_MAPPINGS = Collections.unmodifiableMap(alphaMap);
- HashMap<Character, Character> combinedMap = new HashMap<Character, Character>(100);
+ HashMap<Character, Character> combinedMap = new HashMap<>(100);
combinedMap.putAll(ALPHA_MAPPINGS);
combinedMap.putAll(asciiDigitMappings);
ALPHA_PHONE_MAPPINGS = Collections.unmodifiableMap(combinedMap);
- HashMap<Character, Character> diallableCharMap = new HashMap<Character, Character>();
+ HashMap<Character, Character> diallableCharMap = new HashMap<>();
diallableCharMap.putAll(asciiDigitMappings);
diallableCharMap.put(PLUS_SIGN, PLUS_SIGN);
diallableCharMap.put('*', '*');
diallableCharMap.put('#', '#');
DIALLABLE_CHAR_MAPPINGS = Collections.unmodifiableMap(diallableCharMap);
- HashMap<Character, Character> allPlusNumberGroupings = new HashMap<Character, Character>();
+ HashMap<Character, Character> allPlusNumberGroupings = new HashMap<>();
// Put (lower letter -> upper letter) and (upper letter -> upper letter) mappings.
for (char c : ALPHA_MAPPINGS.keySet()) {
allPlusNumberGroupings.put(Character.toLowerCase(c), c);
@@ -310,8 +307,8 @@ public class PhoneNumberUtil {
// version.
private static final String EXTN_PATTERNS_FOR_PARSING = createExtnPattern(true);
static final String EXTN_PATTERNS_FOR_MATCHING = createExtnPattern(false);
-
- /**
+
+ /**
* Helper method for constructing regular expressions for parsing. Creates an expression that
* captures up to maxLength digits.
*/
@@ -692,7 +689,7 @@ public class PhoneNumberUtil {
// The set of regions that share country calling code 1.
// 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);
+ private final Set<String> nanpaRegions = new HashSet<>(35);
// A cache for frequently used region-specific regular expressions.
// The initial capacity is set to 100 as this seems to be an optimal value for Android, based on
@@ -702,11 +699,11 @@ public class PhoneNumberUtil {
// The set of regions the library supports.
// There are roughly 240 of them and we set the initial capacity of the HashSet to 320 to offer a
// load factor of roughly 0.75.
- private final Set<String> supportedRegions = new HashSet<String>(320);
+ private final Set<String> supportedRegions = new HashSet<>(320);
// The set of country calling codes that map to the non-geo entity region ("001"). This set
// currently contains < 12 elements so the default capacity of 16 (load factor=0.75) is fine.
- private final Set<Integer> countryCodesForNonGeographicalRegion = new HashSet<Integer>();
+ private final Set<Integer> countryCodesForNonGeographicalRegion = new HashSet<>();
/**
* This class implements a singleton, the constructor is only visible to facilitate testing.
@@ -1122,7 +1119,7 @@ public class PhoneNumberUtil {
* be non-null.
*/
private Set<PhoneNumberType> getSupportedTypesForMetadata(PhoneMetadata metadata) {
- Set<PhoneNumberType> types = new TreeSet<PhoneNumberType>();
+ Set<PhoneNumberType> types = new TreeSet<>();
for (PhoneNumberType type : PhoneNumberType.values()) {
if (type == PhoneNumberType.FIXED_LINE_OR_MOBILE || type == PhoneNumberType.UNKNOWN) {
// Never return FIXED_LINE_OR_MOBILE (it is a convenience type, and represents that a
@@ -1183,7 +1180,9 @@ public class PhoneNumberUtil {
@android.compat.annotation.UnsupportedAppUsage
public static synchronized PhoneNumberUtil getInstance() {
if (instance == null) {
- setInstance(createInstance(MetadataManager.DEFAULT_METADATA_LOADER));
+ MetadataLoader metadataLoader = DefaultMetadataDependenciesProvider.getInstance()
+ .getMetadataLoader();
+ setInstance(createInstance(metadataLoader));
}
return instance;
}
@@ -1204,7 +1203,11 @@ public class PhoneNumberUtil {
if (metadataLoader == null) {
throw new IllegalArgumentException("metadataLoader could not be null.");
}
- return createInstance(new MultiFileMetadataSourceImpl(metadataLoader));
+ return createInstance(new MetadataSourceImpl(
+ DefaultMetadataDependenciesProvider.getInstance().getPhoneNumberMetadataFileNameProvider(),
+ metadataLoader,
+ DefaultMetadataDependenciesProvider.getInstance().getMetadataParser()
+ ));
}
/**
@@ -1499,10 +1502,7 @@ public class PhoneNumberUtil {
(numberType == PhoneNumberType.FIXED_LINE) || (numberType == PhoneNumberType.MOBILE)
|| (numberType == PhoneNumberType.FIXED_LINE_OR_MOBILE);
// Carrier codes may be needed in some countries. We handle this here.
- if (regionCode.equals("CO") && numberType == PhoneNumberType.FIXED_LINE) {
- formattedNumber =
- formatNationalNumberWithCarrierCode(numberNoExt, COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX);
- } else if (regionCode.equals("BR") && isFixedLineOrMobile) {
+ if (regionCode.equals("BR") && isFixedLineOrMobile) {
// Historically, we set this to an empty string when parsing with raw input if none was
// found in the input string. However, this doesn't result in a number we can dial. For this
// reason, we treat the empty string the same as if it isn't set at all.
@@ -1643,19 +1643,21 @@ public class PhoneNumberUtil {
}
/**
- * Formats a phone number using the original phone number format that the number is parsed from.
- * The original format is embedded in the country_code_source field of the PhoneNumber object
- * passed in. If such information is missing, the number will be formatted into the NATIONAL
- * format by default. When we don't have a formatting pattern for the number, the method returns
- * the raw input when it is available.
+ * Formats a phone number using the original phone number format (e.g. INTERNATIONAL or NATIONAL)
+ * that the number is parsed from, provided that the number has been parsed with {@link
+ * parseAndKeepRawInput}. Otherwise the number will be formatted in NATIONAL format.
+ *
+ * <p>The original format is embedded in the country_code_source field of the PhoneNumber object
+ * passed in, which is only set when parsing keeps the raw input. When we don't have a formatting
+ * pattern for the number, the method falls back to returning the raw input.
*
- * Note this method guarantees no digit will be inserted, removed or modified as a result of
+ * <p>Note this method guarantees no digit will be inserted, removed or modified as a result of
* formatting.
*
- * @param number the phone number that needs to be formatted in its original number format
- * @param regionCallingFrom the region whose IDD needs to be prefixed if the original number
- * has one
- * @return the formatted phone number in its original number format
+ * @param number the phone number that needs to be formatted in its original number format
+ * @param regionCallingFrom the region whose IDD needs to be prefixed if the original number has
+ * one
+ * @return the formatted phone number in its original number format
*/
@android.compat.annotation.UnsupportedAppUsage
public String formatInOriginalFormat(PhoneNumber number, String regionCallingFrom) {
@@ -1735,7 +1737,7 @@ public class PhoneNumberUtil {
NumberFormat.Builder numFormatCopy = NumberFormat.newBuilder();
numFormatCopy.mergeFrom(formatRule);
numFormatCopy.clearNationalPrefixFormattingRule();
- List<NumberFormat> numberFormats = new ArrayList<NumberFormat>(1);
+ List<NumberFormat> numberFormats = new ArrayList<>(1);
numberFormats.add(numFormatCopy.build());
formattedNumber = formatByPattern(number, PhoneNumberFormat.NATIONAL, numberFormats);
break;
@@ -2313,21 +2315,42 @@ public class PhoneNumberUtil {
}
/**
- * Returns the metadata for the given region code or {@code null} if the region code is invalid
- * or unknown.
+ * Returns the metadata for the given region code or {@code null} if the region code is invalid or
+ * unknown.
+ *
+ * @throws MissingMetadataException if the region code is valid, but metadata cannot be found.
*/
PhoneMetadata getMetadataForRegion(String regionCode) {
if (!isValidRegionCode(regionCode)) {
return null;
}
- return metadataSource.getMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = metadataSource.getMetadataForRegion(regionCode);
+ ensureMetadataIsNonNull(phoneMetadata, "Missing metadata for region code " + regionCode);
+ return phoneMetadata;
}
+ /**
+ * Returns the metadata for the given country calling code or {@code null} if the country calling
+ * code is invalid or unknown.
+ *
+ * @throws MissingMetadataException if the country calling code is valid, but metadata cannot be
+ * found.
+ */
PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
- if (!countryCallingCodeToRegionCodeMap.containsKey(countryCallingCode)) {
+ if (!countryCodesForNonGeographicalRegion.contains(countryCallingCode)) {
return null;
}
- return metadataSource.getMetadataForNonGeographicalRegion(countryCallingCode);
+ PhoneMetadata phoneMetadata = metadataSource.getMetadataForNonGeographicalRegion(
+ countryCallingCode);
+ ensureMetadataIsNonNull(phoneMetadata,
+ "Missing metadata for country code " + countryCallingCode);
+ return phoneMetadata;
+ }
+
+ private static void ensureMetadataIsNonNull(PhoneMetadata phoneMetadata, String message) {
+ if (phoneMetadata == null) {
+ throw new MissingMetadataException(message);
+ }
}
boolean isNumberMatchingDesc(String nationalNumber, PhoneNumberDesc numberDesc) {
@@ -2627,7 +2650,7 @@ public class PhoneNumberUtil {
PhoneNumberDesc mobileDesc = getNumberDescByType(metadata, PhoneNumberType.MOBILE);
if (descHasPossibleNumberData(mobileDesc)) {
// Merge the mobile data in if there was any. We have to make a copy to do this.
- possibleLengths = new ArrayList<Integer>(possibleLengths);
+ possibleLengths = new ArrayList<>(possibleLengths);
// Note that when adding the possible lengths from mobile, we have to again check they
// aren't empty since if they are this indicates they are the same as the general desc and
// should be obtained from there.
@@ -2641,7 +2664,7 @@ public class PhoneNumberUtil {
if (localLengths.isEmpty()) {
localLengths = mobileDesc.getPossibleLengthLocalOnlyList();
} else {
- localLengths = new ArrayList<Integer>(localLengths);
+ localLengths = new ArrayList<>(localLengths);
localLengths.addAll(mobileDesc.getPossibleLengthLocalOnlyList());
Collections.sort(localLengths);
}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumberInfo.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumberInfo.java
index a09b9228..64c2c743 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumberInfo.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumberInfo.java
@@ -23,6 +23,8 @@ import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
import com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.android.i18n.phonenumbers.metadata.DefaultMetadataDependenciesProvider;
+import com.android.i18n.phonenumbers.metadata.source.RegionMetadataSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -46,12 +48,13 @@ public class ShortNumberInfo {
private static final Logger logger = Logger.getLogger(ShortNumberInfo.class.getName());
private static final ShortNumberInfo INSTANCE =
- new ShortNumberInfo(RegexBasedMatcher.create());
+ new ShortNumberInfo(
+ RegexBasedMatcher.create(),
+ DefaultMetadataDependenciesProvider.getInstance().getShortNumberMetadataSource());
// In these countries, if extra digits are added to an emergency number, it no longer connects
// to the emergency service.
- private static final Set<String> REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT =
- new HashSet<String>();
+ private static final Set<String> REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT = new HashSet<>();
static {
REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.add("BR");
REGIONS_WHERE_EMERGENCY_NUMBERS_MUST_BE_EXACT.add("CL");
@@ -64,7 +67,7 @@ public class ShortNumberInfo {
TOLL_FREE,
STANDARD_RATE,
PREMIUM_RATE,
- UNKNOWN_COST;
+ UNKNOWN_COST
}
/** Returns the singleton instance of the ShortNumberInfo. */
@@ -82,9 +85,13 @@ public class ShortNumberInfo {
// first.
private final Map<Integer, List<String>> countryCallingCodeToRegionCodeMap;
+ private final RegionMetadataSource shortNumberMetadataSource;
+
// @VisibleForTesting
- ShortNumberInfo(MatcherApi matcherApi) {
+ ShortNumberInfo(MatcherApi matcherApi,
+ RegionMetadataSource shortNumberMetadataSource) {
this.matcherApi = matcherApi;
+ this.shortNumberMetadataSource = shortNumberMetadataSource;
// TODO: Create ShortNumberInfo for a given map
this.countryCallingCodeToRegionCodeMap =
CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap();
@@ -112,6 +119,21 @@ public class ShortNumberInfo {
}
/**
+ * A thin wrapper around {@code shortNumberMetadataSource} which catches {@link
+ * IllegalArgumentException} for invalid region code and instead returns {@code null}
+ */
+ private PhoneMetadata getShortNumberMetadataForRegion(String regionCode) {
+ if (regionCode == null) {
+ return null;
+ }
+ try {
+ return shortNumberMetadataSource.getMetadataForRegion(regionCode);
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+ }
+
+ /**
* Check whether a short number is a possible number when dialed from the given region. This
* provides a more lenient check than {@link #isValidShortNumberForRegion}.
*
@@ -123,8 +145,7 @@ public class ShortNumberInfo {
if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
return false;
}
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return false;
}
@@ -145,7 +166,7 @@ public class ShortNumberInfo {
List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
int shortNumberLength = getNationalSignificantNumber(number).length();
for (String region : regionCodes) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(region);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(region);
if (phoneMetadata == null) {
continue;
}
@@ -169,8 +190,7 @@ public class ShortNumberInfo {
if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
return false;
}
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return false;
}
@@ -231,8 +251,7 @@ public class ShortNumberInfo {
return ShortNumberCost.UNKNOWN_COST;
}
// Note that regionDialingFrom may be null, in which case phoneMetadata will also be null.
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(
- regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
return ShortNumberCost.UNKNOWN_COST;
}
@@ -329,7 +348,7 @@ public class ShortNumberInfo {
}
String nationalNumber = getNationalSignificantNumber(number);
for (String regionCode : regionCodes) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata != null
&& matchesPossibleNumberAndNationalNumber(nationalNumber, phoneMetadata.getShortCode())) {
// The number is valid for this region.
@@ -340,13 +359,6 @@ public class ShortNumberInfo {
}
/**
- * Convenience method to get a list of what regions the library has metadata for.
- */
- Set<String> getSupportedRegions() {
- return MetadataManager.getSupportedShortNumberRegions();
- }
-
- /**
* Gets a valid short number for the specified region.
*
* @param regionCode the region for which an example short number is needed
@@ -355,7 +367,7 @@ public class ShortNumberInfo {
*/
// @VisibleForTesting
String getExampleShortNumber(String regionCode) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata == null) {
return "";
}
@@ -376,7 +388,7 @@ public class ShortNumberInfo {
*/
// @VisibleForTesting
String getExampleShortNumberForCost(String regionCode, ShortNumberCost cost) {
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
if (phoneMetadata == null) {
return "";
}
@@ -444,7 +456,7 @@ public class ShortNumberInfo {
// add additional logic here to handle it.
return false;
}
- PhoneMetadata metadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata metadata = getShortNumberMetadataForRegion(regionCode);
if (metadata == null || !metadata.hasEmergency()) {
return false;
}
@@ -471,7 +483,7 @@ public class ShortNumberInfo {
List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
String regionCode = getRegionCodeForShortNumberFromRegionList(number, regionCodes);
String nationalNumber = getNationalSignificantNumber(number);
- PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionCode);
return (phoneMetadata != null)
&& (matchesPossibleNumberAndNationalNumber(nationalNumber,
phoneMetadata.getCarrierSpecific()));
@@ -495,8 +507,7 @@ public class ShortNumberInfo {
return false;
}
String nationalNumber = getNationalSignificantNumber(number);
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
return (phoneMetadata != null)
&& (matchesPossibleNumberAndNationalNumber(nationalNumber,
phoneMetadata.getCarrierSpecific()));
@@ -519,8 +530,7 @@ public class ShortNumberInfo {
if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
return false;
}
- PhoneMetadata phoneMetadata =
- MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
+ PhoneMetadata phoneMetadata = getShortNumberMetadataForRegion(regionDialingFrom);
return phoneMetadata != null
&& matchesPossibleNumberAndNationalNumber(getNationalSignificantNumber(number),
phoneMetadata.getSmsServices());
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
index 12f1745c..227881cb 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/ShortNumbersRegionCodeSet.java
@@ -29,7 +29,7 @@ import java.util.Set;
*/
public class ShortNumbersRegionCodeSet {
// A set of all region codes for which data is available.
- static Set<String> getRegionCodeSet() {
+ public static Set<String> getRegionCodeSet() {
// The capacity is set to 321 as there are 241 different entries,
// and this offers a load factor of roughly 0.75.
Set<String> regionCodeSet = new HashSet<String>(321);
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/SingleFileMetadataSourceImpl.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/SingleFileMetadataSourceImpl.java
deleted file mode 100644
index 8b15cbb8..00000000
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/SingleFileMetadataSourceImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* GENERATED SOURCE. DO NOT MODIFY. */
-/*
- * Copyright (C) 2015 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;
-
-import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Implementation of {@link MetadataSource} that reads from a single resource file.
- */
-final class SingleFileMetadataSourceImpl implements MetadataSource {
- // The name of the binary file containing phone number metadata for different regions.
- // This enables us to set up with different metadata, such as for testing.
- private final String phoneNumberMetadataFileName;
-
- // The {@link MetadataLoader} used to inject alternative metadata sources.
- private final MetadataLoader metadataLoader;
-
- private final AtomicReference<MetadataManager.SingleFileMetadataMaps> phoneNumberMetadataRef =
- new AtomicReference<MetadataManager.SingleFileMetadataMaps>();
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- // @VisibleForTesting
- SingleFileMetadataSourceImpl(String phoneNumberMetadataFileName, MetadataLoader metadataLoader) {
- this.phoneNumberMetadataFileName = phoneNumberMetadataFileName;
- this.metadataLoader = metadataLoader;
- }
-
- // It is assumed that metadataLoader is not null. Checks should happen before passing it in here.
- SingleFileMetadataSourceImpl(MetadataLoader metadataLoader) {
- this(MetadataManager.SINGLE_FILE_PHONE_NUMBER_METADATA_FILE_NAME, metadataLoader);
- }
-
- @Override
- public PhoneMetadata getMetadataForRegion(String regionCode) {
- return MetadataManager.getSingleFileMetadataMaps(phoneNumberMetadataRef,
- phoneNumberMetadataFileName, metadataLoader).get(regionCode);
- }
-
- @Override
- public PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
- // A country calling code is non-geographical if it only maps to the non-geographical region
- // code, i.e. "001". If this is not true of the given country calling code, then we will return
- // null here. If not for the atomic reference, such as if we were loading in multiple stages, we
- // would check that the passed in country calling code was indeed non-geographical to avoid
- // loading costs for a null result. Here though we do not check this since the entire data must
- // be loaded anyway if any of it is needed at some point in the life cycle of this class.
- return MetadataManager.getSingleFileMetadataMaps(phoneNumberMetadataRef,
- phoneNumberMetadataFileName, metadataLoader).get(countryCallingCode);
- }
-}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375 b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375
deleted file mode 100644
index b7d8cacd..00000000
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375
+++ /dev/null
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380 b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380
index 874e5e13..f01473b5 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49 b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49
index d169d31e..fdb9f55c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63 b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63
deleted file mode 100644
index e6f03ad1..00000000
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63
+++ /dev/null
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
index 6806a009..f4091758 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_800
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
index dfe50786..600f043a 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
index 6ba5be41..50c61861 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
index 894d4fab..09ca4ed5 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index 41c00923..dd6e97b0 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
index 29424fbe..8fd93bf2 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
index a54f4ca3..c9dc3115 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
index 339334bf..51ce25ba 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
index 01bb8dac..d3feed89 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index dc01444b..2bcb8e83 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
index bb43464a..09d12540 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
index efa9b058..4a01f606 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
index ed648e4b..6a1c9818 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
index 6ccdd69a..73e27753 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
index e1cab68c..ca363123 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index 5e981c85..b9ee37d2 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
index ddebc8f7..6bc75af5 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
index 283e679d..5fc149d4 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index 3f7fcbbc..95fc994a 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index 492f70af..b2942a98 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
index ebb5fb49..4be09b00 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
index 2b89782e..4075371b 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
index 5a7271eb..245f2c6c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
index cdfd1f86..fbe8f680 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
index 43163312..c91bbb61 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
index 33d742f9..bbc37a6f 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
index c7ee185a..9fea3ab0 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
index d52abcfc..80847ce0 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
index b11e9fda..12d9f4a7 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
index e11e957c..5538023d 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
index 009e48ab..eb003a64 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
index 8a056eb2..f6d9e149 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
index e1da75ca..c765fb03 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
index 296fcf9d..45e6bc8f 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
index d0da8506..2633c4ad 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
index f6a759c8..5ccbef1a 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
index 7d938623..7b464ce8 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
index 00752953..883376c4 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
index 11de05ac..a38c7113 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
index 993af32f..2a4a84c8 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
index 8a720626..43229559 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
index c75dce67..857459b8 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
index 0cea04e8..d7001a5f 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
index bd6d7e51..0393a859 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
index fa01bc2c..ca4265cc 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
index 97585357..3ac3c9de 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
index ec6030f6..85766380 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index 7672fa34..eeff6fe0 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
index 0c9dd320..1bf09f59 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
index 4ba22785..da2f3cf0 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
index 85135ca2..36adc17f 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 47c2eec0..25cac90d 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
index a29c69d8..fc1542b9 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
index 7efdbaee..cabf18c5 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
index dbd636e5..c4e58998 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
index 5ab6a0d6..2723b92c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
index 41b92f5b..51eaccdc 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
index f8b5f35c..a53de1f6 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
index 51ff6a48..a51b808d 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
index cde7ce65..e7133bec 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
index 365bafd7..22fc4c93 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
index a885cb56..8c6a632c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
index 4622c358..9317fcae 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
index 21951ced..486c78a0 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
index 852c356a..4ee5e60c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
index 36dc1e39..6b02afaa 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
index 49e38ad9..05a1d226 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
index 6ec881ff..e1eddfda 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
index 45b707a5..db7408c2 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
index 81dd47e2..f68e5223 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
index 305b85e9..257a20e6 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
index 67735fad..204e12d5 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
index 15e4a2a7..53563095 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
index 857b6d9b..1ae59572 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
index dddb34ea..62d1a5d1 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
index fb9422cc..170d0d5c 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
index d3d777cf..eadddf85 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
index 0e2e60c2..9b044f61 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
index b0fd135b..4b330f71 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
index 1f1ce10f..b2d56078 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
index 23c56495..ce6cd976 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index ddbeb93b..ae0d173b 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
index 76b49f27..ed30c934 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
index d08e73c7..ee2e0579 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index f8859190..6fad5941 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
index 7cfd32e7..a94967ad 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index 057bc582..87aa6c65 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
index b340ff45..0e99feaa 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
index 0a8fd5af..d7470ecd 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
index cec9da09..728c7e64 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AT b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AT
index 1947aa2a..ecfe1344 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AT
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto_AT
Binary files differ
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/internal/GeoEntityUtility.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/internal/GeoEntityUtility.java
new file mode 100644
index 00000000..e4576344
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/internal/GeoEntityUtility.java
@@ -0,0 +1,58 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.CountryCodeToRegionCodeMap;
+import java.util.List;
+
+/**
+ * Utility class for checking whether identifiers region code and country calling code belong
+ * to geographical entities. For more information about geo vs. non-geo entities see {@link
+ * com.android.i18n.phonenumbers.metadata.source.RegionMetadataSource} and {@link
+ * com.android.i18n.phonenumbers.metadata.source.NonGeographicalEntityMetadataSource}
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class GeoEntityUtility {
+
+ /** Region code with a special meaning, used to mark non-geographical entities */
+ public static final String REGION_CODE_FOR_NON_GEO_ENTITIES = "001";
+
+ /** Determines whether {@code regionCode} belongs to a geographical entity. */
+ public static boolean isGeoEntity(String regionCode) {
+ return !regionCode.equals(REGION_CODE_FOR_NON_GEO_ENTITIES);
+ }
+
+ /**
+ * Determines whether {@code countryCallingCode} belongs to a geographical entity.
+ *
+ * <p>A single country calling code could map to several different regions. It is considered that
+ * {@code countryCallingCode} belongs to a geo entity if all of these regions are geo entities
+ *
+ * <p>Note that this method will not throw an exception even when the underlying mapping for the
+ * {@code countryCallingCode} does not exist, instead it will return {@code false}
+ */
+ public static boolean isGeoEntity(int countryCallingCode) {
+ List<String> regionCodesForCountryCallingCode =
+ CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap().get(countryCallingCode);
+
+ return regionCodesForCountryCallingCode != null
+ && !regionCodesForCountryCallingCode.contains(REGION_CODE_FOR_NON_GEO_ENTITIES);
+ }
+
+ private GeoEntityUtility() {}
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java
new file mode 100644
index 00000000..cca19b90
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/DefaultMetadataDependenciesProvider.java
@@ -0,0 +1,117 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata;
+
+import com.android.i18n.phonenumbers.MetadataLoader;
+import com.android.i18n.phonenumbers.metadata.init.ClassPathResourceMetadataLoader;
+import com.android.i18n.phonenumbers.metadata.init.MetadataParser;
+import com.android.i18n.phonenumbers.metadata.source.FormattingMetadataSource;
+import com.android.i18n.phonenumbers.metadata.source.FormattingMetadataSourceImpl;
+import com.android.i18n.phonenumbers.metadata.source.MetadataSource;
+import com.android.i18n.phonenumbers.metadata.source.MetadataSourceImpl;
+import com.android.i18n.phonenumbers.metadata.source.MultiFileModeFileNameProvider;
+import com.android.i18n.phonenumbers.metadata.source.PhoneMetadataFileNameProvider;
+import com.android.i18n.phonenumbers.metadata.source.RegionMetadataSource;
+import com.android.i18n.phonenumbers.metadata.source.RegionMetadataSourceImpl;
+
+/**
+ * Provides metadata init and source dependencies when metadata is stored in multi-file mode and
+ * loaded as a classpath resource.
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class DefaultMetadataDependenciesProvider {
+
+ private static final DefaultMetadataDependenciesProvider INSTANCE = new DefaultMetadataDependenciesProvider();
+
+ public static DefaultMetadataDependenciesProvider getInstance() {
+ return INSTANCE;
+ }
+
+ private DefaultMetadataDependenciesProvider() {
+ }
+
+ private final MetadataParser metadataParser = MetadataParser.newLenientParser();
+ private final MetadataLoader metadataLoader = new ClassPathResourceMetadataLoader();
+
+ private final PhoneMetadataFileNameProvider phoneNumberMetadataFileNameProvider =
+ new MultiFileModeFileNameProvider(
+ "/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto");
+ private final MetadataSource phoneNumberMetadataSource =
+ new MetadataSourceImpl(
+ phoneNumberMetadataFileNameProvider,
+ metadataLoader,
+ metadataParser);
+
+ private final PhoneMetadataFileNameProvider shortNumberMetadataFileNameProvider =
+ new MultiFileModeFileNameProvider(
+ "/com/android/i18n/phonenumbers/data/ShortNumberMetadataProto");
+ private final RegionMetadataSource shortNumberMetadataSource =
+ new RegionMetadataSourceImpl(
+ shortNumberMetadataFileNameProvider,
+ metadataLoader,
+ metadataParser);
+
+ private final PhoneMetadataFileNameProvider alternateFormatsMetadataFileNameProvider =
+ new MultiFileModeFileNameProvider(
+ "/com/android/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto");
+ private final FormattingMetadataSource alternateFormatsMetadataSource =
+ new FormattingMetadataSourceImpl(
+ alternateFormatsMetadataFileNameProvider,
+ metadataLoader,
+ metadataParser);
+
+ public MetadataParser getMetadataParser() {
+ return metadataParser;
+ }
+
+ public MetadataLoader getMetadataLoader() {
+ return metadataLoader;
+ }
+
+ public PhoneMetadataFileNameProvider getPhoneNumberMetadataFileNameProvider() {
+ return phoneNumberMetadataFileNameProvider;
+ }
+
+ public MetadataSource getPhoneNumberMetadataSource() {
+ return phoneNumberMetadataSource;
+ }
+
+ public PhoneMetadataFileNameProvider getShortNumberMetadataFileNameProvider() {
+ return shortNumberMetadataFileNameProvider;
+ }
+
+ public RegionMetadataSource getShortNumberMetadataSource() {
+ return shortNumberMetadataSource;
+ }
+
+ public PhoneMetadataFileNameProvider getAlternateFormatsMetadataFileNameProvider() {
+ return alternateFormatsMetadataFileNameProvider;
+ }
+
+ public FormattingMetadataSource getAlternateFormatsMetadataSource() {
+ return alternateFormatsMetadataSource;
+ }
+
+ public String getCarrierDataDirectory() {
+ return "/com/android/i18n/phonenumbers/carrier/data/";
+ }
+
+ public String getGeocodingDataDirectory() {
+ return "/com/android/i18n/phonenumbers/geocoding/data/";
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java
new file mode 100644
index 00000000..4a5d4738
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/ClassPathResourceMetadataLoader.java
@@ -0,0 +1,44 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.init;
+
+import com.android.i18n.phonenumbers.MetadataLoader;
+import java.io.InputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A {@link MetadataLoader} implementation that reads phone number metadata files as classpath
+ * resources.
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class ClassPathResourceMetadataLoader implements MetadataLoader {
+
+ private static final Logger logger =
+ Logger.getLogger(ClassPathResourceMetadataLoader.class.getName());
+
+ @Override
+ public InputStream loadMetadata(String metadataFileName) {
+ InputStream inputStream =
+ ClassPathResourceMetadataLoader.class.getResourceAsStream(metadataFileName);
+ if (inputStream == null) {
+ logger.log(Level.WARNING, String.format("File %s not found", metadataFileName));
+ }
+ return inputStream;
+ }
+} \ No newline at end of file
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/MetadataParser.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/MetadataParser.java
new file mode 100644
index 00000000..2f045232
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/init/MetadataParser.java
@@ -0,0 +1,110 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.init;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Exposes single method for parsing {@link InputStream} content into {@link Collection} of {@link
+ * PhoneMetadata}
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class MetadataParser {
+
+ private static final Logger logger = Logger.getLogger(MetadataParser.class.getName());
+
+ /**
+ * Creates new instance in lenient mode, see {@link MetadataParser#parse(InputStream)} for more
+ * info.
+ */
+ public static MetadataParser newLenientParser() {
+ return new MetadataParser(false);
+ }
+
+ /**
+ * Creates new instance in strict mode, see {@link MetadataParser#parse(InputStream)} for more
+ * info
+ */
+ public static MetadataParser newStrictParser() {
+ return new MetadataParser(true);
+ }
+
+ private final boolean strictMode;
+
+ private MetadataParser(boolean strictMode) {
+ this.strictMode = strictMode;
+ }
+
+ /**
+ * Parses given {@link InputStream} into a {@link Collection} of {@link PhoneMetadata}.
+ *
+ * @throws IllegalArgumentException if {@code source} is {@code null} and strict mode is on
+ * @return parsed {@link PhoneMetadata}, or empty {@link Collection} if {@code source} is {@code
+ * null} and lenient mode is on
+ */
+ public Collection<PhoneMetadata> parse(InputStream source) {
+ if (source == null) {
+ return handleNullSource();
+ }
+ ObjectInputStream ois = null;
+ try {
+ ois = new ObjectInputStream(source);
+ PhoneMetadataCollection phoneMetadataCollection = new PhoneMetadataCollection();
+ phoneMetadataCollection.readExternal(ois);
+ List<PhoneMetadata> phoneMetadata = phoneMetadataCollection.getMetadataList();
+ // Sanity check; this should not happen if provided InputStream is valid
+ if (phoneMetadata.isEmpty()) {
+ throw new IllegalStateException("Empty metadata");
+ }
+ return phoneMetadataCollection.getMetadataList();
+ } catch (IOException e) {
+ throw new IllegalStateException("Unable to parse metadata file", e);
+ } finally {
+ if (ois != null) {
+ // This will close all underlying streams as well, including source.
+ close(ois);
+ } else {
+ close(source);
+ }
+ }
+ }
+
+ private List<PhoneMetadata> handleNullSource() {
+ if (strictMode) {
+ throw new IllegalArgumentException("Source cannot be null");
+ }
+ return Collections.emptyList();
+ }
+
+ private void close(InputStream inputStream) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ logger.log(Level.WARNING, "Error closing input stream (ignored)", e);
+ }
+ }
+} \ No newline at end of file
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java
new file mode 100644
index 00000000..ddb2fb9f
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java
@@ -0,0 +1,79 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.MetadataLoader;
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.metadata.init.MetadataParser;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * A blocking implementation of {@link MetadataBootstrappingGuard}. Can be used for both single-file
+ * (bulk) and multi-file metadata
+ *
+ * @param <T> needs to extend {@link MetadataContainer}
+ */
+final class BlockingMetadataBootstrappingGuard<T extends MetadataContainer>
+ implements MetadataBootstrappingGuard<T> {
+
+ private final MetadataLoader metadataLoader;
+ private final MetadataParser metadataParser;
+ private final T metadataContainer;
+ private final Map<String, String> loadedFiles; // identity map
+
+ BlockingMetadataBootstrappingGuard(
+ MetadataLoader metadataLoader, MetadataParser metadataParser, T metadataContainer) {
+ this.metadataLoader = metadataLoader;
+ this.metadataParser = metadataParser;
+ this.metadataContainer = metadataContainer;
+ this.loadedFiles = new ConcurrentHashMap<>();
+ }
+
+ @Override
+ public T getOrBootstrap(String phoneMetadataFile) {
+ if (!loadedFiles.containsKey(phoneMetadataFile)) {
+ bootstrapMetadata(phoneMetadataFile);
+ }
+ return metadataContainer;
+ }
+
+ private synchronized void bootstrapMetadata(String phoneMetadataFile) {
+ // Additional check is needed because multiple threads could pass the first check when calling
+ // getOrBootstrap() at the same time for unloaded metadata file
+ if (loadedFiles.containsKey(phoneMetadataFile)) {
+ return;
+ }
+ Collection<PhoneMetadata> phoneMetadata = read(phoneMetadataFile);
+ for (PhoneMetadata metadata : phoneMetadata) {
+ metadataContainer.accept(metadata);
+ }
+ loadedFiles.put(phoneMetadataFile, phoneMetadataFile);
+ }
+
+ private Collection<PhoneMetadata> read(String phoneMetadataFile) {
+ try {
+ InputStream metadataStream = metadataLoader.loadMetadata(phoneMetadataFile);
+ return metadataParser.parse(metadataStream);
+ } catch (IllegalArgumentException | IllegalStateException e) {
+ throw new IllegalStateException("Failed to read file " + phoneMetadataFile, e);
+ }
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java
new file mode 100644
index 00000000..93d52a18
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/CompositeMetadataContainer.java
@@ -0,0 +1,70 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.internal.GeoEntityUtility;
+
+/**
+ * Implementation of {@link MetadataContainer} which is a composition of different {@link
+ * MapBackedMetadataContainer}s. It adds items to a single simpler container at a time depending on
+ * the content of {@link PhoneMetadata}.
+ */
+final class CompositeMetadataContainer implements MetadataContainer {
+
+ private final MapBackedMetadataContainer<Integer> metadataByCountryCode =
+ MapBackedMetadataContainer.byCountryCallingCode();
+ private final MapBackedMetadataContainer<String> metadataByRegionCode =
+ MapBackedMetadataContainer.byRegionCode();
+
+ /**
+ * Intended to be called for geographical regions only. For non-geographical entities, use {@link
+ * CompositeMetadataContainer#getMetadataBy(int)}
+ */
+ PhoneMetadata getMetadataBy(String regionCode) {
+ return metadataByRegionCode.getMetadataBy(regionCode);
+ }
+
+ /**
+ * Intended to be called for non-geographical entities only, such as 800 (country code assigned to
+ * the Universal International Freephone Service). For geographical regions, use {@link
+ * CompositeMetadataContainer#getMetadataBy(String)}
+ */
+ PhoneMetadata getMetadataBy(int countryCallingCode) {
+ return metadataByCountryCode.getMetadataBy(countryCallingCode);
+ }
+
+ /**
+ * If the metadata belongs to a specific geographical region (it has a region code other than
+ * {@link GeoEntityUtility#REGION_CODE_FOR_NON_GEO_ENTITIES}), it will be added to a {@link
+ * MapBackedMetadataContainer} which stores metadata by region code. Otherwise, it will be added
+ * to a {@link MapBackedMetadataContainer} which stores metadata by country calling code. This
+ * means that {@link CompositeMetadataContainer#getMetadataBy(int)} will not work for country
+ * calling codes such as 41 (country calling code for Switzerland), only for country calling codes
+ * such as 800 (country code assigned to the Universal International Freephone Service)
+ */
+ @Override
+ public void accept(PhoneMetadata phoneMetadata) {
+ String regionCode = metadataByRegionCode.getKeyProvider().getKeyOf(phoneMetadata);
+ if (GeoEntityUtility.isGeoEntity(regionCode)) {
+ metadataByRegionCode.accept(phoneMetadata);
+ } else {
+ metadataByCountryCode.accept(phoneMetadata);
+ }
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java
new file mode 100644
index 00000000..0638eb7a
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSource.java
@@ -0,0 +1,39 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+
+/** A source of formatting phone metadata.
+ * @hide This class is not part of the Android public SDK API*/
+public interface FormattingMetadataSource {
+
+ /**
+ * Returns formatting phone metadata for provided country calling code.
+ *
+ * <p>This method is similar to the one in {@link
+ * NonGeographicalEntityMetadataSource#getMetadataForNonGeographicalRegion(int)}, except that it
+ * will not fail for geographical regions, it can be used for both geo- and non-geo entities.
+ *
+ * <p>In case the provided {@code countryCallingCode} maps to several different regions, only one
+ * would contain formatting metadata.
+ *
+ * @return the phone metadata for provided {@code countryCallingCode}, or null if there is none.
+ */
+ PhoneMetadata getFormattingMetadataForCountryCallingCode(int countryCallingCode);
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java
new file mode 100644
index 00000000..b2c806be
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/FormattingMetadataSourceImpl.java
@@ -0,0 +1,59 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.MetadataLoader;
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.metadata.init.MetadataParser;
+
+/**
+ * Implementation of {@link FormattingMetadataSource} guarded by {@link MetadataBootstrappingGuard}
+ *
+ * <p>By default, a {@link BlockingMetadataBootstrappingGuard} will be used, but any custom
+ * implementation can be injected.
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class FormattingMetadataSourceImpl implements FormattingMetadataSource {
+
+ private final PhoneMetadataFileNameProvider phoneMetadataFileNameProvider;
+ private final MetadataBootstrappingGuard<MapBackedMetadataContainer<Integer>> bootstrappingGuard;
+
+ public FormattingMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataBootstrappingGuard<MapBackedMetadataContainer<Integer>> bootstrappingGuard) {
+ this.phoneMetadataFileNameProvider = phoneMetadataFileNameProvider;
+ this.bootstrappingGuard = bootstrappingGuard;
+ }
+
+ public FormattingMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataLoader metadataLoader,
+ MetadataParser metadataParser) {
+ this(
+ phoneMetadataFileNameProvider,
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, metadataParser, MapBackedMetadataContainer.byCountryCallingCode()));
+ }
+
+ @Override
+ public PhoneMetadata getFormattingMetadataForCountryCallingCode(int countryCallingCode) {
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(countryCallingCode))
+ .getMetadataBy(countryCallingCode);
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java
new file mode 100644
index 00000000..5183984f
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MapBackedMetadataContainer.java
@@ -0,0 +1,75 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * A {@link MetadataContainer} implementation backed by a {@link ConcurrentHashMap} with generic
+ * keys.
+ */
+final class MapBackedMetadataContainer<T> implements MetadataContainer {
+
+ static MapBackedMetadataContainer<String> byRegionCode() {
+ return new MapBackedMetadataContainer<>(
+ new KeyProvider<String>() {
+ @Override
+ public String getKeyOf(PhoneMetadata phoneMetadata) {
+ return phoneMetadata.getId();
+ }
+ });
+ }
+
+ static MapBackedMetadataContainer<Integer> byCountryCallingCode() {
+ return new MapBackedMetadataContainer<>(
+ new KeyProvider<Integer>() {
+ @Override
+ public Integer getKeyOf(PhoneMetadata phoneMetadata) {
+ return phoneMetadata.getCountryCode();
+ }
+ });
+ }
+
+ private final ConcurrentMap<T, PhoneMetadata> metadataMap;
+
+ private final KeyProvider<T> keyProvider;
+
+ private MapBackedMetadataContainer(KeyProvider<T> keyProvider) {
+ this.metadataMap = new ConcurrentHashMap<>();
+ this.keyProvider = keyProvider;
+ }
+
+ PhoneMetadata getMetadataBy(T key) {
+ return key != null ? metadataMap.get(key) : null;
+ }
+
+ KeyProvider<T> getKeyProvider() {
+ return keyProvider;
+ }
+
+ @Override
+ public void accept(PhoneMetadata phoneMetadata) {
+ metadataMap.put(keyProvider.getKeyOf(phoneMetadata), phoneMetadata);
+ }
+
+ interface KeyProvider<T> {
+ T getKeyOf(PhoneMetadata phoneMetadata);
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java
new file mode 100644
index 00000000..770bfb3b
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataBootstrappingGuard.java
@@ -0,0 +1,37 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+/**
+ * Guard that ensures that metadata bootstrapping process (loading and parsing) is triggered only
+ * once per metadata file.
+ *
+ * @param <T> needs to extend {@link MetadataContainer}
+ * @hide This class is not part of the Android public SDK API
+ */
+public interface MetadataBootstrappingGuard<T extends MetadataContainer> {
+
+ /**
+ * If metadata from the provided file has not yet been read, invokes loading and parsing from the
+ * provided file and adds the result to guarded {@link MetadataContainer}.
+ *
+ * @param phoneMetadataFile to read from
+ * @return guarded {@link MetadataContainer}
+ */
+ T getOrBootstrap(String phoneMetadataFile);
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataSource.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataContainer.java
index 0e338a89..e5aacd7e 100644
--- a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/MetadataSource.java
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataContainer.java
@@ -1,6 +1,6 @@
/* GENERATED SOURCE. DO NOT MODIFY. */
/*
- * Copyright (C) 2015 The Libphonenumber Authors
+ * Copyright (C) 2022 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.
@@ -15,26 +15,19 @@
* limitations under the License.
*/
-package com.android.i18n.phonenumbers;
+package com.android.i18n.phonenumbers.metadata.source;
import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
/**
- * A source for phone metadata for all regions.
+ * A container for {@link PhoneMetadata}
*/
-interface MetadataSource {
+interface MetadataContainer {
/**
- * Gets phone metadata for a region.
- * @param regionCode the region code.
- * @return the phone metadata for that region, or null if there is none.
+ * Adds {@link PhoneMetadata} to the container. It depends on the implementation of the interface
+ * what this means, for example {@link MapBackedMetadataContainer} simply adds the provided
+ * metadata into the backing map. Implementing classes should ensure thread-safety.
*/
- PhoneMetadata getMetadataForRegion(String regionCode);
-
- /**
- * Gets phone metadata for a non-geographical region.
- * @param countryCallingCode the country calling code.
- * @return the phone metadata for that region, or null if there is none.
- */
- PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode);
+ void accept(PhoneMetadata phoneMetadata);
}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSource.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSource.java
new file mode 100644
index 00000000..cd377d84
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSource.java
@@ -0,0 +1,23 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+/** A source of phone metadata split by different regions.
+ * @hide This class is not part of the Android public SDK API*/
+public interface MetadataSource extends RegionMetadataSource, NonGeographicalEntityMetadataSource {
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java
new file mode 100644
index 00000000..e2b97b0b
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MetadataSourceImpl.java
@@ -0,0 +1,74 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.MetadataLoader;
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.internal.GeoEntityUtility;
+import com.android.i18n.phonenumbers.metadata.init.MetadataParser;
+
+/**
+ * Implementation of {@link MetadataSource} guarded by {@link MetadataBootstrappingGuard}.
+ *
+ * <p>By default, a {@link BlockingMetadataBootstrappingGuard} will be used, but any custom
+ * implementation can be injected.
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class MetadataSourceImpl implements MetadataSource {
+
+ private final PhoneMetadataFileNameProvider phoneMetadataFileNameProvider;
+ private final MetadataBootstrappingGuard<CompositeMetadataContainer> bootstrappingGuard;
+
+ public MetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataBootstrappingGuard<CompositeMetadataContainer> bootstrappingGuard) {
+ this.phoneMetadataFileNameProvider = phoneMetadataFileNameProvider;
+ this.bootstrappingGuard = bootstrappingGuard;
+ }
+
+ public MetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataLoader metadataLoader,
+ MetadataParser metadataParser) {
+ this(
+ phoneMetadataFileNameProvider,
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, metadataParser, new CompositeMetadataContainer()));
+ }
+
+ @Override
+ public PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode) {
+ if (GeoEntityUtility.isGeoEntity(countryCallingCode)) {
+ throw new IllegalArgumentException(
+ countryCallingCode + " calling code belongs to a geo entity");
+ }
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(countryCallingCode))
+ .getMetadataBy(countryCallingCode);
+ }
+
+ @Override
+ public PhoneMetadata getMetadataForRegion(String regionCode) {
+ if (!GeoEntityUtility.isGeoEntity(regionCode)) {
+ throw new IllegalArgumentException(regionCode + " region code is a non-geo entity");
+ }
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(regionCode))
+ .getMetadataBy(regionCode);
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java
new file mode 100644
index 00000000..b8ee7c91
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/MultiFileModeFileNameProvider.java
@@ -0,0 +1,44 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import java.util.regex.Pattern;
+
+/**
+ * {@link PhoneMetadataFileNameProvider} implementation which appends key as a suffix to the
+ * predefined metadata file name base.
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class MultiFileModeFileNameProvider implements PhoneMetadataFileNameProvider {
+
+ private final String phoneMetadataFileNamePrefix;
+ private static final Pattern ALPHANUMERIC = Pattern.compile("^[\\p{L}\\p{N}]+$");
+
+ public MultiFileModeFileNameProvider(String phoneMetadataFileNameBase) {
+ this.phoneMetadataFileNamePrefix = phoneMetadataFileNameBase + "_";
+ }
+
+ @Override
+ public String getFor(Object key) {
+ String keyAsString = key.toString();
+ if (!ALPHANUMERIC.matcher(keyAsString).matches()) {
+ throw new IllegalArgumentException("Invalid key: " + keyAsString);
+ }
+ return phoneMetadataFileNamePrefix + key;
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java
new file mode 100644
index 00000000..a7dbbef1
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/NonGeographicalEntityMetadataSource.java
@@ -0,0 +1,49 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+
+/**
+ * A source of phone metadata for non-geographical entities.
+ *
+ * <p>Non-geographical entities are phone number ranges that have a country calling code, but either
+ * do not belong to an actual country (some international services), or belong to a region which has
+ * a different country calling code from the country it is part of. Examples of such ranges are
+ * those starting with:
+ *
+ * <ul>
+ * <li>800 - country code assigned to the Universal International Freephone Service
+ * <li>808 - country code assigned to the International Shared Cost Service
+ * <li>870 - country code assigned to the Pitcairn Islands
+ * <li>...
+ * </ul>
+ * @hide This class is not part of the Android public SDK API
+ */
+public interface NonGeographicalEntityMetadataSource {
+
+ /**
+ * Gets phone metadata for a non-geographical entity.
+ *
+ * @param countryCallingCode the country calling code.
+ * @return the phone metadata for that entity, or null if there is none.
+ * @throws IllegalArgumentException if provided {@code countryCallingCode} does not belong to a
+ * non-geographical entity
+ */
+ PhoneMetadata getMetadataForNonGeographicalRegion(int countryCallingCode);
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java
new file mode 100644
index 00000000..55e0849d
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/PhoneMetadataFileNameProvider.java
@@ -0,0 +1,38 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+/**
+ * Abstraction responsible for inferring the metadata file name.
+ *
+ * <p>Two implementations are available:
+ *
+ * <ul>
+ * <li>{@link SingleFileModeFileNameProvider} for single-file metadata.
+ * <li>{@link MultiFileModeFileNameProvider} for multi-file metadata.
+ * </ul>
+ * @hide This class is not part of the Android public SDK API
+ */
+public interface PhoneMetadataFileNameProvider {
+
+ /**
+ * Returns phone metadata file path for the given key. Assumes that key.toString() is
+ * well-defined.
+ */
+ String getFor(Object key);
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSource.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSource.java
new file mode 100644
index 00000000..bc80dea3
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSource.java
@@ -0,0 +1,42 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.internal.GeoEntityUtility;
+
+/**
+ * A source of phone metadata split by geographical regions.
+ * @hide This class is not part of the Android public SDK API
+ */
+public interface RegionMetadataSource {
+
+ /**
+ * Returns phone metadata for provided geographical region.
+ *
+ * <p>The {@code regionCode} must be different from {@link
+ * GeoEntityUtility#REGION_CODE_FOR_NON_GEO_ENTITIES}, which has a special meaning and is used to
+ * mark non-geographical regions (see {@link NonGeographicalEntityMetadataSource} for more
+ * information).
+ *
+ * @return the phone metadata for provided {@code regionCode}, or null if there is none.
+ * @throws IllegalArgumentException if provided {@code regionCode} is {@link
+ * GeoEntityUtility#REGION_CODE_FOR_NON_GEO_ENTITIES}
+ */
+ PhoneMetadata getMetadataForRegion(String regionCode);
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java
new file mode 100644
index 00000000..95f009fb
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/RegionMetadataSourceImpl.java
@@ -0,0 +1,64 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+import com.android.i18n.phonenumbers.MetadataLoader;
+import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.android.i18n.phonenumbers.internal.GeoEntityUtility;
+import com.android.i18n.phonenumbers.metadata.init.MetadataParser;
+
+/**
+ * Implementation of {@link RegionMetadataSource} guarded by {@link MetadataBootstrappingGuard}
+ *
+ * <p>By default, a {@link BlockingMetadataBootstrappingGuard} will be used, but any custom
+ * implementation can be injected.
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class RegionMetadataSourceImpl implements RegionMetadataSource {
+
+ private final PhoneMetadataFileNameProvider phoneMetadataFileNameProvider;
+ private final MetadataBootstrappingGuard<MapBackedMetadataContainer<String>>
+ bootstrappingGuard;
+
+ public RegionMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataBootstrappingGuard<MapBackedMetadataContainer<String>> bootstrappingGuard) {
+ this.phoneMetadataFileNameProvider = phoneMetadataFileNameProvider;
+ this.bootstrappingGuard = bootstrappingGuard;
+ }
+
+ public RegionMetadataSourceImpl(
+ PhoneMetadataFileNameProvider phoneMetadataFileNameProvider,
+ MetadataLoader metadataLoader,
+ MetadataParser metadataParser) {
+ this(
+ phoneMetadataFileNameProvider,
+ new BlockingMetadataBootstrappingGuard<>(
+ metadataLoader, metadataParser, MapBackedMetadataContainer.byRegionCode()));
+ }
+
+ @Override
+ public PhoneMetadata getMetadataForRegion(String regionCode) {
+ if (!GeoEntityUtility.isGeoEntity(regionCode)) {
+ throw new IllegalArgumentException(regionCode + " region code is a non-geo entity");
+ }
+ return bootstrappingGuard
+ .getOrBootstrap(phoneMetadataFileNameProvider.getFor(regionCode))
+ .getMetadataBy(regionCode);
+ }
+}
diff --git a/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java
new file mode 100644
index 00000000..52566dc7
--- /dev/null
+++ b/repackaged/libphonenumber/src/com/android/i18n/phonenumbers/metadata/source/SingleFileModeFileNameProvider.java
@@ -0,0 +1,37 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+/*
+ * Copyright (C) 2022 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.metadata.source;
+
+/**
+ * {@link PhoneMetadataFileNameProvider} implementation that returns the same metadata file name for
+ * each key
+ * @hide This class is not part of the Android public SDK API
+ */
+public final class SingleFileModeFileNameProvider implements PhoneMetadataFileNameProvider {
+
+ private final String phoneMetadataFileName;
+
+ public SingleFileModeFileNameProvider(String phoneMetadataFileName) {
+ this.phoneMetadataFileName = phoneMetadataFileName;
+ }
+
+ @Override
+ public String getFor(Object key) {
+ return phoneMetadataFileName;
+ }
+}