Skip to content

Commit 5a09c2f

Browse files
committed
Remove currentPage param from UiState and derive it from newly added pagerState
1 parent 7527bc7 commit 5a09c2f

1 file changed

Lines changed: 19 additions & 12 deletions

File tree

app/src/main/kotlin/org/cru/godtools/ui/onboarding/OnboardingPresenter.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package 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
37
import androidx.compose.runtime.Composable
48
import androidx.compose.runtime.LaunchedEffect
59
import androidx.compose.runtime.getValue
6-
import androidx.compose.runtime.mutableIntStateOf
710
import androidx.compose.runtime.mutableStateOf
11+
import androidx.compose.runtime.rememberCoroutineScope
812
import androidx.compose.runtime.saveable.rememberSaveable
913
import androidx.compose.runtime.setValue
1014
import com.slack.circuit.codegen.annotations.CircuitInject
@@ -17,6 +21,7 @@ import dagger.assisted.Assisted
1721
import dagger.assisted.AssistedFactory
1822
import dagger.assisted.AssistedInject
1923
import dagger.hilt.components.SingletonComponent
24+
import kotlinx.coroutines.launch
2025
import org.cru.godtools.base.Settings
2126
import org.cru.godtools.base.Settings.Companion.FEATURE_TUTORIAL_ONBOARDING
2227
import 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

Comments
 (0)