|
@@ -30,6 +30,12 @@ object LocaleHelper {
|
|
|
*/
|
|
|
private var appLocale = getLocaleFromString(preferences.lang())
|
|
|
|
|
|
+ /**
|
|
|
+ * The currently applied locale. Used to avoid losing the selected language after a non locale
|
|
|
+ * configuration change to the application.
|
|
|
+ */
|
|
|
+ private var currentLocale: Locale? = null
|
|
|
+
|
|
|
/**
|
|
|
* Returns the locale for the value stored in preferences, or null if it's system language.
|
|
|
*
|
|
@@ -72,15 +78,16 @@ object LocaleHelper {
|
|
|
if (systemLocale == null) {
|
|
|
systemLocale = getConfigLocale(config)
|
|
|
}
|
|
|
- // In API 16 and lower the system locale can't be changed.
|
|
|
+ // In API 16 and lower [systemLocale] can't be changed.
|
|
|
if (configChange && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
|
|
- val newLocale = getConfigLocale(config)
|
|
|
- if (systemLocale == newLocale) {
|
|
|
+ val configLocale = getConfigLocale(config)
|
|
|
+ if (currentLocale == configLocale) {
|
|
|
return
|
|
|
}
|
|
|
- systemLocale = newLocale
|
|
|
+ systemLocale = configLocale
|
|
|
}
|
|
|
- val newConfig = updateConfigLocale(config, appLocale ?: systemLocale ?: Locale.getDefault())
|
|
|
+ currentLocale = appLocale ?: systemLocale ?: Locale.getDefault()
|
|
|
+ val newConfig = updateConfigLocale(config, currentLocale!!)
|
|
|
val resources = app.resources
|
|
|
resources.updateConfiguration(newConfig, resources.displayMetrics)
|
|
|
}
|