Coverage Summary for Class: LanguageStoreImpl (com.vsevolodganin.clicktrack.language)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
LanguageStoreImpl |
0%
(0/3)
|
0%
(0/9)
|
0%
(0/15)
|
4.5%
(4/89)
|
LanguageStoreImpl$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/23)
|
LanguageStoreImpl$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/4)
|
LanguageStoreImpl$special$$inlined$doOnResume$default$1 |
0%
(0/2)
|
|
LanguageStoreImpl$WhenMappings |
|
Total |
0%
(0/7)
|
0%
(0/9)
|
0%
(0/17)
|
3.4%
(4/116)
|
package com.vsevolodganin.clicktrack.language
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import com.arkivanov.essenty.lifecycle.LifecycleOwner
import com.arkivanov.essenty.lifecycle.doOnResume
import com.vsevolodganin.clicktrack.di.component.MainControllerScope
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import me.tatarka.inject.annotations.Inject
@OptIn(DelicateCoroutinesApi::class)
@MainControllerScope
@Inject
class LanguageStoreImpl(lifecycleOwner: LifecycleOwner) : LanguageStore {
override val appLanguage: MutableStateFlow<AppLanguage> = MutableStateFlow(storedAppLanguage)
init {
GlobalScope.launch(context = Dispatchers.Unconfined, start = CoroutineStart.UNDISPATCHED) {
appLanguage.collect {
storedAppLanguage = it
}
}
lifecycleOwner.lifecycle.doOnResume {
appLanguage.value = storedAppLanguage
}
}
private var storedAppLanguage: AppLanguage
set(value) {
val appLocale = when (value) {
AppLanguage.SYSTEM -> LocaleListCompat.getEmptyLocaleList()
AppLanguage.ENGLISH -> LocaleListCompat.create(LOCALE_EN)
AppLanguage.RUSSIAN -> LocaleListCompat.create(LOCALE_RU)
}
AppCompatDelegate.setApplicationLocales(appLocale)
}
get() {
return when (AppCompatDelegate.getApplicationLocales().get(0)?.language) {
"en" -> AppLanguage.ENGLISH
"ru" -> AppLanguage.RUSSIAN
else -> AppLanguage.SYSTEM
}
}
}