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) +}