- The same item now doesn't recreate the activity
- The app context now contains the right locale
pull/600/head
Mihai Branescu 5 years ago committed by Jeff Boek
parent 5f4f3dfb90
commit d7daf57265

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

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

Loading…
Cancel
Save