intl-tel-input 18.2.1 → 18.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -10
- package/build/css/intlTelInput.css +3 -3
- package/build/css/intlTelInput.min.css +1 -1
- package/build/js/data.js +2 -2
- package/build/js/data.min.js +2 -2
- package/build/js/intlTelInput-jquery.js +12 -13
- package/build/js/intlTelInput-jquery.min.js +3 -3
- package/build/js/intlTelInput.js +12 -13
- package/build/js/intlTelInput.min.js +3 -3
- package/build/js/utils.js +147 -147
- package/composer.json +1 -1
- package/demo.html +1 -0
- package/grunt/replace.js +0 -3
- package/package.json +1 -1
- package/spec.html +2 -0
- package/src/css/intlTelInput.scss +2 -2
- package/src/js/data.js +1 -7
- package/src/js/intlTelInput.js +13 -15
- package/src/spec/helpers/helpers.js +1 -1
- package/src/spec/tests/options/useFullscreenPopup.js +45 -0
- package/third_party/libphonenumber/.github/dependabot.yml +16 -16
- package/third_party/libphonenumber/.github/workflows/codeql.yml +4 -4
- package/third_party/libphonenumber/.github/workflows/dependency-review.yml +2 -2
- package/third_party/libphonenumber/.github/workflows/scorecards.yml +2 -2
- package/third_party/libphonenumber/.github/workflows/unit-test.yml +3 -3
- package/third_party/libphonenumber/FAQ.md +0 -6
- package/third_party/libphonenumber/README.md +10 -2
- package/third_party/libphonenumber/cpp/CMakeLists.txt +1 -7
- package/third_party/libphonenumber/cpp/src/phonenumbers/alternate_format.cc +15 -15
- package/third_party/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +12079 -12165
- package/third_party/libphonenumber/cpp/src/phonenumbers/metadata.cc +13707 -13791
- package/third_party/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +2394 -2389
- package/third_party/libphonenumber/java/build.xml +10 -1
- package/third_party/libphonenumber/java/carrier/pom.xml +6 -6
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/216_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/221_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/228_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/229_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/230_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/250_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/262_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/30_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/371_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/389_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/39_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/40_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/423_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/43_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/45_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/46_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/49_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/502_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/503_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/51_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/53_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/592_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/61_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/64_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/683_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/81_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/82_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/82_ko +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/84_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh_Hant +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/853_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_zh +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/90_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/92_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/966_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/973_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en +0 -0
- package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/998_en +0 -0
- package/third_party/libphonenumber/java/demo/pom.xml +9 -9
- package/third_party/libphonenumber/java/demoapp/README.md +51 -0
- package/third_party/libphonenumber/java/demoapp/app/build.gradle +45 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/AndroidManifest.xml +39 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/MyApplication.java +16 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/contacts/ContactsPermissionManagement.java +161 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/contacts/ContactsRead.java +62 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/contacts/ContactsWrite.java +59 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/main/CountryDropdown.java +203 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/main/MainActivity.java +226 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberFormatting.java +74 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberInApp.java +96 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/FormattableFragment.java +161 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/FormattableRvAdapter.java +157 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/NotFormattableFragment.java +119 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/NotFormattableRvAdapter.java +94 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/ResultActivity.java +102 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/ResultVpAdapter.java +72 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/drawable/ic_launcher_background.xml +32 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/drawable/ic_launcher_foreground.xml +16 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/drawable/ic_outline_home_30.xml +10 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/activity_main.xml +83 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/activity_result.xml +26 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/country_dropdown.xml +24 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/country_dropdown_item.xml +9 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/formattable_list_item.xml +66 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/fragment_formattable.xml +30 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/fragment_not_formattable.xml +64 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/not_formattable_list_item.xml +57 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/values/dimens.xml +9 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/values/strings.xml +48 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/values/themes.xml +4 -0
- package/third_party/libphonenumber/java/demoapp/app/src/main/res/values-night/themes.xml +4 -0
- package/third_party/libphonenumber/java/demoapp/app/src/test/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberFormattingTest.java +103 -0
- package/third_party/libphonenumber/java/demoapp/app/src/test/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberInAppTest.java +70 -0
- package/third_party/libphonenumber/java/demoapp/build.gradle +5 -0
- package/third_party/libphonenumber/java/demoapp/gradle.properties +21 -0
- package/third_party/libphonenumber/java/demoapp/settings.gradle +16 -0
- package/third_party/libphonenumber/java/geocoder/pom.xml +6 -6
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1227_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1329_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1369_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1730_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1983_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/267_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/299_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/53_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/598_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/975_en +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config +0 -0
- package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data +0 -0
- package/third_party/libphonenumber/java/internal/prefixmapper/pom.xml +5 -5
- package/third_party/libphonenumber/java/libphonenumber/pom.xml +4 -4
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_84 +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL +0 -0
- package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP +0 -0
- package/third_party/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java +4 -3
- package/third_party/libphonenumber/java/pom.xml +13 -13
- package/third_party/libphonenumber/java/script/download-junit-jars.sh +26 -0
- package/third_party/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +217 -218
- package/third_party/libphonenumber/javascript/i18n/phonenumbers/metadata.js +160 -161
- package/third_party/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +160 -161
- package/third_party/libphonenumber/javascript/i18n/phonenumbers/shortnumbermetadata.js +8 -6
- package/third_party/libphonenumber/metadata/metadata.zip +0 -0
- package/third_party/libphonenumber/metadata/pom.xml +7 -7
- package/third_party/libphonenumber/metadata/src/main/java/com/google/i18n/phonenumbers/metadata/model/NumberingScheme.java +10 -3
- package/third_party/libphonenumber/migrator/migrator-servlet/pom.xml +5 -5
- package/third_party/libphonenumber/migrator/pom.xml +4 -4
- package/third_party/libphonenumber/release_notes.txt +93 -0
- package/third_party/libphonenumber/resources/PhoneNumberAlternateFormats.xml +1 -1
- package/third_party/libphonenumber/resources/PhoneNumberMetadata.xml +532 -620
- package/third_party/libphonenumber/resources/ShortNumberMetadata.xml +16 -4
- package/third_party/libphonenumber/resources/carrier/en/212.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/216.txt +2 -6
- package/third_party/libphonenumber/resources/carrier/en/221.txt +1 -1
- package/third_party/libphonenumber/resources/carrier/en/228.txt +6 -6
- package/third_party/libphonenumber/resources/carrier/en/229.txt +5 -4
- package/third_party/libphonenumber/resources/carrier/en/230.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/237.txt +6 -1
- package/third_party/libphonenumber/resources/carrier/en/250.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/262.txt +36 -38
- package/third_party/libphonenumber/resources/carrier/en/30.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/371.txt +5 -0
- package/third_party/libphonenumber/resources/carrier/en/385.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/389.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/39.txt +3 -0
- package/third_party/libphonenumber/resources/carrier/en/40.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/41.txt +15 -3
- package/third_party/libphonenumber/resources/carrier/en/423.txt +2 -0
- package/third_party/libphonenumber/resources/carrier/en/43.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/45.txt +9 -8
- package/third_party/libphonenumber/resources/carrier/en/46.txt +12 -14
- package/third_party/libphonenumber/resources/carrier/en/47.txt +0 -2
- package/third_party/libphonenumber/resources/carrier/en/49.txt +1 -1
- package/third_party/libphonenumber/resources/carrier/en/502.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/503.txt +21 -2
- package/third_party/libphonenumber/resources/carrier/en/51.txt +2 -0
- package/third_party/libphonenumber/resources/carrier/en/53.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/56.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/57.txt +5 -0
- package/third_party/libphonenumber/resources/carrier/en/592.txt +21 -7
- package/third_party/libphonenumber/resources/carrier/en/60.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/61.txt +4 -0
- package/third_party/libphonenumber/resources/carrier/en/64.txt +8 -0
- package/third_party/libphonenumber/resources/carrier/en/65.txt +8 -1
- package/third_party/libphonenumber/resources/carrier/en/683.txt +2 -0
- package/third_party/libphonenumber/resources/carrier/en/81.txt +14 -8
- package/third_party/libphonenumber/resources/carrier/en/82.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/84.txt +2 -0
- package/third_party/libphonenumber/resources/carrier/en/852.txt +49 -35
- package/third_party/libphonenumber/resources/carrier/en/853.txt +5 -0
- package/third_party/libphonenumber/resources/carrier/en/86.txt +1 -1
- package/third_party/libphonenumber/resources/carrier/en/90.txt +2 -1
- package/third_party/libphonenumber/resources/carrier/en/92.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/966.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/972.txt +3 -2
- package/third_party/libphonenumber/resources/carrier/en/973.txt +3 -0
- package/third_party/libphonenumber/resources/carrier/en/992.txt +19 -5
- package/third_party/libphonenumber/resources/carrier/en/995.txt +1 -6
- package/third_party/libphonenumber/resources/carrier/en/996.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/en/998.txt +1 -11
- package/third_party/libphonenumber/resources/carrier/ko/82.txt +1 -0
- package/third_party/libphonenumber/resources/carrier/zh/852.txt +49 -35
- package/third_party/libphonenumber/resources/carrier/zh/86.txt +1 -1
- package/third_party/libphonenumber/resources/geocoding/en/1.txt +5 -0
- package/third_party/libphonenumber/resources/geocoding/en/212.txt +13 -6
- package/third_party/libphonenumber/resources/geocoding/en/267.txt +1 -0
- package/third_party/libphonenumber/resources/geocoding/en/299.txt +1 -0
- package/third_party/libphonenumber/resources/geocoding/en/44.txt +15 -1
- package/third_party/libphonenumber/resources/geocoding/en/52.txt +1 -0
- package/third_party/libphonenumber/resources/geocoding/en/53.txt +1 -0
- package/third_party/libphonenumber/resources/geocoding/en/598.txt +1 -9
- package/third_party/libphonenumber/resources/geocoding/en/61.txt +19 -47
- package/third_party/libphonenumber/resources/geocoding/en/975.txt +3 -1
- package/third_party/libphonenumber/resources/geocoding/es/52.txt +1 -0
- package/third_party/libphonenumber/resources/geocoding/fr/212.txt +13 -6
- package/third_party/libphonenumber/resources/metadata/1/ranges.csv +9 -3
- package/third_party/libphonenumber/resources/metadata/20/formats.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/20/ranges.csv +4 -4
- package/third_party/libphonenumber/resources/metadata/212/formats.csv +0 -1
- package/third_party/libphonenumber/resources/metadata/212/ranges.csv +106 -115
- package/third_party/libphonenumber/resources/metadata/216/operators.csv +0 -1
- package/third_party/libphonenumber/resources/metadata/216/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/221/operators.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/221/ranges.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/228/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/228/ranges.csv +3 -2
- package/third_party/libphonenumber/resources/metadata/229/operators.csv +5 -5
- package/third_party/libphonenumber/resources/metadata/229/ranges.csv +58 -58
- package/third_party/libphonenumber/resources/metadata/230/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/237/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/250/operators.csv +5 -4
- package/third_party/libphonenumber/resources/metadata/250/ranges.csv +10 -9
- package/third_party/libphonenumber/resources/metadata/252/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/256/ranges.csv +1 -2
- package/third_party/libphonenumber/resources/metadata/262/examples.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/262/operators.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/262/ranges.csv +22 -21
- package/third_party/libphonenumber/resources/metadata/267/ranges.csv +3 -2
- package/third_party/libphonenumber/resources/metadata/27/ranges.csv +24 -19
- package/third_party/libphonenumber/resources/metadata/299/ranges.csv +3 -2
- package/third_party/libphonenumber/resources/metadata/299/shortcodes.csv +4 -2
- package/third_party/libphonenumber/resources/metadata/30/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/33/ranges.csv +31 -69
- package/third_party/libphonenumber/resources/metadata/353/ranges.csv +59 -70
- package/third_party/libphonenumber/resources/metadata/371/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/372/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/374/ranges.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/385/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/385/ranges.csv +3 -0
- package/third_party/libphonenumber/resources/metadata/389/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/39/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/39/ranges.csv +5 -1
- package/third_party/libphonenumber/resources/metadata/40/ranges.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/41/operators.csv +3 -1
- package/third_party/libphonenumber/resources/metadata/41/ranges.csv +37 -34
- package/third_party/libphonenumber/resources/metadata/423/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/43/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/43/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/44/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/45/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/45/ranges.csv +6 -2
- package/third_party/libphonenumber/resources/metadata/46/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/46/ranges.csv +9 -4
- package/third_party/libphonenumber/resources/metadata/47/ranges.csv +0 -3
- package/third_party/libphonenumber/resources/metadata/48/ranges.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/49/operators.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/49/ranges.csv +1 -2
- package/third_party/libphonenumber/resources/metadata/502/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/503/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/503/ranges.csv +133 -248
- package/third_party/libphonenumber/resources/metadata/507/ranges.csv +2 -2
- package/third_party/libphonenumber/resources/metadata/508/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/51/ranges.csv +2 -2
- package/third_party/libphonenumber/resources/metadata/52/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/53/ranges.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/54/ranges.csv +3 -1
- package/third_party/libphonenumber/resources/metadata/56/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/57/operators.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/57/ranges.csv +5 -2
- package/third_party/libphonenumber/resources/metadata/590/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/592/examples.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/592/operators.csv +5 -3
- package/third_party/libphonenumber/resources/metadata/592/ranges.csv +94 -82
- package/third_party/libphonenumber/resources/metadata/594/ranges.csv +3 -2
- package/third_party/libphonenumber/resources/metadata/596/ranges.csv +4 -2
- package/third_party/libphonenumber/resources/metadata/598/formats.csv +7 -6
- package/third_party/libphonenumber/resources/metadata/598/ranges.csv +37 -35
- package/third_party/libphonenumber/resources/metadata/60/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/61/ranges.csv +23 -42
- package/third_party/libphonenumber/resources/metadata/64/examples.csv +0 -1
- package/third_party/libphonenumber/resources/metadata/64/ranges.csv +9 -6
- package/third_party/libphonenumber/resources/metadata/65/operators.csv +0 -1
- package/third_party/libphonenumber/resources/metadata/65/ranges.csv +6 -2
- package/third_party/libphonenumber/resources/metadata/683/ranges.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/81/comments.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/81/operators.csv +6 -5
- package/third_party/libphonenumber/resources/metadata/81/ranges.csv +979 -975
- package/third_party/libphonenumber/resources/metadata/81/shortcodes.csv +7 -6
- package/third_party/libphonenumber/resources/metadata/82/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/84/ranges.csv +11 -9
- package/third_party/libphonenumber/resources/metadata/852/operators.csv +16 -18
- package/third_party/libphonenumber/resources/metadata/852/ranges.csv +224 -230
- package/third_party/libphonenumber/resources/metadata/853/ranges.csv +1 -2
- package/third_party/libphonenumber/resources/metadata/86/ranges.csv +3 -2
- package/third_party/libphonenumber/resources/metadata/880/comments.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/880/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/881/formats.csv +3 -2
- package/third_party/libphonenumber/resources/metadata/881/ranges.csv +6 -5
- package/third_party/libphonenumber/resources/metadata/883/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/90/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/90/ranges.csv +2 -1
- package/third_party/libphonenumber/resources/metadata/92/ranges.csv +2 -0
- package/third_party/libphonenumber/resources/metadata/966/ranges.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/968/ranges.csv +1 -1
- package/third_party/libphonenumber/resources/metadata/972/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/972/ranges.csv +6 -7
- package/third_party/libphonenumber/resources/metadata/973/operators.csv +1 -0
- package/third_party/libphonenumber/resources/metadata/973/ranges.csv +8 -1
- package/third_party/libphonenumber/resources/metadata/975/ranges.csv +4 -3
- package/third_party/libphonenumber/resources/metadata/992/operators.csv +6 -6
- package/third_party/libphonenumber/resources/metadata/992/ranges.csv +104 -102
- package/third_party/libphonenumber/resources/metadata/995/ranges.csv +4 -1
- package/third_party/libphonenumber/resources/metadata/996/operators.csv +9 -8
- package/third_party/libphonenumber/resources/metadata/996/ranges.csv +94 -93
- package/third_party/libphonenumber/resources/metadata/998/ranges.csv +2 -17
- package/third_party/libphonenumber/resources/metadata/metadata.csv +1 -1
- package/third_party/libphonenumber/resources/timezones/map_data.txt +10 -2
- package/third_party/libphonenumber/tools/cpp/CMakeLists.txt +0 -5
- package/third_party/libphonenumber/tools/java/common/pom.xml +3 -3
- package/third_party/libphonenumber/tools/java/cpp-build/pom.xml +6 -6
- package/third_party/libphonenumber/tools/java/cpp-build/target/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
- package/third_party/libphonenumber/tools/java/data/pom.xml +2 -2
- package/third_party/libphonenumber/tools/java/java-build/pom.xml +2 -2
- package/third_party/libphonenumber/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
- package/third_party/libphonenumber/java/lib/junit-4.13.1.jar +0 -0
- package/third_party/libphonenumber/java/lib/mockito-all-1.10.19.jar +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
package com.google.phonenumbers.demoapp.contacts;
|
|
2
|
+
|
|
3
|
+
import android.content.ContentResolver;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.database.Cursor;
|
|
6
|
+
import android.provider.ContactsContract;
|
|
7
|
+
import android.provider.ContactsContract.CommonDataKinds.Phone;
|
|
8
|
+
import com.google.phonenumbers.demoapp.phonenumbers.PhoneNumberInApp;
|
|
9
|
+
import java.util.ArrayList;
|
|
10
|
+
import java.util.Collections;
|
|
11
|
+
|
|
12
|
+
/** Handles everything related to reading the device contacts. */
|
|
13
|
+
public class ContactsRead {
|
|
14
|
+
|
|
15
|
+
private ContactsRead() {}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Reads all phone numbers in the device's contacts and return them as a list of {@link
|
|
19
|
+
* PhoneNumberInApp}s ascending sorted by the contact name. An empty list is also returned if the
|
|
20
|
+
* app has no permission to read contacts or an error occurred while doing so
|
|
21
|
+
*
|
|
22
|
+
* @param context Context of the app
|
|
23
|
+
* @return ArrayList of all phone numbers in the device's contacts, also empty if the app has no
|
|
24
|
+
* permission to read contacts or an error occurred while doing so
|
|
25
|
+
*/
|
|
26
|
+
public static ArrayList<PhoneNumberInApp> getAllPhoneNumbersSorted(Context context) {
|
|
27
|
+
ArrayList<PhoneNumberInApp> phoneNumbers = new ArrayList<>();
|
|
28
|
+
|
|
29
|
+
if (!ContactsPermissionManagement.isGranted(context)) {
|
|
30
|
+
return phoneNumbers;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
ContentResolver cr = context.getContentResolver();
|
|
34
|
+
// Only query for contacts with phone number(s).
|
|
35
|
+
Cursor cursor =
|
|
36
|
+
cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
|
|
37
|
+
// If query doesn't work as intended.
|
|
38
|
+
if (cursor == null) {
|
|
39
|
+
return phoneNumbers;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
while (cursor.moveToNext()) {
|
|
43
|
+
// ID to identify the phone number entry in the contacts (can be used to update in contacts).
|
|
44
|
+
int idIndex = cursor.getColumnIndex(Phone._ID);
|
|
45
|
+
String id = idIndex != -1 ? cursor.getString(idIndex) : "";
|
|
46
|
+
|
|
47
|
+
int contactNameIndex = cursor.getColumnIndex(Phone.DISPLAY_NAME);
|
|
48
|
+
String contactName = contactNameIndex != -1 ? cursor.getString(contactNameIndex) : "";
|
|
49
|
+
|
|
50
|
+
int originalPhoneNumberIndex = cursor.getColumnIndex(Phone.NUMBER);
|
|
51
|
+
String originalPhoneNumber =
|
|
52
|
+
originalPhoneNumberIndex != -1 ? cursor.getString(originalPhoneNumberIndex) : "";
|
|
53
|
+
|
|
54
|
+
PhoneNumberInApp phoneNumberInApp =
|
|
55
|
+
new PhoneNumberInApp(id, contactName, originalPhoneNumber);
|
|
56
|
+
phoneNumbers.add(phoneNumberInApp);
|
|
57
|
+
}
|
|
58
|
+
cursor.close();
|
|
59
|
+
Collections.sort(phoneNumbers);
|
|
60
|
+
return phoneNumbers;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
package com.google.phonenumbers.demoapp.contacts;
|
|
2
|
+
|
|
3
|
+
import android.content.ContentProviderOperation;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.content.OperationApplicationException;
|
|
6
|
+
import android.os.RemoteException;
|
|
7
|
+
import android.provider.ContactsContract;
|
|
8
|
+
import android.provider.ContactsContract.CommonDataKinds.Phone;
|
|
9
|
+
import com.google.phonenumbers.demoapp.phonenumbers.PhoneNumberInApp;
|
|
10
|
+
import java.util.ArrayList;
|
|
11
|
+
|
|
12
|
+
/** Handles everything related to writing the device contacts. */
|
|
13
|
+
public class ContactsWrite {
|
|
14
|
+
|
|
15
|
+
private ContactsWrite() {}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Attempts to update all phone numbers in param {@code phoneNumbers} in the device's contacts.
|
|
19
|
+
* {@link PhoneNumberInApp#shouldContactBeUpdated()} is not called in this method and should be
|
|
20
|
+
* checked while creating the param {@code phoneNumbers}.
|
|
21
|
+
*
|
|
22
|
+
* @param phoneNumbers ArrayList of all phone numbers to update
|
|
23
|
+
* @param context Context of the app
|
|
24
|
+
* @return boolean whether operation was successful
|
|
25
|
+
*/
|
|
26
|
+
public static boolean updatePhoneNumbers(
|
|
27
|
+
ArrayList<PhoneNumberInApp> phoneNumbers, Context context) {
|
|
28
|
+
if (!ContactsPermissionManagement.isGranted(context)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Create a list of operations to only have to apply one batch.
|
|
33
|
+
ArrayList<ContentProviderOperation> contentProviderOperations = new ArrayList<>();
|
|
34
|
+
|
|
35
|
+
for (PhoneNumberInApp phoneNumber : phoneNumbers) {
|
|
36
|
+
// Identify the exact phone number entry to update.
|
|
37
|
+
String whereConditionBase = Phone._ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
|
|
38
|
+
String[] whereConditionParams =
|
|
39
|
+
new String[] {
|
|
40
|
+
phoneNumber.getId(), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
contentProviderOperations.add(
|
|
44
|
+
ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
|
|
45
|
+
.withSelection(whereConditionBase, whereConditionParams)
|
|
46
|
+
.withValue(Phone.NUMBER, phoneNumber.getFormattedPhoneNumber())
|
|
47
|
+
.build());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
context
|
|
52
|
+
.getContentResolver()
|
|
53
|
+
.applyBatch(ContactsContract.AUTHORITY, contentProviderOperations);
|
|
54
|
+
} catch (OperationApplicationException | RemoteException e) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
package com.google.phonenumbers.demoapp.main;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.util.AttributeSet;
|
|
5
|
+
import android.view.KeyEvent;
|
|
6
|
+
import android.widget.ArrayAdapter;
|
|
7
|
+
import android.widget.AutoCompleteTextView;
|
|
8
|
+
import android.widget.LinearLayout;
|
|
9
|
+
import androidx.annotation.NonNull;
|
|
10
|
+
import androidx.annotation.Nullable;
|
|
11
|
+
import com.google.android.material.textfield.TextInputLayout;
|
|
12
|
+
import com.google.i18n.phonenumbers.PhoneNumberUtil;
|
|
13
|
+
import com.google.phonenumbers.demoapp.R;
|
|
14
|
+
import java.util.ArrayList;
|
|
15
|
+
import java.util.Collections;
|
|
16
|
+
import java.util.HashMap;
|
|
17
|
+
import java.util.List;
|
|
18
|
+
import java.util.Locale;
|
|
19
|
+
import java.util.Map;
|
|
20
|
+
import java.util.Set;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A component containing a searchable dropdown input populated with all regions {@link
|
|
24
|
+
* PhoneNumberUtil} supports. Dropdown items are of format {@code [countryName] ([nameCode]) -
|
|
25
|
+
* +[callingCode]} (e.g. {@code Switzerland (CH) - +41}). Method provides access to the name code
|
|
26
|
+
* (e.g. {@code CH}) of the current input. Name code: <a
|
|
27
|
+
* href="https://www.iso.org/glossary-for-iso-3166.html">ISO 3166-1 alpha-2 country code</a> (e.g.
|
|
28
|
+
* {@code CH}). Calling code: <a
|
|
29
|
+
* href="https://www.itu.int/dms_pub/itu-t/opb/sp/T-SP-E.164D-2016-PDF-E.pdf">ITU-T E.164 assigned
|
|
30
|
+
* country code</a> (e.g. {@code 41}).
|
|
31
|
+
*/
|
|
32
|
+
public class CountryDropdown extends LinearLayout {
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Map containing keys of format {@code [countryName] ([nameCode]) - +[callingCode]} (e.g. {@code
|
|
36
|
+
* Switzerland (CH) - +41}), and name codes (e.g. {@code CH}) as values.
|
|
37
|
+
*/
|
|
38
|
+
private static final Map<String, String> countryLabelMapNameCode = new HashMap<>();
|
|
39
|
+
/** Ascending sorted list of the keys in {@link CountryDropdown#countryLabelMapNameCode}. */
|
|
40
|
+
private static final List<String> countryLabelSorted = new ArrayList<>();
|
|
41
|
+
|
|
42
|
+
private final TextInputLayout input;
|
|
43
|
+
private final AutoCompleteTextView inputEditText;
|
|
44
|
+
|
|
45
|
+
/** The name code of the current input. */
|
|
46
|
+
private String nameCode;
|
|
47
|
+
|
|
48
|
+
public CountryDropdown(@NonNull Context context, @Nullable AttributeSet attrs) {
|
|
49
|
+
super(context, attrs);
|
|
50
|
+
inflate(getContext(), R.layout.country_dropdown, this);
|
|
51
|
+
input = findViewById(R.id.country_dropdown_input);
|
|
52
|
+
inputEditText = findViewById(R.id.country_dropdown_input_edit_text);
|
|
53
|
+
|
|
54
|
+
inputEditText.setOnKeyListener(
|
|
55
|
+
(v, keyCode, event) -> {
|
|
56
|
+
// If the DEL key is used and the input was a valid dropdown option, clear the input
|
|
57
|
+
// completely
|
|
58
|
+
if (keyCode == KeyEvent.KEYCODE_DEL && setNameCodeForInput()) {
|
|
59
|
+
inputEditText.setText("");
|
|
60
|
+
}
|
|
61
|
+
// Disable the error state when editing the input after the validation revealed an error
|
|
62
|
+
if (input.isErrorEnabled()) {
|
|
63
|
+
disableInputError();
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
populateCountryLabelMapNameCode();
|
|
69
|
+
setAdapter();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Populates {@link CountryDropdown#countryLabelMapNameCode} with all regions {@link
|
|
74
|
+
* PhoneNumberUtil} supports if not populated yet.
|
|
75
|
+
*/
|
|
76
|
+
private void populateCountryLabelMapNameCode() {
|
|
77
|
+
if (!countryLabelMapNameCode.isEmpty()) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
Set<String> supportedNameCodes = PhoneNumberUtil.getInstance().getSupportedRegions();
|
|
82
|
+
for (String nameCode : supportedNameCodes) {
|
|
83
|
+
String countryLabel = getCountryLabelForNameCode(nameCode);
|
|
84
|
+
countryLabelMapNameCode.put(countryLabel, nameCode);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Returns the label of format {@code [countryName] ([nameCode]) - +[callingCode]} (e.g. {@code
|
|
90
|
+
* Switzerland (CH) - +41}) for the param {@code nameCode}.
|
|
91
|
+
*
|
|
92
|
+
* @param nameCode String in format of a name code (e.g. {@code CH})
|
|
93
|
+
* @return String label of format {@code [countryName] ([nameCode]) - +[callingCode]} (e.g. {@code
|
|
94
|
+
* Switzerland (CH) - +41})
|
|
95
|
+
*/
|
|
96
|
+
private String getCountryLabelForNameCode(String nameCode) {
|
|
97
|
+
Locale locale = new Locale("en", nameCode);
|
|
98
|
+
String countryName = locale.getDisplayCountry();
|
|
99
|
+
int callingCode =
|
|
100
|
+
PhoneNumberUtil.getInstance().getCountryCodeForRegion(nameCode.toUpperCase(Locale.ROOT));
|
|
101
|
+
|
|
102
|
+
return countryName + " (" + nameCode.toUpperCase(Locale.ROOT) + ") - +" + callingCode;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Populates {@link CountryDropdown#countryLabelSorted} with the ascending sorted keys of {@link
|
|
107
|
+
* CountryDropdown#countryLabelMapNameCode} if not populated yet. Then sets an {@link
|
|
108
|
+
* ArrayAdapter} with {@link CountryDropdown#countryLabelSorted} for the dropdown to show the
|
|
109
|
+
* list.
|
|
110
|
+
*/
|
|
111
|
+
private void setAdapter() {
|
|
112
|
+
if (countryLabelSorted.isEmpty()) {
|
|
113
|
+
countryLabelSorted.addAll(countryLabelMapNameCode.keySet());
|
|
114
|
+
Collections.sort(countryLabelSorted);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
ArrayAdapter<String> arrayAdapter =
|
|
118
|
+
new ArrayAdapter<>(getContext(), R.layout.country_dropdown_item, countryLabelSorted);
|
|
119
|
+
inputEditText.setAdapter(arrayAdapter);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Returns whether the current input is a valid dropdown option. Also updates the input error
|
|
124
|
+
* accordingly.
|
|
125
|
+
*
|
|
126
|
+
* @return boolean whether the current input is a valid dropdown option
|
|
127
|
+
*/
|
|
128
|
+
public boolean validateInput() {
|
|
129
|
+
if (!setNameCodeForInput()) {
|
|
130
|
+
enableInputError();
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
disableInputError();
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Sets the {@link CountryDropdown#nameCode} to the name code of the current input if that's a
|
|
140
|
+
* valid dropdown option. Else set's it to an empty String.
|
|
141
|
+
*
|
|
142
|
+
* @return boolean whether the current input is a valid dropdown option
|
|
143
|
+
*/
|
|
144
|
+
private boolean setNameCodeForInput() {
|
|
145
|
+
String nameCodeForInput = countryLabelMapNameCode.get(getInput());
|
|
146
|
+
if (nameCodeForInput == null) {
|
|
147
|
+
nameCode = "";
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
nameCode = nameCodeForInput;
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** Shows the error message on the input component. */
|
|
156
|
+
private void enableInputError() {
|
|
157
|
+
input.setErrorEnabled(true);
|
|
158
|
+
input.setError(getResources().getString(R.string.main_activity_country_dropdown_error));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Hides the error message on the input component. */
|
|
162
|
+
private void disableInputError() {
|
|
163
|
+
input.setError(null);
|
|
164
|
+
input.setErrorEnabled(false);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private String getInput() {
|
|
168
|
+
return inputEditText.getText().toString();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Returns the name code of the current input if it's a valid dropdown option, else returns an
|
|
173
|
+
* empty String.
|
|
174
|
+
*
|
|
175
|
+
* @return String name code of the current input if it's a valid dropdown option, else returns an
|
|
176
|
+
* empty String
|
|
177
|
+
*/
|
|
178
|
+
public String getNameCodeForInput() {
|
|
179
|
+
setNameCodeForInput();
|
|
180
|
+
return nameCode;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Sets the label of the country with the name code param {@code nameCode} on the input if it's
|
|
185
|
+
* valid. Else the input is not changed.
|
|
186
|
+
*
|
|
187
|
+
* @param nameCode String in format of a name code (e.g. {@code CH})
|
|
188
|
+
*/
|
|
189
|
+
public void setInputForNameCode(String nameCode) {
|
|
190
|
+
String countryLabel = getCountryLabelForNameCode(nameCode);
|
|
191
|
+
if (!countryLabelSorted.contains(countryLabel)) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
inputEditText.setText(countryLabel);
|
|
196
|
+
validateInput();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
@Override
|
|
200
|
+
public void setEnabled(boolean enabled) {
|
|
201
|
+
input.setEnabled(enabled);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
package com.google.phonenumbers.demoapp.main;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.content.Intent;
|
|
5
|
+
import android.content.pm.PackageManager;
|
|
6
|
+
import android.os.Bundle;
|
|
7
|
+
import android.telephony.TelephonyManager;
|
|
8
|
+
import android.view.View;
|
|
9
|
+
import android.widget.Button;
|
|
10
|
+
import android.widget.CheckBox;
|
|
11
|
+
import android.widget.TextView;
|
|
12
|
+
import androidx.annotation.NonNull;
|
|
13
|
+
import androidx.appcompat.app.ActionBar;
|
|
14
|
+
import androidx.appcompat.app.AppCompatActivity;
|
|
15
|
+
import com.google.android.material.snackbar.Snackbar;
|
|
16
|
+
import com.google.phonenumbers.demoapp.R;
|
|
17
|
+
import com.google.phonenumbers.demoapp.contacts.ContactsPermissionManagement;
|
|
18
|
+
import com.google.phonenumbers.demoapp.contacts.ContactsRead;
|
|
19
|
+
import com.google.phonenumbers.demoapp.phonenumbers.PhoneNumberFormatting;
|
|
20
|
+
import com.google.phonenumbers.demoapp.phonenumbers.PhoneNumberInApp;
|
|
21
|
+
import com.google.phonenumbers.demoapp.result.ResultActivity;
|
|
22
|
+
import java.util.ArrayList;
|
|
23
|
+
|
|
24
|
+
/** Used to handle and process interactions from/with the main page UI of the app. */
|
|
25
|
+
public class MainActivity extends AppCompatActivity {
|
|
26
|
+
|
|
27
|
+
private CountryDropdown countryDropdown;
|
|
28
|
+
private Button btnCountryDropdownReset;
|
|
29
|
+
private CheckBox cbIgnoreWhitespace;
|
|
30
|
+
private TextView tvError;
|
|
31
|
+
private Button btnError;
|
|
32
|
+
private Button btnStart;
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
protected void onCreate(Bundle savedInstanceState) {
|
|
36
|
+
super.onCreate(savedInstanceState);
|
|
37
|
+
setContentView(R.layout.activity_main);
|
|
38
|
+
|
|
39
|
+
ActionBar actionBar = getSupportActionBar();
|
|
40
|
+
if (actionBar != null) {
|
|
41
|
+
actionBar.setTitle(R.string.app_name_long);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
countryDropdown = findViewById(R.id.country_dropdown);
|
|
45
|
+
btnCountryDropdownReset = findViewById(R.id.btn_country_dropdown_reset);
|
|
46
|
+
cbIgnoreWhitespace = findViewById(R.id.cb_ignore_whitespace);
|
|
47
|
+
tvError = findViewById(R.id.tv_error);
|
|
48
|
+
btnError = findViewById(R.id.btn_error);
|
|
49
|
+
btnStart = findViewById(R.id.btn_start);
|
|
50
|
+
|
|
51
|
+
btnCountryDropdownReset.setOnClickListener(v -> setSimCountryOnCountryDropdown());
|
|
52
|
+
btnStart.setOnClickListener(v -> btnStartClicked());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Override
|
|
56
|
+
protected void onStart() {
|
|
57
|
+
super.onStart();
|
|
58
|
+
// Reset all UI elements to default state
|
|
59
|
+
updateUiState(UiState.SELECT_COUNTRY_CODE);
|
|
60
|
+
setSimCountryOnCountryDropdown();
|
|
61
|
+
cbIgnoreWhitespace.setChecked(true);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@Override
|
|
65
|
+
public void onRequestPermissionsResult(
|
|
66
|
+
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
|
67
|
+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
68
|
+
|
|
69
|
+
// Return of the permission result is not about the requested contacts permission
|
|
70
|
+
if (requestCode != ContactsPermissionManagement.CONTACTS_PERMISSION_REQUEST_CODE) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (grantResults.length == 2
|
|
75
|
+
&& grantResults[0] == PackageManager.PERMISSION_GRANTED
|
|
76
|
+
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
|
|
77
|
+
updateUiState(UiState.PROCESSING);
|
|
78
|
+
startProcess();
|
|
79
|
+
} else {
|
|
80
|
+
ContactsPermissionManagement.addOneToNumberOfDenials(this);
|
|
81
|
+
switch (ContactsPermissionManagement.getState(this)) {
|
|
82
|
+
// NEED_REQUEST is specifically to handle the case where the user dismisses the first
|
|
83
|
+
// permission dialog shown since the app's installation.
|
|
84
|
+
case NEEDS_REQUEST:
|
|
85
|
+
case SHOW_RATIONALE:
|
|
86
|
+
updateUiState(UiState.PERMISSION_ERROR_GRANT_IN_APP);
|
|
87
|
+
break;
|
|
88
|
+
case NEEDS_GRANT_IN_SETTINGS:
|
|
89
|
+
default:
|
|
90
|
+
updateUiState(UiState.PERMISSION_ERROR_GRANT_IN_SETTINGS);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Updates the UI to represent the param {@code uiState}.
|
|
98
|
+
*
|
|
99
|
+
* @param uiState State the UI should be changed to
|
|
100
|
+
*/
|
|
101
|
+
private void updateUiState(UiState uiState) {
|
|
102
|
+
// Specifically: countryDropdown, btnCountryDropdownReset, cbIgnoreWhitespace, and btnStart
|
|
103
|
+
boolean mainInteractionsEnabled = false;
|
|
104
|
+
// Specifically: tvError, and btnError
|
|
105
|
+
boolean showError = false;
|
|
106
|
+
|
|
107
|
+
switch (uiState) {
|
|
108
|
+
case SELECT_COUNTRY_CODE:
|
|
109
|
+
default:
|
|
110
|
+
mainInteractionsEnabled = true;
|
|
111
|
+
btnStart.setText(getText(R.string.main_activity_start_text_default));
|
|
112
|
+
break;
|
|
113
|
+
case PROCESSING:
|
|
114
|
+
btnStart.setText(getText(R.string.main_activity_start_text_processing));
|
|
115
|
+
break;
|
|
116
|
+
case PERMISSION_ERROR_GRANT_IN_APP:
|
|
117
|
+
showError = true;
|
|
118
|
+
tvError.setText(getText(R.string.main_activity_error_text_grant_in_app));
|
|
119
|
+
btnError.setText(getText(R.string.main_activity_error_cta_grant_in_app));
|
|
120
|
+
btnError.setOnClickListener(v -> ContactsPermissionManagement.request(this));
|
|
121
|
+
btnStart.setText(getText(R.string.main_activity_start_text_processing));
|
|
122
|
+
break;
|
|
123
|
+
case PERMISSION_ERROR_GRANT_IN_SETTINGS:
|
|
124
|
+
showError = true;
|
|
125
|
+
tvError.setText(getText(R.string.main_activity_error_text_grant_in_settings));
|
|
126
|
+
btnError.setText(getText(R.string.main_activity_error_cta_grant_in_settings));
|
|
127
|
+
btnError.setOnClickListener(v -> ContactsPermissionManagement.openSystemSettings(this));
|
|
128
|
+
btnStart.setText(getText(R.string.main_activity_start_text_default));
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
countryDropdown.setEnabled(mainInteractionsEnabled);
|
|
133
|
+
btnCountryDropdownReset.setEnabled(mainInteractionsEnabled);
|
|
134
|
+
cbIgnoreWhitespace.setEnabled(mainInteractionsEnabled);
|
|
135
|
+
tvError.setVisibility(showError ? View.VISIBLE : View.INVISIBLE);
|
|
136
|
+
btnError.setVisibility(showError ? View.VISIBLE : View.INVISIBLE);
|
|
137
|
+
btnStart.setEnabled(mainInteractionsEnabled);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Sets the SIM's country as selected item in the country dropdown. */
|
|
141
|
+
private void setSimCountryOnCountryDropdown() {
|
|
142
|
+
TelephonyManager telephonyManager =
|
|
143
|
+
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
|
144
|
+
countryDropdown.setInputForNameCode(telephonyManager.getSimCountryIso());
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Called when the start button is clicked. If contacts permissions are granted, starts reading
|
|
149
|
+
* the contacts. If permissions are not granted, handle that appropriately based on the current
|
|
150
|
+
* state in the process.
|
|
151
|
+
*/
|
|
152
|
+
private void btnStartClicked() {
|
|
153
|
+
updateUiState(UiState.PROCESSING);
|
|
154
|
+
|
|
155
|
+
if (!countryDropdown.validateInput()) {
|
|
156
|
+
updateUiState(UiState.SELECT_COUNTRY_CODE);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
switch (ContactsPermissionManagement.getState(this)) {
|
|
161
|
+
case ALREADY_GRANTED:
|
|
162
|
+
startProcess();
|
|
163
|
+
break;
|
|
164
|
+
case NEEDS_REQUEST:
|
|
165
|
+
ContactsPermissionManagement.request(this);
|
|
166
|
+
break;
|
|
167
|
+
case SHOW_RATIONALE:
|
|
168
|
+
updateUiState(UiState.PERMISSION_ERROR_GRANT_IN_APP);
|
|
169
|
+
break;
|
|
170
|
+
case NEEDS_GRANT_IN_SETTINGS:
|
|
171
|
+
default:
|
|
172
|
+
updateUiState(UiState.PERMISSION_ERROR_GRANT_IN_SETTINGS);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Starts the process of reading the contacts, formatting the numbers and starting a {@link
|
|
179
|
+
* ResultActivity} to show the results.
|
|
180
|
+
*/
|
|
181
|
+
private void startProcess() {
|
|
182
|
+
ArrayList<PhoneNumberInApp> phoneNumbersSorted = ContactsRead.getAllPhoneNumbersSorted(this);
|
|
183
|
+
|
|
184
|
+
if (phoneNumbersSorted.isEmpty()) {
|
|
185
|
+
showNoContactsExistSnackbar();
|
|
186
|
+
updateUiState(UiState.SELECT_COUNTRY_CODE);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Format each phone number.
|
|
191
|
+
for (PhoneNumberInApp phoneNumber : phoneNumbersSorted) {
|
|
192
|
+
PhoneNumberFormatting.formatPhoneNumberInApp(
|
|
193
|
+
phoneNumber, countryDropdown.getNameCodeForInput(), cbIgnoreWhitespace.isChecked());
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Start new activity to show results.
|
|
197
|
+
Intent intent = new Intent(this, ResultActivity.class);
|
|
198
|
+
intent.putExtra(ResultActivity.PHONE_NUMBERS_SORTED_SERIALIZABLE_EXTRA_KEY, phoneNumbersSorted);
|
|
199
|
+
startActivity(intent);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** Shows a Snackbar informing that no contacts exist. */
|
|
203
|
+
private void showNoContactsExistSnackbar() {
|
|
204
|
+
Snackbar.make(
|
|
205
|
+
countryDropdown, R.string.main_activity_no_contacts_exist_text, Snackbar.LENGTH_LONG)
|
|
206
|
+
.show();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** Represents the different states the UI of this activity can become. */
|
|
210
|
+
enum UiState {
|
|
211
|
+
/** The user should select a country from the dropdown. */
|
|
212
|
+
SELECT_COUNTRY_CODE,
|
|
213
|
+
/** Used when loading or processing. The UI is disabled for the user during this time. */
|
|
214
|
+
PROCESSING,
|
|
215
|
+
/**
|
|
216
|
+
* Shows a text explaining that the app needs contacts permission to work, and a button to grant
|
|
217
|
+
* the permission directly in the app.
|
|
218
|
+
*/
|
|
219
|
+
PERMISSION_ERROR_GRANT_IN_APP,
|
|
220
|
+
/**
|
|
221
|
+
* Shows a text explaining that the app does not have contacts permission, and a button to go to
|
|
222
|
+
* the system settings to grant the permission.
|
|
223
|
+
*/
|
|
224
|
+
PERMISSION_ERROR_GRANT_IN_SETTINGS
|
|
225
|
+
}
|
|
226
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
package com.google.phonenumbers.demoapp.phonenumbers;
|
|
2
|
+
|
|
3
|
+
import com.google.i18n.phonenumbers.NumberParseException;
|
|
4
|
+
import com.google.i18n.phonenumbers.PhoneNumberUtil;
|
|
5
|
+
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
|
|
6
|
+
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
|
|
7
|
+
import com.google.i18n.phonenumbers.ShortNumberInfo;
|
|
8
|
+
import com.google.phonenumbers.demoapp.phonenumbers.PhoneNumberInApp.FormattingState;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Handles everything related to the formatting {@link PhoneNumberInApp}s to E.164 format (e.g.
|
|
12
|
+
* {@code +41446681800}) using LibPhoneNumber ({@link PhoneNumberUtil}).
|
|
13
|
+
*/
|
|
14
|
+
public class PhoneNumberFormatting {
|
|
15
|
+
|
|
16
|
+
private static final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
|
|
17
|
+
private static final ShortNumberInfo shortNumberInfo = ShortNumberInfo.getInstance();
|
|
18
|
+
|
|
19
|
+
private PhoneNumberFormatting() {}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Attempts to format the param {@code phoneNumberInApp} in E.164 format (e.g. {@code
|
|
23
|
+
* +41446681800}) using the country from param {@code nameCodeToUse} (e.g. {@code CH}).
|
|
24
|
+
*
|
|
25
|
+
* @param phoneNumberInApp PhoneNumberInApp to format to E.164 format
|
|
26
|
+
* @param nameCodeToUse String in format of a name code (e.g. {@code CH})
|
|
27
|
+
* @param ignoreWhitespace boolean whether a phone number should be treated as {@link
|
|
28
|
+
* FormattingState#NUMBER_IS_ALREADY_IN_E164} instead of suggesting to remove whitespace if
|
|
29
|
+
* that whitespace is the only difference
|
|
30
|
+
*/
|
|
31
|
+
public static void formatPhoneNumberInApp(
|
|
32
|
+
PhoneNumberInApp phoneNumberInApp, String nameCodeToUse, boolean ignoreWhitespace) {
|
|
33
|
+
PhoneNumber originalPhoneNumberParsed;
|
|
34
|
+
|
|
35
|
+
// Check PARSING_ERROR
|
|
36
|
+
try {
|
|
37
|
+
originalPhoneNumberParsed =
|
|
38
|
+
phoneNumberUtil.parse(phoneNumberInApp.getOriginalPhoneNumber(), nameCodeToUse);
|
|
39
|
+
} catch (NumberParseException e) {
|
|
40
|
+
phoneNumberInApp.setFormattingState(FormattingState.PARSING_ERROR);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Check NUMBER_IS_SHORT_NUMBER
|
|
45
|
+
if (shortNumberInfo.isValidShortNumber(originalPhoneNumberParsed)) {
|
|
46
|
+
phoneNumberInApp.setFormattingState(FormattingState.NUMBER_IS_SHORT_NUMBER);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Check NUMBER_IS_NOT_VALID
|
|
51
|
+
if (!phoneNumberUtil.isValidNumber(originalPhoneNumberParsed)) {
|
|
52
|
+
phoneNumberInApp.setFormattingState(FormattingState.NUMBER_IS_NOT_VALID);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
String formattedPhoneNumber =
|
|
57
|
+
phoneNumberUtil.format(originalPhoneNumberParsed, PhoneNumberFormat.E164);
|
|
58
|
+
|
|
59
|
+
// Check NUMBER_IS_ALREADY_IN_E164
|
|
60
|
+
if (ignoreWhitespace
|
|
61
|
+
? phoneNumberInApp
|
|
62
|
+
.getOriginalPhoneNumber()
|
|
63
|
+
.replaceAll("\\s+", "")
|
|
64
|
+
.equals(formattedPhoneNumber)
|
|
65
|
+
: phoneNumberInApp.getOriginalPhoneNumber().equals(formattedPhoneNumber)) {
|
|
66
|
+
phoneNumberInApp.setFormattingState(FormattingState.NUMBER_IS_ALREADY_IN_E164);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
phoneNumberInApp.setFormattedPhoneNumber(formattedPhoneNumber);
|
|
71
|
+
phoneNumberInApp.setFormattingState(FormattingState.COMPLETED);
|
|
72
|
+
phoneNumberInApp.setShouldContactBeUpdated(true);
|
|
73
|
+
}
|
|
74
|
+
}
|