11package org.cru.godtools.ui.onboarding
22
3+ import androidx.compose.animation.core.Spring
4+ import androidx.compose.animation.core.spring
5+ import androidx.compose.foundation.pager.PagerState
6+ import androidx.compose.foundation.pager.rememberPagerState
37import androidx.compose.runtime.Composable
48import androidx.compose.runtime.LaunchedEffect
59import androidx.compose.runtime.getValue
6- import androidx.compose.runtime.mutableIntStateOf
710import androidx.compose.runtime.mutableStateOf
11+ import androidx.compose.runtime.rememberCoroutineScope
812import androidx.compose.runtime.saveable.rememberSaveable
913import androidx.compose.runtime.setValue
1014import com.slack.circuit.codegen.annotations.CircuitInject
@@ -17,6 +21,7 @@ import dagger.assisted.Assisted
1721import dagger.assisted.AssistedFactory
1822import dagger.assisted.AssistedInject
1923import dagger.hilt.components.SingletonComponent
24+ import kotlinx.coroutines.launch
2025import org.cru.godtools.base.Settings
2126import org.cru.godtools.base.Settings.Companion.FEATURE_TUTORIAL_ONBOARDING
2227import org.cru.godtools.base.ui.circuit.screen.AppLanguageScreen
@@ -32,7 +37,7 @@ class OnboardingPresenter @AssistedInject constructor(
3237 @Assisted private val navigator : Navigator ,
3338) : Presenter<UiState> {
3439 data class UiState (
35- val currentPage : Int = 0 ,
40+ val pagerState : PagerState ,
3641 val userScrollEnabled : Boolean = false ,
3742 val eventSink : (UiEvent ) -> Unit = {}
3843 ) : CircuitUiState
@@ -47,9 +52,15 @@ class OnboardingPresenter @AssistedInject constructor(
4752 @Composable
4853 override fun present (): UiState {
4954 var languageWasSet by rememberSaveable { mutableStateOf(false ) }
50- var currentPage by rememberSaveable { mutableIntStateOf(0 ) }
55+ val pagerState = rememberPagerState(pageCount = { 4 })
56+ val scope = rememberCoroutineScope()
5157 val countrySettingsNavigator = rememberAnsweringNavigator<CountrySettingsScreen .Result >(navigator) {
52- currentPage = 1
58+ scope.launch {
59+ pagerState.animateScrollToPage(
60+ 1 ,
61+ animationSpec = spring(stiffness = Spring .StiffnessMediumLow )
62+ )
63+ }
5364 }
5465 val languageButtonNavigator = rememberAnsweringNavigator<AppLanguageScreen .Result >(navigator) { result ->
5566 if (result is AppLanguageScreen .Result .LanguageSelected ) {
@@ -63,8 +74,10 @@ class OnboardingPresenter @AssistedInject constructor(
6374 }
6475 }
6576 LaunchedEffect (Unit ) { settings.setFeatureDiscovered(FEATURE_TUTORIAL_ONBOARDING ) }
66-
67- val eventSink: (UiEvent ) -> Unit = { event ->
77+ return UiState (
78+ pagerState = pagerState,
79+ userScrollEnabled = pagerState.currentPage > 0
80+ ) { event ->
6881 when (event) {
6982 UiEvent .ChangeLanguage -> languageButtonNavigator.goTo(AppLanguageScreen )
7083
@@ -87,12 +100,6 @@ class OnboardingPresenter @AssistedInject constructor(
87100 }
88101 }
89102 }
90-
91- return UiState (
92- currentPage = currentPage,
93- userScrollEnabled = currentPage > 0 ,
94- eventSink = eventSink
95- )
96103 }
97104
98105 @AssistedFactory
0 commit comments