mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-27 14:40:22 +00:00
Update system default language when switching.
This commit is contained in:
@@ -2,8 +2,10 @@ package org.thoughtcrime.securesms.util.dynamiclanguage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.os.LocaleListCompat;
|
||||
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
|
||||
@@ -15,7 +17,14 @@ import java.util.Locale;
|
||||
public final class DynamicLanguageContextWrapper {
|
||||
private DynamicLanguageContextWrapper() {}
|
||||
|
||||
private static LocaleListCompat systemLocaleList = LocaleListCompat.getEmptyLocaleList();
|
||||
|
||||
public static void prepareOverrideConfiguration(@NonNull Context context, @NonNull Configuration base) {
|
||||
if (Build.VERSION.SDK_INT >= 24) {
|
||||
systemLocaleList = LocaleListCompat.wrap(base.getLocales());
|
||||
} else {
|
||||
systemLocaleList = LocaleListCompat.create(base.locale);
|
||||
}
|
||||
Locale newLocale = getUsersSelectedLocale(context);
|
||||
|
||||
Locale.setDefault(newLocale);
|
||||
@@ -25,7 +34,7 @@ public final class DynamicLanguageContextWrapper {
|
||||
@SuppressWarnings("deprecated")
|
||||
public static @NonNull Locale getUsersSelectedLocale(@NonNull Context context) {
|
||||
String language = TextSecurePreferences.getLanguage(context);
|
||||
return LocaleParser.findBestMatchingLocaleForLanguage(language);
|
||||
return LocaleParser.findBestMatchingLocaleForLanguage(language, systemLocaleList);
|
||||
}
|
||||
|
||||
public static void updateContext(@NonNull Context base) {
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package org.thoughtcrime.securesms.util.dynamiclanguage;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.os.LocaleListCompat;
|
||||
@@ -21,12 +18,13 @@ final class LocaleParser {
|
||||
* Given a language, gets the best choice from the apps list of supported languages and the
|
||||
* Systems set of languages.
|
||||
*/
|
||||
static @NonNull Locale findBestMatchingLocaleForLanguage(@Nullable String language) {
|
||||
static @NonNull Locale findBestMatchingLocaleForLanguage(@Nullable String language, @NonNull LocaleListCompat systemLocaleList) {
|
||||
final Locale locale = LanguageString.parseLocale(language);
|
||||
if (appSupportsTheExactLocale(locale)) {
|
||||
return locale;
|
||||
} else {
|
||||
return findBestSystemLocale();
|
||||
final Locale firstMatch = systemLocaleList.getFirstMatch(BuildConfig.LANGUAGES);
|
||||
return firstMatch != null ? firstMatch : Locale.ENGLISH;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,24 +34,4 @@ final class LocaleParser {
|
||||
}
|
||||
return Arrays.asList(BuildConfig.LANGUAGES).contains(locale.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first preferred language the app supports.
|
||||
*/
|
||||
private static @NonNull Locale findBestSystemLocale() {
|
||||
LocaleListCompat localeList;
|
||||
if (Build.VERSION.SDK_INT < 24) {
|
||||
localeList = LocaleListCompat.create(Resources.getSystem().getConfiguration().locale);
|
||||
} else {
|
||||
localeList = LocaleListCompat.getAdjustedDefault();
|
||||
}
|
||||
|
||||
final Locale firstMatch = localeList.getFirstMatch(BuildConfig.LANGUAGES);
|
||||
|
||||
if (firstMatch != null) {
|
||||
return firstMatch;
|
||||
}
|
||||
|
||||
return Locale.ENGLISH;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user