intl-tel-input 18.2.1 → 18.3.1

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.
Files changed (419) hide show
  1. package/.github/CONTRIBUTING.md +1 -1
  2. package/README.md +14 -10
  3. package/build/css/intlTelInput.css +3 -3
  4. package/build/css/intlTelInput.min.css +1 -1
  5. package/build/js/data.js +2 -2
  6. package/build/js/data.min.js +2 -2
  7. package/build/js/intlTelInput-jquery.js +13 -15
  8. package/build/js/intlTelInput-jquery.min.js +3 -3
  9. package/build/js/intlTelInput.js +13 -15
  10. package/build/js/intlTelInput.min.js +3 -3
  11. package/build/js/utils.js +147 -147
  12. package/composer.json +1 -1
  13. package/demo.html +1 -0
  14. package/grunt/replace.js +0 -3
  15. package/package.json +2 -2
  16. package/spec.html +2 -0
  17. package/src/css/intlTelInput.scss +2 -2
  18. package/src/js/data.js +1 -7
  19. package/src/js/intlTelInput.js +14 -17
  20. package/src/spec/helpers/helpers.js +1 -1
  21. package/src/spec/tests/options/useFullscreenPopup.js +45 -0
  22. package/third_party/libphonenumber/.github/dependabot.yml +16 -16
  23. package/third_party/libphonenumber/.github/workflows/codeql.yml +4 -4
  24. package/third_party/libphonenumber/.github/workflows/dependency-review.yml +2 -2
  25. package/third_party/libphonenumber/.github/workflows/scorecards.yml +2 -2
  26. package/third_party/libphonenumber/.github/workflows/unit-test.yml +3 -3
  27. package/third_party/libphonenumber/FAQ.md +0 -6
  28. package/third_party/libphonenumber/README.md +10 -2
  29. package/third_party/libphonenumber/cpp/CMakeLists.txt +1 -7
  30. package/third_party/libphonenumber/cpp/src/phonenumbers/alternate_format.cc +15 -15
  31. package/third_party/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +12079 -12165
  32. package/third_party/libphonenumber/cpp/src/phonenumbers/metadata.cc +13707 -13791
  33. package/third_party/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +2394 -2389
  34. package/third_party/libphonenumber/java/build.xml +10 -1
  35. package/third_party/libphonenumber/java/carrier/pom.xml +6 -6
  36. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en +0 -0
  37. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/216_en +0 -0
  38. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/221_en +0 -0
  39. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/228_en +0 -0
  40. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/229_en +0 -0
  41. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/230_en +0 -0
  42. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en +0 -0
  43. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/250_en +0 -0
  44. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/262_en +0 -0
  45. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/30_en +0 -0
  46. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/371_en +0 -0
  47. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en +0 -0
  48. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/389_en +0 -0
  49. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/39_en +0 -0
  50. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/40_en +0 -0
  51. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en +0 -0
  52. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/423_en +0 -0
  53. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/43_en +0 -0
  54. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/45_en +0 -0
  55. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/46_en +0 -0
  56. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en +0 -0
  57. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/49_en +0 -0
  58. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/502_en +0 -0
  59. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/503_en +0 -0
  60. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/51_en +0 -0
  61. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/53_en +0 -0
  62. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en +0 -0
  63. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en +0 -0
  64. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/592_en +0 -0
  65. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en +0 -0
  66. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/61_en +0 -0
  67. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/64_en +0 -0
  68. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en +0 -0
  69. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/683_en +0 -0
  70. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/81_en +0 -0
  71. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/82_en +0 -0
  72. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/82_ko +0 -0
  73. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/84_en +0 -0
  74. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en +0 -0
  75. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh +0 -0
  76. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_zh_Hant +0 -0
  77. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/853_en +0 -0
  78. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en +0 -0
  79. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_zh +0 -0
  80. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/90_en +0 -0
  81. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/92_en +0 -0
  82. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/966_en +0 -0
  83. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en +0 -0
  84. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/973_en +0 -0
  85. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en +0 -0
  86. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en +0 -0
  87. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en +0 -0
  88. package/third_party/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/998_en +0 -0
  89. package/third_party/libphonenumber/java/demo/pom.xml +9 -9
  90. package/third_party/libphonenumber/java/demoapp/README.md +51 -0
  91. package/third_party/libphonenumber/java/demoapp/app/build.gradle +45 -0
  92. package/third_party/libphonenumber/java/demoapp/app/src/main/AndroidManifest.xml +39 -0
  93. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/MyApplication.java +16 -0
  94. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/contacts/ContactsPermissionManagement.java +161 -0
  95. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/contacts/ContactsRead.java +62 -0
  96. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/contacts/ContactsWrite.java +59 -0
  97. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/main/CountryDropdown.java +203 -0
  98. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/main/MainActivity.java +226 -0
  99. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberFormatting.java +74 -0
  100. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberInApp.java +96 -0
  101. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/FormattableFragment.java +161 -0
  102. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/FormattableRvAdapter.java +157 -0
  103. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/NotFormattableFragment.java +119 -0
  104. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/NotFormattableRvAdapter.java +94 -0
  105. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/ResultActivity.java +102 -0
  106. package/third_party/libphonenumber/java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/result/ResultVpAdapter.java +72 -0
  107. package/third_party/libphonenumber/java/demoapp/app/src/main/res/drawable/ic_launcher_background.xml +32 -0
  108. package/third_party/libphonenumber/java/demoapp/app/src/main/res/drawable/ic_launcher_foreground.xml +16 -0
  109. package/third_party/libphonenumber/java/demoapp/app/src/main/res/drawable/ic_outline_home_30.xml +10 -0
  110. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/activity_main.xml +83 -0
  111. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/activity_result.xml +26 -0
  112. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/country_dropdown.xml +24 -0
  113. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/country_dropdown_item.xml +9 -0
  114. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/formattable_list_item.xml +66 -0
  115. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/fragment_formattable.xml +30 -0
  116. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/fragment_not_formattable.xml +64 -0
  117. package/third_party/libphonenumber/java/demoapp/app/src/main/res/layout/not_formattable_list_item.xml +57 -0
  118. package/third_party/libphonenumber/java/demoapp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  119. package/third_party/libphonenumber/java/demoapp/app/src/main/res/values/dimens.xml +9 -0
  120. package/third_party/libphonenumber/java/demoapp/app/src/main/res/values/strings.xml +48 -0
  121. package/third_party/libphonenumber/java/demoapp/app/src/main/res/values/themes.xml +4 -0
  122. package/third_party/libphonenumber/java/demoapp/app/src/main/res/values-night/themes.xml +4 -0
  123. package/third_party/libphonenumber/java/demoapp/app/src/test/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberFormattingTest.java +103 -0
  124. package/third_party/libphonenumber/java/demoapp/app/src/test/java/com/google/phonenumbers/demoapp/phonenumbers/PhoneNumberInAppTest.java +70 -0
  125. package/third_party/libphonenumber/java/demoapp/build.gradle +5 -0
  126. package/third_party/libphonenumber/java/demoapp/gradle.properties +21 -0
  127. package/third_party/libphonenumber/java/demoapp/settings.gradle +16 -0
  128. package/third_party/libphonenumber/java/geocoder/pom.xml +6 -6
  129. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1227_en +0 -0
  130. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1329_en +0 -0
  131. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1369_en +0 -0
  132. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1730_en +0 -0
  133. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1983_en +0 -0
  134. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en +0 -0
  135. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr +0 -0
  136. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/267_en +0 -0
  137. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/299_en +0 -0
  138. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en +0 -0
  139. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/52_en +0 -0
  140. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/53_en +0 -0
  141. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/598_en +0 -0
  142. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/61_en +0 -0
  143. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/975_en +0 -0
  144. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config +0 -0
  145. package/third_party/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data +0 -0
  146. package/third_party/libphonenumber/java/internal/prefixmapper/pom.xml +5 -5
  147. package/third_party/libphonenumber/java/libphonenumber/pom.xml +4 -4
  148. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_84 +0 -0
  149. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 +0 -0
  150. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 +0 -0
  151. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM +0 -0
  152. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR +0 -0
  153. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU +0 -0
  154. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD +0 -0
  155. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH +0 -0
  156. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ +0 -0
  157. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL +0 -0
  158. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW +0 -0
  159. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC +0 -0
  160. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO +0 -0
  161. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU +0 -0
  162. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX +0 -0
  163. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE +0 -0
  164. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG +0 -0
  165. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH +0 -0
  166. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR +0 -0
  167. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB +0 -0
  168. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE +0 -0
  169. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF +0 -0
  170. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL +0 -0
  171. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP +0 -0
  172. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT +0 -0
  173. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU +0 -0
  174. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY +0 -0
  175. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK +0 -0
  176. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR +0 -0
  177. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL +0 -0
  178. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM +0 -0
  179. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP +0 -0
  180. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG +0 -0
  181. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR +0 -0
  182. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ +0 -0
  183. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI +0 -0
  184. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA +0 -0
  185. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF +0 -0
  186. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK +0 -0
  187. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ +0 -0
  188. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU +0 -0
  189. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX +0 -0
  190. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY +0 -0
  191. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO +0 -0
  192. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU +0 -0
  193. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ +0 -0
  194. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM +0 -0
  195. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA +0 -0
  196. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK +0 -0
  197. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL +0 -0
  198. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM +0 -0
  199. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE +0 -0
  200. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO +0 -0
  201. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU +0 -0
  202. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW +0 -0
  203. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA +0 -0
  204. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG +0 -0
  205. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ +0 -0
  206. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO +0 -0
  207. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV +0 -0
  208. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ +0 -0
  209. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN +0 -0
  210. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR +0 -0
  211. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG +0 -0
  212. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US +0 -0
  213. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY +0 -0
  214. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ +0 -0
  215. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN +0 -0
  216. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT +0 -0
  217. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL +0 -0
  218. package/third_party/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP +0 -0
  219. package/third_party/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java +4 -3
  220. package/third_party/libphonenumber/java/pom.xml +13 -13
  221. package/third_party/libphonenumber/java/script/download-junit-jars.sh +26 -0
  222. package/third_party/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +217 -218
  223. package/third_party/libphonenumber/javascript/i18n/phonenumbers/metadata.js +160 -161
  224. package/third_party/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +160 -161
  225. package/third_party/libphonenumber/javascript/i18n/phonenumbers/shortnumbermetadata.js +8 -6
  226. package/third_party/libphonenumber/metadata/metadata.zip +0 -0
  227. package/third_party/libphonenumber/metadata/pom.xml +7 -7
  228. package/third_party/libphonenumber/metadata/src/main/java/com/google/i18n/phonenumbers/metadata/model/NumberingScheme.java +10 -3
  229. package/third_party/libphonenumber/migrator/migrator-servlet/pom.xml +5 -5
  230. package/third_party/libphonenumber/migrator/pom.xml +4 -4
  231. package/third_party/libphonenumber/release_notes.txt +93 -0
  232. package/third_party/libphonenumber/resources/PhoneNumberAlternateFormats.xml +1 -1
  233. package/third_party/libphonenumber/resources/PhoneNumberMetadata.xml +532 -620
  234. package/third_party/libphonenumber/resources/ShortNumberMetadata.xml +16 -4
  235. package/third_party/libphonenumber/resources/carrier/en/212.txt +1 -0
  236. package/third_party/libphonenumber/resources/carrier/en/216.txt +2 -6
  237. package/third_party/libphonenumber/resources/carrier/en/221.txt +1 -1
  238. package/third_party/libphonenumber/resources/carrier/en/228.txt +6 -6
  239. package/third_party/libphonenumber/resources/carrier/en/229.txt +5 -4
  240. package/third_party/libphonenumber/resources/carrier/en/230.txt +1 -0
  241. package/third_party/libphonenumber/resources/carrier/en/237.txt +6 -1
  242. package/third_party/libphonenumber/resources/carrier/en/250.txt +1 -0
  243. package/third_party/libphonenumber/resources/carrier/en/262.txt +36 -38
  244. package/third_party/libphonenumber/resources/carrier/en/30.txt +1 -0
  245. package/third_party/libphonenumber/resources/carrier/en/371.txt +5 -0
  246. package/third_party/libphonenumber/resources/carrier/en/385.txt +1 -0
  247. package/third_party/libphonenumber/resources/carrier/en/389.txt +1 -0
  248. package/third_party/libphonenumber/resources/carrier/en/39.txt +3 -0
  249. package/third_party/libphonenumber/resources/carrier/en/40.txt +1 -0
  250. package/third_party/libphonenumber/resources/carrier/en/41.txt +15 -3
  251. package/third_party/libphonenumber/resources/carrier/en/423.txt +2 -0
  252. package/third_party/libphonenumber/resources/carrier/en/43.txt +1 -0
  253. package/third_party/libphonenumber/resources/carrier/en/45.txt +9 -8
  254. package/third_party/libphonenumber/resources/carrier/en/46.txt +12 -14
  255. package/third_party/libphonenumber/resources/carrier/en/47.txt +0 -2
  256. package/third_party/libphonenumber/resources/carrier/en/49.txt +1 -1
  257. package/third_party/libphonenumber/resources/carrier/en/502.txt +1 -0
  258. package/third_party/libphonenumber/resources/carrier/en/503.txt +21 -2
  259. package/third_party/libphonenumber/resources/carrier/en/51.txt +2 -0
  260. package/third_party/libphonenumber/resources/carrier/en/53.txt +1 -0
  261. package/third_party/libphonenumber/resources/carrier/en/56.txt +1 -0
  262. package/third_party/libphonenumber/resources/carrier/en/57.txt +5 -0
  263. package/third_party/libphonenumber/resources/carrier/en/592.txt +21 -7
  264. package/third_party/libphonenumber/resources/carrier/en/60.txt +1 -0
  265. package/third_party/libphonenumber/resources/carrier/en/61.txt +4 -0
  266. package/third_party/libphonenumber/resources/carrier/en/64.txt +8 -0
  267. package/third_party/libphonenumber/resources/carrier/en/65.txt +8 -1
  268. package/third_party/libphonenumber/resources/carrier/en/683.txt +2 -0
  269. package/third_party/libphonenumber/resources/carrier/en/81.txt +14 -8
  270. package/third_party/libphonenumber/resources/carrier/en/82.txt +1 -0
  271. package/third_party/libphonenumber/resources/carrier/en/84.txt +2 -0
  272. package/third_party/libphonenumber/resources/carrier/en/852.txt +49 -35
  273. package/third_party/libphonenumber/resources/carrier/en/853.txt +5 -0
  274. package/third_party/libphonenumber/resources/carrier/en/86.txt +1 -1
  275. package/third_party/libphonenumber/resources/carrier/en/90.txt +2 -1
  276. package/third_party/libphonenumber/resources/carrier/en/92.txt +1 -0
  277. package/third_party/libphonenumber/resources/carrier/en/966.txt +1 -0
  278. package/third_party/libphonenumber/resources/carrier/en/972.txt +3 -2
  279. package/third_party/libphonenumber/resources/carrier/en/973.txt +3 -0
  280. package/third_party/libphonenumber/resources/carrier/en/992.txt +19 -5
  281. package/third_party/libphonenumber/resources/carrier/en/995.txt +1 -6
  282. package/third_party/libphonenumber/resources/carrier/en/996.txt +1 -0
  283. package/third_party/libphonenumber/resources/carrier/en/998.txt +1 -11
  284. package/third_party/libphonenumber/resources/carrier/ko/82.txt +1 -0
  285. package/third_party/libphonenumber/resources/carrier/zh/852.txt +49 -35
  286. package/third_party/libphonenumber/resources/carrier/zh/86.txt +1 -1
  287. package/third_party/libphonenumber/resources/geocoding/en/1.txt +5 -0
  288. package/third_party/libphonenumber/resources/geocoding/en/212.txt +13 -6
  289. package/third_party/libphonenumber/resources/geocoding/en/267.txt +1 -0
  290. package/third_party/libphonenumber/resources/geocoding/en/299.txt +1 -0
  291. package/third_party/libphonenumber/resources/geocoding/en/44.txt +15 -1
  292. package/third_party/libphonenumber/resources/geocoding/en/52.txt +1 -0
  293. package/third_party/libphonenumber/resources/geocoding/en/53.txt +1 -0
  294. package/third_party/libphonenumber/resources/geocoding/en/598.txt +1 -9
  295. package/third_party/libphonenumber/resources/geocoding/en/61.txt +19 -47
  296. package/third_party/libphonenumber/resources/geocoding/en/975.txt +3 -1
  297. package/third_party/libphonenumber/resources/geocoding/es/52.txt +1 -0
  298. package/third_party/libphonenumber/resources/geocoding/fr/212.txt +13 -6
  299. package/third_party/libphonenumber/resources/metadata/1/ranges.csv +9 -3
  300. package/third_party/libphonenumber/resources/metadata/20/formats.csv +1 -0
  301. package/third_party/libphonenumber/resources/metadata/20/ranges.csv +4 -4
  302. package/third_party/libphonenumber/resources/metadata/212/formats.csv +0 -1
  303. package/third_party/libphonenumber/resources/metadata/212/ranges.csv +106 -115
  304. package/third_party/libphonenumber/resources/metadata/216/operators.csv +0 -1
  305. package/third_party/libphonenumber/resources/metadata/216/ranges.csv +2 -1
  306. package/third_party/libphonenumber/resources/metadata/221/operators.csv +1 -1
  307. package/third_party/libphonenumber/resources/metadata/221/ranges.csv +1 -1
  308. package/third_party/libphonenumber/resources/metadata/228/operators.csv +1 -0
  309. package/third_party/libphonenumber/resources/metadata/228/ranges.csv +3 -2
  310. package/third_party/libphonenumber/resources/metadata/229/operators.csv +5 -5
  311. package/third_party/libphonenumber/resources/metadata/229/ranges.csv +58 -58
  312. package/third_party/libphonenumber/resources/metadata/230/ranges.csv +2 -1
  313. package/third_party/libphonenumber/resources/metadata/237/ranges.csv +2 -1
  314. package/third_party/libphonenumber/resources/metadata/250/operators.csv +5 -4
  315. package/third_party/libphonenumber/resources/metadata/250/ranges.csv +10 -9
  316. package/third_party/libphonenumber/resources/metadata/252/ranges.csv +1 -0
  317. package/third_party/libphonenumber/resources/metadata/256/ranges.csv +1 -2
  318. package/third_party/libphonenumber/resources/metadata/262/examples.csv +2 -0
  319. package/third_party/libphonenumber/resources/metadata/262/operators.csv +1 -1
  320. package/third_party/libphonenumber/resources/metadata/262/ranges.csv +22 -21
  321. package/third_party/libphonenumber/resources/metadata/267/ranges.csv +3 -2
  322. package/third_party/libphonenumber/resources/metadata/27/ranges.csv +24 -19
  323. package/third_party/libphonenumber/resources/metadata/299/ranges.csv +3 -2
  324. package/third_party/libphonenumber/resources/metadata/299/shortcodes.csv +4 -2
  325. package/third_party/libphonenumber/resources/metadata/30/ranges.csv +2 -1
  326. package/third_party/libphonenumber/resources/metadata/33/ranges.csv +31 -69
  327. package/third_party/libphonenumber/resources/metadata/353/ranges.csv +59 -70
  328. package/third_party/libphonenumber/resources/metadata/371/ranges.csv +2 -1
  329. package/third_party/libphonenumber/resources/metadata/372/ranges.csv +2 -1
  330. package/third_party/libphonenumber/resources/metadata/374/ranges.csv +1 -1
  331. package/third_party/libphonenumber/resources/metadata/385/operators.csv +1 -0
  332. package/third_party/libphonenumber/resources/metadata/385/ranges.csv +3 -0
  333. package/third_party/libphonenumber/resources/metadata/389/ranges.csv +2 -1
  334. package/third_party/libphonenumber/resources/metadata/39/operators.csv +1 -0
  335. package/third_party/libphonenumber/resources/metadata/39/ranges.csv +5 -1
  336. package/third_party/libphonenumber/resources/metadata/40/ranges.csv +2 -0
  337. package/third_party/libphonenumber/resources/metadata/41/operators.csv +3 -1
  338. package/third_party/libphonenumber/resources/metadata/41/ranges.csv +37 -34
  339. package/third_party/libphonenumber/resources/metadata/423/ranges.csv +2 -1
  340. package/third_party/libphonenumber/resources/metadata/43/operators.csv +1 -0
  341. package/third_party/libphonenumber/resources/metadata/43/ranges.csv +2 -1
  342. package/third_party/libphonenumber/resources/metadata/44/ranges.csv +1 -0
  343. package/third_party/libphonenumber/resources/metadata/45/operators.csv +1 -0
  344. package/third_party/libphonenumber/resources/metadata/45/ranges.csv +6 -2
  345. package/third_party/libphonenumber/resources/metadata/46/operators.csv +1 -0
  346. package/third_party/libphonenumber/resources/metadata/46/ranges.csv +9 -4
  347. package/third_party/libphonenumber/resources/metadata/47/ranges.csv +0 -3
  348. package/third_party/libphonenumber/resources/metadata/48/ranges.csv +1 -1
  349. package/third_party/libphonenumber/resources/metadata/49/operators.csv +1 -1
  350. package/third_party/libphonenumber/resources/metadata/49/ranges.csv +1 -2
  351. package/third_party/libphonenumber/resources/metadata/502/ranges.csv +1 -0
  352. package/third_party/libphonenumber/resources/metadata/503/operators.csv +1 -0
  353. package/third_party/libphonenumber/resources/metadata/503/ranges.csv +133 -248
  354. package/third_party/libphonenumber/resources/metadata/507/ranges.csv +2 -2
  355. package/third_party/libphonenumber/resources/metadata/508/ranges.csv +2 -1
  356. package/third_party/libphonenumber/resources/metadata/51/ranges.csv +2 -2
  357. package/third_party/libphonenumber/resources/metadata/52/ranges.csv +1 -0
  358. package/third_party/libphonenumber/resources/metadata/53/ranges.csv +2 -0
  359. package/third_party/libphonenumber/resources/metadata/54/ranges.csv +3 -1
  360. package/third_party/libphonenumber/resources/metadata/56/ranges.csv +2 -1
  361. package/third_party/libphonenumber/resources/metadata/57/operators.csv +2 -0
  362. package/third_party/libphonenumber/resources/metadata/57/ranges.csv +5 -2
  363. package/third_party/libphonenumber/resources/metadata/590/ranges.csv +2 -1
  364. package/third_party/libphonenumber/resources/metadata/592/examples.csv +1 -0
  365. package/third_party/libphonenumber/resources/metadata/592/operators.csv +5 -3
  366. package/third_party/libphonenumber/resources/metadata/592/ranges.csv +94 -82
  367. package/third_party/libphonenumber/resources/metadata/594/ranges.csv +3 -2
  368. package/third_party/libphonenumber/resources/metadata/596/ranges.csv +4 -2
  369. package/third_party/libphonenumber/resources/metadata/598/formats.csv +7 -6
  370. package/third_party/libphonenumber/resources/metadata/598/ranges.csv +37 -35
  371. package/third_party/libphonenumber/resources/metadata/60/ranges.csv +1 -0
  372. package/third_party/libphonenumber/resources/metadata/61/ranges.csv +23 -42
  373. package/third_party/libphonenumber/resources/metadata/64/examples.csv +0 -1
  374. package/third_party/libphonenumber/resources/metadata/64/ranges.csv +9 -6
  375. package/third_party/libphonenumber/resources/metadata/65/operators.csv +0 -1
  376. package/third_party/libphonenumber/resources/metadata/65/ranges.csv +6 -2
  377. package/third_party/libphonenumber/resources/metadata/683/ranges.csv +2 -0
  378. package/third_party/libphonenumber/resources/metadata/81/comments.csv +2 -0
  379. package/third_party/libphonenumber/resources/metadata/81/operators.csv +6 -5
  380. package/third_party/libphonenumber/resources/metadata/81/ranges.csv +979 -975
  381. package/third_party/libphonenumber/resources/metadata/81/shortcodes.csv +7 -6
  382. package/third_party/libphonenumber/resources/metadata/82/ranges.csv +1 -0
  383. package/third_party/libphonenumber/resources/metadata/84/ranges.csv +11 -9
  384. package/third_party/libphonenumber/resources/metadata/852/operators.csv +16 -18
  385. package/third_party/libphonenumber/resources/metadata/852/ranges.csv +224 -230
  386. package/third_party/libphonenumber/resources/metadata/853/ranges.csv +1 -2
  387. package/third_party/libphonenumber/resources/metadata/86/ranges.csv +3 -2
  388. package/third_party/libphonenumber/resources/metadata/880/comments.csv +1 -0
  389. package/third_party/libphonenumber/resources/metadata/880/ranges.csv +1 -0
  390. package/third_party/libphonenumber/resources/metadata/881/formats.csv +3 -2
  391. package/third_party/libphonenumber/resources/metadata/881/ranges.csv +6 -5
  392. package/third_party/libphonenumber/resources/metadata/883/ranges.csv +1 -0
  393. package/third_party/libphonenumber/resources/metadata/90/operators.csv +1 -0
  394. package/third_party/libphonenumber/resources/metadata/90/ranges.csv +2 -1
  395. package/third_party/libphonenumber/resources/metadata/92/ranges.csv +2 -0
  396. package/third_party/libphonenumber/resources/metadata/966/ranges.csv +1 -0
  397. package/third_party/libphonenumber/resources/metadata/968/ranges.csv +1 -1
  398. package/third_party/libphonenumber/resources/metadata/972/operators.csv +1 -0
  399. package/third_party/libphonenumber/resources/metadata/972/ranges.csv +6 -7
  400. package/third_party/libphonenumber/resources/metadata/973/operators.csv +1 -0
  401. package/third_party/libphonenumber/resources/metadata/973/ranges.csv +8 -1
  402. package/third_party/libphonenumber/resources/metadata/975/ranges.csv +4 -3
  403. package/third_party/libphonenumber/resources/metadata/992/operators.csv +6 -6
  404. package/third_party/libphonenumber/resources/metadata/992/ranges.csv +104 -102
  405. package/third_party/libphonenumber/resources/metadata/995/ranges.csv +4 -1
  406. package/third_party/libphonenumber/resources/metadata/996/operators.csv +9 -8
  407. package/third_party/libphonenumber/resources/metadata/996/ranges.csv +94 -93
  408. package/third_party/libphonenumber/resources/metadata/998/ranges.csv +2 -17
  409. package/third_party/libphonenumber/resources/metadata/metadata.csv +1 -1
  410. package/third_party/libphonenumber/resources/timezones/map_data.txt +10 -2
  411. package/third_party/libphonenumber/tools/cpp/CMakeLists.txt +0 -5
  412. package/third_party/libphonenumber/tools/java/common/pom.xml +3 -3
  413. package/third_party/libphonenumber/tools/java/cpp-build/pom.xml +6 -6
  414. package/third_party/libphonenumber/tools/java/cpp-build/target/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
  415. package/third_party/libphonenumber/tools/java/data/pom.xml +2 -2
  416. package/third_party/libphonenumber/tools/java/java-build/pom.xml +2 -2
  417. package/third_party/libphonenumber/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
  418. package/third_party/libphonenumber/java/lib/junit-4.13.1.jar +0 -0
  419. 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
+ }