diff --git a/android/app/src/main/java/app/organicmaps/editor/LanguagesFragment.java b/android/app/src/main/java/app/organicmaps/editor/LanguagesFragment.java index 75ee40a7f..1355ad4a7 100644 --- a/android/app/src/main/java/app/organicmaps/editor/LanguagesFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/LanguagesFragment.java @@ -1,7 +1,10 @@ package app.organicmaps.editor; +import android.content.res.Configuration; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.core.os.ConfigurationCompat; +import androidx.core.os.LocaleListCompat; import androidx.fragment.app.Fragment; import app.organicmaps.base.BaseMwmRecyclerFragment; import app.organicmaps.sdk.editor.Editor; @@ -11,6 +14,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; public class LanguagesFragment extends BaseMwmRecyclerFragment @@ -32,10 +36,23 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment Set existingLanguages = args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>(); + Configuration config = requireContext().getResources().getConfiguration(); + LocaleListCompat systemLocales = ConfigurationCompat.getLocales(config); + List languages = new ArrayList<>(); + List systemLanguages = new ArrayList<>(); + for (Language lang : Editor.nativeGetSupportedLanguages(false)) { - if (existingLanguages.contains(lang.code)) + // Separately extract system languages + for (int i = 0; i < systemLocales.size(); i++) + { + Locale locale = systemLocales.get(i); + if (locale != null && locale.getLanguage().equals(lang.code)) + systemLanguages.add(lang); + } + + if (existingLanguages.contains(lang.code) || systemLanguages.contains(lang)) continue; languages.add(lang); @@ -43,6 +60,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment Collections.sort(languages, Comparator.comparing(lhs -> lhs.name)); + languages.addAll(0, systemLanguages); + return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()])); }