1
0
Fork 0

For #7559 - fixes 2 issues:

- The same item now doesn't recreate the activity
- The app context now contains the right locale
master
Mihai Branescu 2020-01-27 15:41:30 +02:00 committed by Jeff Boek
parent 1b7cb117ca
commit 2a876d5e0f
2 changed files with 19 additions and 1 deletions

View File

@ -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()
}

View File

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