From 93ed97d91597368017a82bccb42ed6f4a22fbafb Mon Sep 17 00:00:00 2001 From: Joshua Lin Date: Sun, 2 Sep 2018 18:11:11 +0800 Subject: [PATCH 1/3] Distinguish zh_CN/zh_TW by Locale country and script in getCCPLanguageFromLocale() --- .../java/com/hbb20/CountryCodePicker.java | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/ccp/src/main/java/com/hbb20/CountryCodePicker.java b/ccp/src/main/java/com/hbb20/CountryCodePicker.java index 1f8c8b4a..fbb1315f 100644 --- a/ccp/src/main/java/com/hbb20/CountryCodePicker.java +++ b/ccp/src/main/java/com/hbb20/CountryCodePicker.java @@ -657,7 +657,17 @@ private Language getCCPLanguageFromLocale() { Log.d(TAG, "getCCPLanguageFromLocale: current locale language" + currentLocale.getLanguage()); for (Language language : Language.values()) { if (language.getCode().equalsIgnoreCase(currentLocale.getLanguage())) { - return language; + + if (language.getCountry() == null + || language.getCountry().equalsIgnoreCase(currentLocale.getCountry())) + return language; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (language.getScript() == null + || language.getScript().equalsIgnoreCase(currentLocale.getScript())) + return language; + + } } } return null; @@ -2127,8 +2137,8 @@ public void setHintExampleNumberType(PhoneNumberType hintExampleNumberType) { public enum Language { ARABIC("ar"), BENGALI("bn"), - CHINESE_SIMPLIFIED("zh"), - CHINESE_TRADITIONAL("zh"), + CHINESE_SIMPLIFIED("zh", "CN", "Hans"), + CHINESE_TRADITIONAL("zh", "TW", "Hant"), DUTCH("nl"), ENGLISH("en"), FARSI("fa"), @@ -2151,7 +2161,15 @@ public enum Language { TURKISH("tr"), UKRAINIAN("uk"); - String code; + private String code; + private String country; + private String script; + + Language(String code, String country, String script) { + this.code = code; + this.country = country; + this.script = script; + } Language(String code) { this.code = code; @@ -2164,6 +2182,22 @@ public String getCode() { public void setCode(String code) { this.code = code; } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getScript() { + return script; + } + + public void setScript(String script) { + this.script = script; + } } public enum PhoneNumberType { From 8ddb2b8fe33bfaf3083a59129b72fe6da1b44d6b Mon Sep 17 00:00:00 2001 From: Joshua Lin Date: Tue, 11 Sep 2018 20:40:04 +0800 Subject: [PATCH 2/3] open CountryCodePicker.getLanguageToApply to public --- ccp/src/main/java/com/hbb20/CountryCodePicker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccp/src/main/java/com/hbb20/CountryCodePicker.java b/ccp/src/main/java/com/hbb20/CountryCodePicker.java index fbb1315f..c6662725 100644 --- a/ccp/src/main/java/com/hbb20/CountryCodePicker.java +++ b/ccp/src/main/java/com/hbb20/CountryCodePicker.java @@ -852,7 +852,7 @@ private PhoneNumberUtil.PhoneNumberType getSelectedHintNumberType() { } } - Language getLanguageToApply() { + public Language getLanguageToApply() { if (languageToApply == null) { updateLanguageToApply(); } From 54893587b734d1f8f9475cf3f303243438cb87d3 Mon Sep 17 00:00:00 2001 From: Joshua Lin Date: Sun, 30 Sep 2018 22:39:27 +0800 Subject: [PATCH 3/3] add feature scroll dialog to specified country --- ccp/src/main/java/com/hbb20/CountryCodeDialog.java | 14 ++++++++++++++ ccp/src/main/java/com/hbb20/CountryCodePicker.java | 10 +++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ccp/src/main/java/com/hbb20/CountryCodeDialog.java b/ccp/src/main/java/com/hbb20/CountryCodeDialog.java index 6b53756a..7f375bbf 100644 --- a/ccp/src/main/java/com/hbb20/CountryCodeDialog.java +++ b/ccp/src/main/java/com/hbb20/CountryCodeDialog.java @@ -30,6 +30,11 @@ */ class CountryCodeDialog { public static void openCountryCodeDialog(final CountryCodePicker codePicker) { + openCountryCodeDialog(codePicker, null); + } + + public static void + openCountryCodeDialog(final CountryCodePicker codePicker, final String countryNameCode) { final Context context = codePicker.getContext(); final Dialog dialog = new Dialog(context); codePicker.refreshCustomMasterList(); @@ -178,6 +183,15 @@ public void onCancel(DialogInterface dialogInterface) { } }); + if (countryNameCode != null) { + for (int i = 0; i < masterCountries.size(); i++) { + if (masterCountries.get(i).nameCode.equals(countryNameCode)) { + recyclerView_countryDialog.scrollToPosition(i); + break; + } + } + } + dialog.show(); if (codePicker.getDialogEventsListener() != null) { codePicker.getDialogEventsListener().onCcpDialogOpen(dialog); diff --git a/ccp/src/main/java/com/hbb20/CountryCodePicker.java b/ccp/src/main/java/com/hbb20/CountryCodePicker.java index c6662725..04fddb12 100644 --- a/ccp/src/main/java/com/hbb20/CountryCodePicker.java +++ b/ccp/src/main/java/com/hbb20/CountryCodePicker.java @@ -1932,7 +1932,15 @@ public void setPhoneNumberValidityChangeListener(FailureListener failureListener * Developer can use this to trigger manually. */ public void launchCountrySelectionDialog() { - CountryCodeDialog.openCountryCodeDialog(codePicker); + launchCountrySelectionDialog(null); + } + + /** + * Manually trigger selection dialog and set + * scroll position to specified country. + */ + public void launchCountrySelectionDialog(final String countryNameCode) { + CountryCodeDialog.openCountryCodeDialog(codePicker, countryNameCode); } /**