Coverage Summary for Class: SettingsViewModelImpl (com.vsevolodganin.clicktrack.settings)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| SettingsViewModelImpl |
0%
(0/7)
|
|
0%
(0/27)
|
0%
(0/119)
|
| SettingsViewModelImpl$Factory |
|
| SettingsViewModelImpl$Factory$Impl |
|
| SettingsViewModelImpl$Factory$Impl$Companion |
|
| SettingsViewModelImpl$MetroFactory |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/45)
|
| SettingsViewModelImpl$MetroFactory$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/22)
|
| SettingsViewModelImpl$onBackClick$$inlined$pop$default$1 |
0%
(0/1)
|
|
| SettingsViewModelImpl$onBackClick$$inlined$pop$default$2 |
0%
(0/1)
|
|
| SettingsViewModelImpl$state$1 |
0%
(0/1)
|
|
0%
(0/5)
|
0%
(0/12)
|
| Total |
0%
(0/12)
|
|
0%
(0/34)
|
0%
(0/198)
|
package com.vsevolodganin.clicktrack.settings
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.router.stack.pop
import com.vsevolodganin.clicktrack.ScreenStackNavigation
import com.vsevolodganin.clicktrack.common.ApplicationBuildConfig
import com.vsevolodganin.clicktrack.language.AppLanguage
import com.vsevolodganin.clicktrack.language.LanguageStore
import com.vsevolodganin.clicktrack.settings.debug.KotlinCrash
import com.vsevolodganin.clicktrack.storage.UserPreferencesRepository
import com.vsevolodganin.clicktrack.theme.Theme
import com.vsevolodganin.clicktrack.utils.decompose.coroutineScope
import com.vsevolodganin.clicktrack.utils.log.Logger
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import dev.zacsweers.metro.Provider
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.stateIn
@AssistedInject
class SettingsViewModelImpl(
@Assisted componentContext: ComponentContext,
private val navigation: ScreenStackNavigation,
private val userPreferences: UserPreferencesRepository,
private val languageStore: LanguageStore,
private val kotlinCrashProvider: Provider<KotlinCrash>,
private val logger: Logger,
private val applicationBuildConfig: ApplicationBuildConfig,
) : SettingsViewModel, ComponentContext by componentContext {
@AssistedFactory
fun interface Factory {
fun create(
componentContext: ComponentContext,
): SettingsViewModelImpl
}
private val scope = coroutineScope()
override val state: StateFlow<SettingsState> = combine(
userPreferences.theme.flow,
userPreferences.ignoreAudioFocus.flow,
languageStore.appLanguage,
) { theme, ignoreAudioFocus, language ->
SettingsState(
theme = theme,
ignoreAudioFocus = ignoreAudioFocus,
language = language,
showCrashSimulationButtons = applicationBuildConfig.isDebug,
)
}.stateIn(
scope = scope,
started = SharingStarted.Eagerly,
initialValue = SettingsState(
theme = userPreferences.theme.value,
ignoreAudioFocus = userPreferences.ignoreAudioFocus.value,
language = languageStore.appLanguage.value,
showCrashSimulationButtons = applicationBuildConfig.isDebug,
),
)
override fun onBackClick() = navigation.pop()
override fun onThemeChange(theme: Theme) {
userPreferences.theme.value = theme
}
override fun onLanguageChange(language: AppLanguage) {
languageStore.appLanguage.value = language
}
override fun onIgnoreAudioFocusChange(ignoreAudioFocus: Boolean) {
userPreferences.ignoreAudioFocus.value = ignoreAudioFocus
}
override fun onKotlinExceptionClick() {
kotlinCrashProvider()()
}
override fun onNonFatalClick() {
logger.logError("TEST", "This is test non-fatal")
}
}