Coverage Summary for Class: RootViewModelImpl (com.vsevolodganin.clicktrack)

Class Method, % Branch, % Line, % Instruction, %
RootViewModelImpl 0% (0/6) 0% (0/20) 0% (0/116)
RootViewModelImpl$implementDrawerBackCallback$1 0% (0/1) 0% (0/1) 0% (0/24)
RootViewModelImpl$implementDrawerBackCallback$1$1 0% (0/1) 0% (0/1) 0% (0/5)
RootViewModelImpl$implementScreenStackBackCallback$callback$1 0% (0/1) 0% (0/1) 0% (0/5)
RootViewModelImpl$implementScreenStackBackCallback$callback$1$invoke$$inlined$pop$default$1 0% (0/1)
RootViewModelImpl$implementScreenStackBackCallback$callback$1$invoke$$inlined$pop$default$2 0% (0/1)
Total 0% (0/11) 0% (0/23) 0% (0/150)


 package com.vsevolodganin.clicktrack
 
 import com.arkivanov.decompose.ComponentContext
 import com.arkivanov.decompose.router.stack.pop
 import com.arkivanov.decompose.value.subscribe
 import com.arkivanov.essenty.backhandler.BackCallback
 import com.vsevolodganin.clicktrack.di.component.MainControllerScope
 import com.vsevolodganin.clicktrack.drawer.DrawerNavigation
 import com.vsevolodganin.clicktrack.drawer.DrawerViewModel
 import com.vsevolodganin.clicktrack.utils.decompose.coroutineScope
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import me.tatarka.inject.annotations.Inject
 
 @MainControllerScope
 @Inject
 class RootViewModelImpl(
     private val componentContext: ComponentContext,
     private val drawerViewModel: DrawerViewModel,
     private val drawerNavigation: DrawerNavigation,
     private val screenStackNavigation: ScreenStackNavigation,
     private val screenStackState: ScreenStackState,
 ) : RootViewModel, ComponentContext by componentContext {
     private val scope = coroutineScope()
 
     override val drawer get() = drawerViewModel
     override val screens get() = screenStackState
 
     init {
         // Order is important: latter takes higher precedence
         implementScreenStackBackCallback()
         implementDrawerBackCallback()
     }
 
     private fun implementScreenStackBackCallback() {
         val callback = BackCallback(isEnabled = screenStackState.value.backStack.isNotEmpty(), onBack = screenStackNavigation::pop)
         screenStackState.subscribe(lifecycle) { state ->
             callback.isEnabled = state.backStack.isNotEmpty()
         }
         backHandler.register(callback)
     }
 
     private fun implementDrawerBackCallback() {
         val callback = BackCallback(isEnabled = drawerViewModel.state.value.isOpened, onBack = drawerNavigation::closeDrawer)
         scope.launch(context = Dispatchers.Unconfined, start = CoroutineStart.UNDISPATCHED) {
             drawerViewModel.state.collect { state ->
                 callback.isEnabled = state.isOpened
             }
         }
         backHandler.register(callback)
     }
 }