Set android app language on startup

This commit is contained in:
Syer10
2022-03-11 15:20:43 -05:00
parent 4f3f6e8545
commit 8a26ba2c23
3 changed files with 40 additions and 2 deletions

View File

@@ -10,6 +10,11 @@ plugins {
}
dependencies {
modules {
module("androidx.lifecycle:lifecycle-viewmodel-ktx") {
replacedBy("androidx.lifecycle:lifecycle-viewmodel")
}
}
implementation(projects.core)
implementation(projects.i18n)
implementation(projects.data)

View File

@@ -8,14 +8,18 @@ package ca.gosyer.jui.android
import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import ca.gosyer.core.logging.CKLogger
import ca.gosyer.core.prefs.Preference
import ca.gosyer.core.prefs.getAsFlow
import ca.gosyer.data.ui.model.ThemeMode
import ca.gosyer.jui.android.data.notification.Notifications
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import java.util.Locale
class App : Application(), DefaultLifecycleObserver {
@@ -43,6 +47,8 @@ class App : Application(), DefaultLifecycleObserver {
)
}
.launchIn(ProcessLifecycleOwner.get().lifecycleScope)
setupAppLanguage(appComponent.dataComponent.uiPreferences.language())
}
private fun setupNotificationChannels() {
@@ -53,5 +59,32 @@ class App : Application(), DefaultLifecycleObserver {
}
}
private fun setupAppLanguage(languagePref: Preference<String>) {
val defaultLocaleList = AppCompatDelegate.getApplicationLocales()
if (languagePref.isSet() && languagePref.defaultValue() != languagePref.get()) {
AppCompatDelegate.setApplicationLocales(
LocaleListCompat.create(
Locale.forLanguageTag(languagePref.get()),
Locale.forLanguageTag("en")
)
)
}
languagePref
.changes()
.onEach {
if (languagePref.isSet() && languagePref.defaultValue() != it) {
AppCompatDelegate.setApplicationLocales(
LocaleListCompat.create(
Locale.forLanguageTag(it),
Locale.forLanguageTag("en")
)
)
} else if (languagePref.isSet() && it == languagePref.defaultValue()) {
AppCompatDelegate.setApplicationLocales(defaultLocaleList)
}
}
.launchIn(ProcessLifecycleOwner.get().lifecycleScope)
}
protected companion object : CKLogger({})
}

View File

@@ -15,12 +15,12 @@ materialDialogs = "0.6.6"
# Android
core = "1.7.0"
appCompat = "1.4.1"
appCompat = "1.6.0-alpha01"
activityCompose = "1.4.0"
work = "2.6.0"
# Android Lifecycle
lifecycle = "2.4.1"
lifecycle = "2.5.0-alpha03"
# Swing
darklaf = "2.7.3"