| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package io.legato.kazusa.base
- import android.annotation.SuppressLint
- import android.app.Activity
- import android.content.Context
- import android.content.res.Configuration
- import android.content.res.Resources
- import android.os.Build
- import android.os.LocaleList
- import io.legato.kazusa.constant.PreferKey
- import io.legato.kazusa.utils.getPrefInt
- import io.legato.kazusa.utils.getPrefString
- import io.legato.kazusa.utils.sysConfiguration
- import java.util.*
- @Suppress("unused")
- object AppContextWrapper {
- fun wrap(context: Context): Context {
- val newConfig = Configuration(context.resources.configuration)
- val targetLocale = getSetLocale(context)
- newConfig.setLocale(targetLocale)
- newConfig.setLocales(LocaleList(targetLocale))
- newConfig.fontScale = getFontScale(context)
- return context.createConfigurationContext(newConfig)
- }
- fun applyLocaleAndFont(activity: Activity) {
- val config = activity.resources.configuration
- val locale = getSetLocale(activity)
- val fontScale = getFontScale(activity)
- val newConfig = Configuration(config)
- newConfig.setLocale(locale)
- newConfig.setLocales(LocaleList(locale))
- newConfig.fontScale = fontScale
- @Suppress("DEPRECATION")
- activity.resources.updateConfiguration(newConfig, activity.resources.displayMetrics)
- }
- fun getFontScale(context: Context): Float {
- var fontScale = context.getPrefInt(PreferKey.fontScale) / 10f
- if (fontScale !in 0.8f..1.6f) {
- fontScale = sysConfiguration.fontScale
- }
- return fontScale
- }
- /**
- * 当前系统语言
- */
- @SuppressLint("ObsoleteSdkInt")
- private fun getSystemLocale(): Locale {
- val locale: Locale
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //7.0有多语言设置获取顶部的语言
- locale = sysConfiguration.locales.get(0)
- } else {
- @Suppress("DEPRECATION")
- locale = sysConfiguration.locale
- }
- return locale
- }
- /**
- * 当前App语言
- */
- @SuppressLint("ObsoleteSdkInt")
- private fun getAppLocale(context: Context): Locale {
- val locale: Locale
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- locale = context.resources.configuration.locales[0]
- } else {
- @Suppress("DEPRECATION")
- locale = context.resources.configuration.locale
- }
- return locale
- }
- /**
- * 当前设置语言
- */
- private fun getSetLocale(context: Context): Locale {
- return when (context.getPrefString(PreferKey.language)) {
- "zh" -> Locale.SIMPLIFIED_CHINESE
- "tw" -> Locale.TRADITIONAL_CHINESE
- "en" -> Locale.ENGLISH
- else -> getSystemLocale()
- }
- }
- /**
- * 判断App语言和设置语言是否相同
- */
- fun isSameWithSetting(context: Context): Boolean {
- val locale = getAppLocale(context)
- val language = locale.language
- val country = locale.country
- val pfLocale = getSetLocale(context)
- val pfLanguage = pfLocale.language
- val pfCountry = pfLocale.country
- return language == pfLanguage && country == pfCountry
- }
- }
|