Coverage Summary for Class: SettingsViewModelImpl (com.vsevolodganin.clicktrack.settings)

Class Method, % Branch, % Line, % Instruction, %
SettingsViewModelImpl 0% (0/9) 0% (0/28) 0% (0/123)
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/4) 0% (0/7)
Total 0% (0/12) 0% (0/32) 0% (0/130)


 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.language.AppLanguage
 import com.vsevolodganin.clicktrack.language.LanguageStore
 import com.vsevolodganin.clicktrack.settings.debug.KotlinCrash
 import com.vsevolodganin.clicktrack.settings.debug.NativeCrash
 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 kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.stateIn
 import me.tatarka.inject.annotations.Assisted
 import me.tatarka.inject.annotations.Inject
 
 @Inject
 class SettingsViewModelImpl(
     @Assisted componentContext: ComponentContext,
     private val navigation: ScreenStackNavigation,
     private val userPreferences: UserPreferencesRepository,
     private val languageStore: LanguageStore,
     private val kotlinCrashProvider: () -> KotlinCrash,
     private val nativeCrashProvider: Lazy<NativeCrash>,
     private val logger: Logger,
 ) : SettingsViewModel, ComponentContext by componentContext {
     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,
         )
     }.stateIn(
         scope = scope,
         started = SharingStarted.Eagerly,
         initialValue = SettingsState(
             theme = userPreferences.theme.value,
             ignoreAudioFocus = userPreferences.ignoreAudioFocus.value,
             language = languageStore.appLanguage.value,
         ),
     )
 
     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 onNativeExceptionCrashClick() {
         nativeCrashProvider.value.exception()
     }
 
     override fun onNativeDanglingReferenceCrashClick() {
         nativeCrashProvider.value.danglingReference()
     }
 
     override fun onNonFatalClick() {
         logger.logError("TEST", "This is test non-fatal")
     }
 }