From 03168ff99e2fb225581d02dc0d915962181e05a4 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 27 Apr 2017 23:02:34 +0200 Subject: [PATCH] separate index locale preference handling on >= android-24 In android-24 and newer, the user can specify multiple languages in a priority list. Therefore, the locale chooser logic here does not need to work so hard to find a language match. For example, if the user wanted to see country-specific variants, they would add them to the preference list. With older versions of Android, the pref is only a single locale. So chances are that someone who specified de_AT would rather see de or de_DE than en_US. Same goes for es_AR, ar_EG, etc. This could annoy Chinese speakers, since someone who sets zh_TW could potentially see zh_CN, which are written pretty differently. --- .../main/java/org/fdroid/fdroid/data/App.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java index 4e8012817..49ccee5be 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -386,18 +386,27 @@ public class App extends ValueObject implements Comparable, Parcelable { Set locales = localized.keySet(); Set localesToUse = new LinkedHashSet<>(); - if (locales.contains(localeTag)) { - localesToUse.add(localeTag); - } if (Build.VERSION.SDK_INT >= 24) { LocaleList localeList = Resources.getSystem().getConfiguration().getLocales(); - localesToUse.addAll(Arrays.asList(localeList.toLanguageTags().split(","))); - } - for (String toUse : localesToUse) { + for (String toUse : localeList.toLanguageTags().split(",")) { + localesToUse.add(toUse); + for (String l : locales) { + if (l.equals(toUse.split("-")[0])) { + localesToUse.add(l); + break; + } + } + } + } else { + if (locales.contains(localeTag)) { + localesToUse.add(localeTag); + } + if (locales.contains(languageTag)) { + localesToUse.add(languageTag); + } for (String l : locales) { - if (l.startsWith(toUse.split("-")[0])) { + if (l.startsWith(languageTag)) { localesToUse.add(l); - break; } } }