Android 聯絡人在中文,繁體,和English語言切換時,中文聯絡人排序顯示亂碼
阿新 • • 發佈:2019-01-08
- alps/packages/providers/ContactsProvider/src/com/android/providers/contacts/LocaleSet.java
--- a/alps/packages/providers/ContactsProvider/src/com/android/providers/contacts/LocaleSet.java +++ b/alps/packages/providers/ContactsProvider/src/com/android/providers/contacts/LocaleSet.java @@ -29,6 +29,8 @@ public class LocaleSet { private static final String SCRIPT_SIMPLIFIED_CHINESE = "Hans"; private static final String SCRIPT_TRADITIONAL_CHINESE = "Hant"; + private static final String CHINESE_LANGUAGE = Locale.CHINESE.getLanguage().toLowerCase(); private final Locale mDefaultLocaleOverrideForTest; private final LocaleList mLocaleList; @@ -78,6 +80,48 @@ public class LocaleSet { } } + public boolean isSecondaryLocaleTraditionalChinese() { + Locale secondaryLocale = mLocaleList.get(1); + if (secondaryLocale != null) { + android.util.Log.d("hengxu","secondaryLocaleTW:" + secondaryLocale.toString()); + } + + // language must match + if (secondaryLocale == null || !TextUtils.equals(secondaryLocale.getLanguage(), CHINESE_LANGUAGE)) { + return false; + } + // script is optional but if present must match + if (!TextUtils.isEmpty(secondaryLocale.getScript())) { + return secondaryLocale.getScript().equals(SCRIPT_TRADITIONAL_CHINESE); + } + // if no script, must match known country + return secondaryLocale.equals(Locale.TRADITIONAL_CHINESE); + } + + public boolean isSecondaryLocaleTraditionalChineseInHK() { + Locale secondaryLocale = mLocaleList.get(1); + if (secondaryLocale != null) { + android.util.Log.d("hengxu","secondaryLocaleHK:" + secondaryLocale.toString()); + } + + // language must match + if (secondaryLocale == null || !TextUtils.equals(secondaryLocale.getLanguage(), CHINESE_LANGUAGE)) { + return false; + } + // script is optional but if present must match + if (!TextUtils.isEmpty(secondaryLocale.getScript())) { + return secondaryLocale.getScript().equals(SCRIPT_TRADITIONAL_CHINESE); + } + // if no script, must match known country + return secondaryLocale.toString().equals("zh_HK"); + } + + public boolean isPrimaryLocaleChinese() { + return isLanguageChinese(getPrimaryLocale()); + } + /** * @return the script if the language is Chinese, and otherwise null. */ @@ -137,9 +181,13 @@ public class LocaleSet { * @return true if simplified Chinese is found before Japanese or traditional Chinese. */ public boolean shouldPreferSimplifiedChinese() { - if (/*isLocaleSimplifiedChinese(getPrimaryLocale())*/isPrimaryLocaleChinese() || isSecondaryLocaleTraditionalChinese() + if (/*isLocaleSimplifiedChinese(getPrimaryLocale())*/isLanguageJapanese(getPrimaryLocale()) || isPrimaryLocaleChinese() || isSecondaryLocaleTraditionalChinese() || isSecondaryLocaleTraditionalChineseInHK()) { return true; } for (int i = 0; i < mLocaleList.size(); i++) { final Locale l = mLocaleList.get(i); @@ -194,7 +194,7 @@ public class LocaleSet { return true; } if (isLanguageJapanese(l)) { - return false; + return true; } if (isLocaleTraditionalChinese(l)) { // Traditional chinese wins here. return false;