diff --git a/feature-splash/src/main/java/io/novafoundation/nova/splash/presentation/SplashViewModel.kt b/feature-splash/src/main/java/io/novafoundation/nova/splash/presentation/SplashViewModel.kt index 160dcf9d..0046f717 100644 --- a/feature-splash/src/main/java/io/novafoundation/nova/splash/presentation/SplashViewModel.kt +++ b/feature-splash/src/main/java/io/novafoundation/nova/splash/presentation/SplashViewModel.kt @@ -5,6 +5,7 @@ import io.novafoundation.nova.common.base.BaseViewModel import io.novafoundation.nova.common.utils.splash.SplashPassedObserver import io.novafoundation.nova.feature_account_api.domain.interfaces.AccountRepository import io.novafoundation.nova.splash.SplashRouter +import kotlinx.coroutines.Job import kotlinx.coroutines.launch class SplashViewModel( @@ -13,8 +14,16 @@ class SplashViewModel( private val splashPassedObserver: SplashPassedObserver ) : BaseViewModel() { + private var initialDestinationJob: Job? = null + + // Called from the splash screen's onResume, which runs again when the activity is + // recreated (rotation, theme, locale) while this view model survives. Starting a + // second navigation then finds the first one already on the welcome screen, which + // has no route to welcome, and crashes the app. The first call decides. fun openInitialDestination() { - viewModelScope.launch { + if (initialDestinationJob != null) return + + initialDestinationJob = viewModelScope.launch { if (repository.isAccountSelected()) { openPinCode() } else {