@@ -4,6 +4,7 @@ import androidx.lifecycle.SavedStateHandle
44import androidx.lifecycle.viewModelScope
55import com.threegap.bitnagil.domain.auth.model.UserRole
66import com.threegap.bitnagil.domain.auth.usecase.AutoLoginUseCase
7+ import com.threegap.bitnagil.domain.version.usecase.CheckUpdateRequirementUseCase
78import com.threegap.bitnagil.presentation.common.mviviewmodel.MviViewModel
89import com.threegap.bitnagil.presentation.splash.model.SplashIntent
910import com.threegap.bitnagil.presentation.splash.model.SplashSideEffect
@@ -18,14 +19,15 @@ import javax.inject.Inject
1819@HiltViewModel
1920class SplashViewModel @Inject constructor(
2021 savedStateHandle : SavedStateHandle ,
22+ private val checkUpdateRequirementUseCase : CheckUpdateRequirementUseCase ,
2123 private val autoLoginUseCase : AutoLoginUseCase ,
2224) : MviViewModel<SplashState, SplashSideEffect, SplashIntent>(
2325 initState = SplashState (),
2426 savedStateHandle = savedStateHandle,
2527) {
2628
2729 init {
28- performAutoLogin ()
30+ performForceUpdateCheck ()
2931 }
3032
3133 override suspend fun SimpleSyntax <SplashState , SplashSideEffect >.reduceState (
@@ -40,6 +42,13 @@ class SplashViewModel @Inject constructor(
4042 )
4143 }
4244
45+ is SplashIntent .SetForceUpdateResult -> {
46+ state.copy(
47+ forceUpdateRequired = intent.isRequired,
48+ isForceUpdateCheckCompleted = true ,
49+ )
50+ }
51+
4352 is SplashIntent .NavigateToLogin -> {
4453 sendSideEffect(SplashSideEffect .NavigateToLogin )
4554 null
@@ -61,6 +70,20 @@ class SplashViewModel @Inject constructor(
6170 }
6271 }
6372
73+ private fun performForceUpdateCheck () {
74+ viewModelScope.launch {
75+ val isUpdateRequired = withTimeoutOrNull(5000 ) {
76+ checkUpdateRequirementUseCase().getOrElse { false }
77+ } ? : false
78+
79+ sendIntent(SplashIntent .SetForceUpdateResult (isUpdateRequired))
80+
81+ if (! isUpdateRequired) {
82+ performAutoLogin()
83+ }
84+ }
85+ }
86+
6487 private fun performAutoLogin () {
6588 viewModelScope.launch {
6689 try {
@@ -76,6 +99,9 @@ class SplashViewModel @Inject constructor(
7699
77100 fun onAnimationCompleted () {
78101 val splashState = container.stateFlow.value
102+
103+ if (splashState.forceUpdateRequired) return
104+
79105 if (! splashState.isAutoLoginCompleted) {
80106 viewModelScope.launch {
81107 delay(100 )
0 commit comments