package org.glucosio.android.tools; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.support.annotation.NonNull; import android.util.DisplayMetrics; import org.glucosio.android.BuildConfig; import org.glucosio.android.R; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; public class LocaleHelper { private Locale getLocale(String languageTag) { if (languageTag == null) { return getDeviceLocale(); } else { String[] values = languageTag.split("-"); switch (values.length) { case 3: return new Locale(values[0], values[1], values[2]); case 2: return new Locale(values[0], values[1]); default: return new Locale(values[0]); } } } public String getDisplayLanguage(String language) { String languageTag = language.replace("_", "-"); Locale locale = getLocale(languageTag); return locale.getDisplayName(locale); } public void updateLanguage(@NonNull final Context context, @NonNull final String language) { Locale locale = getLocale(language); Resources res = context.getResources(); // Change locale settings in the app. DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); // TODO(raacker): deprecated. change to setLocale(). It needs to be set minSdk to 17. Configure project's minSdk first conf.locale = locale; res.updateConfiguration(conf, dm); Locale.setDefault(locale); } @NonNull public List<String> getLocalesWithTranslation(final Resources resources) { String[] languageList = BuildConfig.TRANSLATION_ARRAY; Set<String> availableLanguagesSet = new HashSet<>(); // Glucosio support English as default availableLanguagesSet.add("en"); String[] translatedLanguages = resources.getStringArray(R.array.available_languages); Set<String> translatedLanguageSet = new HashSet<>(); Collections.addAll(translatedLanguageSet, translatedLanguages); for (String language : languageList) { if (translatedLanguageSet.contains(language)) availableLanguagesSet.add(language); } List<String> availableLanguagesList = new ArrayList<>(availableLanguagesSet); Collections.sort(availableLanguagesList); return availableLanguagesList; } public Locale getDeviceLocale() { // TODO(raacker): deprecated. change to getLocale(). It needs to be set minSdk to 17. Configure project's minSdk first return Resources.getSystem().getConfiguration().locale; } }