From 2a876d5e0f9a3c615cb95dc01180b9db114d7972 Mon Sep 17 00:00:00 2001 From: Mihai Branescu Date: Mon, 27 Jan 2020 15:41:30 +0200 Subject: [PATCH] For #7559 - fixes 2 issues: - The same item now doesn't recreate the activity - The app context now contains the right locale --- .../advanced/DefaultLocaleSettingsController.kt | 8 +++++++- .../settings/advanced/LocaleManagerExtension.kt | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt index 2bd481c84..43f532861 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt @@ -21,17 +21,23 @@ class DefaultLocaleSettingsController( ) : LocaleSettingsController { override fun handleLocaleSelected(locale: Locale) { - if (localeSettingsStore.state.selectedLocale == locale) { + if (localeSettingsStore.state.selectedLocale == locale && + !LocaleManager.isDefaultLocaleSelected(context)) { return } localeSettingsStore.dispatch(LocaleSettingsAction.Select(locale)) LocaleManager.setNewLocale(context, locale.toLanguageTag()) + LocaleManager.updateBaseConfiguration(context, locale) (context as Activity).recreate() } override fun handleDefaultLocaleSelected() { + if (LocaleManager.isDefaultLocaleSelected(context)) { + return + } localeSettingsStore.dispatch(LocaleSettingsAction.Select(localeSettingsStore.state.localeList[0])) LocaleManager.resetToSystemDefault(context) + LocaleManager.updateBaseConfiguration(context, localeSettingsStore.state.localeList[0]) (context as Activity).recreate() } diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleManagerExtension.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleManagerExtension.kt index aea61b51c..a2e68e7c4 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleManagerExtension.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleManagerExtension.kt @@ -51,3 +51,15 @@ fun LocaleManager.getSelectedLocale( fun LocaleManager.isDefaultLocaleSelected(context: Context): Boolean { return getCurrentLocale(context) == null } + +/** + * Update the locale for the configuration of the app context's resources + */ +@Suppress("DEPRECATION") +fun LocaleManager.updateBaseConfiguration(context: Context, locale: Locale) { + val resources = context.applicationContext.resources + val config = resources.configuration + config.setLocale(locale) + config.setLayoutDirection(locale) + resources.updateConfiguration(config, resources.displayMetrics) +}