improved locale logic

This commit is contained in:
Bnyro 2022-11-06 10:02:45 +01:00
parent 2760257c26
commit 6059f877f1

View File

@ -1,6 +1,8 @@
package com.github.libretube.util package com.github.libretube.util
import android.content.Context import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.os.Build import android.os.Build
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
@ -11,32 +13,35 @@ object LocaleHelper {
fun updateLanguage(context: Context) { fun updateLanguage(context: Context) {
val languageName = PreferenceHelper.getString(PreferenceKeys.LANGUAGE, "sys") val languageName = PreferenceHelper.getString(PreferenceKeys.LANGUAGE, "sys")
if (languageName == "sys") { val locale = when {
updateLocaleConf(context, Locale.getDefault()) languageName == "sys" -> Locale.getDefault()
} else if (languageName.contains("-") == true) { languageName.contains("-") == true -> {
val languageParts = languageName.split("-") val languageParts = languageName.split("-")
val locale = Locale( Locale(
languageParts[0], languageParts[0],
languageParts[1] languageParts[1].replace("r", "")
) )
updateLocaleConf(context, locale) }
} else { else -> Locale(languageName)
val locale = Locale(languageName)
updateLocaleConf(context, locale)
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) updateResources(context, locale)
updateResourcesLegacy(context, locale)
} }
private fun updateLocaleConf(context: Context, locale: Locale) { private fun updateResources(context: Context, locale: Locale) {
// Change API Language
Locale.setDefault(locale) Locale.setDefault(locale)
val configuration: Configuration = context.resources.configuration
configuration.setLocale(locale)
context.createConfigurationContext(configuration)
}
// Change App Language @Suppress("DEPRECATION")
val res = context.resources private fun updateResourcesLegacy(context: Context, locale: Locale) {
val dm = res.displayMetrics Locale.setDefault(locale)
val conf = res.configuration val resources: Resources = context.resources
conf.setLocale(locale) val configuration: Configuration = resources.getConfiguration()
@Suppress("DEPRECATION") configuration.locale = locale
res.updateConfiguration(conf, dm) resources.updateConfiguration(configuration, resources.getDisplayMetrics())
} }
fun getDetectedCountry(context: Context, defaultCountryIsoCode: String): String { fun getDetectedCountry(context: Context, defaultCountryIsoCode: String): String {