@@ -9,6 +9,7 @@ import androidx.compose.runtime.setValue
99import com.ninecraft.booket.core.common.constants.ErrorScope
1010import com.ninecraft.booket.core.common.utils.postErrorDialog
1111import com.ninecraft.booket.core.data.api.repository.AuthRepository
12+ import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository
1213import com.ninecraft.booket.core.data.api.repository.UserRepository
1314import com.ninecraft.booket.core.model.AutoLoginState
1415import com.ninecraft.booket.core.model.OnboardingState
@@ -17,7 +18,7 @@ import com.ninecraft.booket.feature.screens.HomeScreen
1718import com.ninecraft.booket.feature.screens.LoginScreen
1819import com.ninecraft.booket.feature.screens.OnboardingScreen
1920import com.ninecraft.booket.feature.screens.SplashScreen
20- import com.skydoves.compose.effects.RememberedEffect
21+ import com.orhanobut.logger.Logger
2122import com.slack.circuit.codegen.annotations.CircuitInject
2223import com.slack.circuit.retained.collectAsRetainedState
2324import com.slack.circuit.retained.rememberRetained
@@ -34,14 +35,16 @@ class SplashPresenter @AssistedInject constructor(
3435 @Assisted private val navigator : Navigator ,
3536 private val userRepository : UserRepository ,
3637 private val authRepository : AuthRepository ,
38+ private val remoteConfigRepository : RemoteConfigRepository ,
3739) : Presenter<SplashUiState> {
3840
3941 @Composable
4042 override fun present (): SplashUiState {
4143 val scope = rememberCoroutineScope()
4244 val onboardingState by userRepository.onboardingState.collectAsRetainedState(initial = OnboardingState .IDLE )
4345 val autoLoginState by authRepository.autoLoginState.collectAsRetainedState(initial = AutoLoginState .IDLE )
44- var isSplashTimeCompleted by rememberRetained { mutableStateOf(false ) }
46+ var isForceUpdateDialogVisible by rememberRetained { mutableStateOf(false ) }
47+ var sideEffect by rememberRetained { mutableStateOf<SplashSideEffect ?>(null ) }
4548
4649 fun checkTermsAgreement () {
4750 scope.launch {
@@ -64,14 +67,7 @@ class SplashPresenter @AssistedInject constructor(
6467 }
6568 }
6669
67- LaunchedEffect (Unit ) {
68- delay(1000L )
69- isSplashTimeCompleted = true
70- }
71-
72- RememberedEffect (onboardingState, autoLoginState, isSplashTimeCompleted) {
73- if (! isSplashTimeCompleted) return @RememberedEffect
74-
70+ fun proceedToNextScreen () {
7571 when (onboardingState) {
7672 OnboardingState .NOT_COMPLETED -> {
7773 navigator.resetRoot(OnboardingScreen )
@@ -99,7 +95,44 @@ class SplashPresenter @AssistedInject constructor(
9995 }
10096 }
10197
102- return SplashUiState
98+ fun handleEvent (event : SplashUiEvent ) {
99+ when (event) {
100+ SplashUiEvent .OnUpdateButtonClick -> {
101+ sideEffect = SplashSideEffect .NavigateToPlayStore
102+ }
103+
104+ SplashUiEvent .InitSideEffect -> {
105+ sideEffect = null
106+ }
107+ }
108+ }
109+
110+ LaunchedEffect (onboardingState, autoLoginState) {
111+ delay(1000L )
112+
113+ if (onboardingState == OnboardingState .IDLE || autoLoginState == AutoLoginState .IDLE ) {
114+ return @LaunchedEffect
115+ }
116+
117+ remoteConfigRepository.shouldUpdate()
118+ .onSuccess { shouldUpdate ->
119+ if (shouldUpdate) {
120+ isForceUpdateDialogVisible = true
121+ } else {
122+ proceedToNextScreen()
123+ }
124+ }
125+ .onFailure { exception ->
126+ Logger .e(" ${exception.message} " )
127+ proceedToNextScreen()
128+ }
129+ }
130+
131+ return SplashUiState (
132+ isForceUpdateDialogVisible = isForceUpdateDialogVisible,
133+ sideEffect = sideEffect,
134+ eventSink = ::handleEvent,
135+ )
103136 }
104137
105138 @CircuitInject(SplashScreen ::class , ActivityRetainedComponent ::class )
0 commit comments