From 926955d79eeeb31aa087344de3646d014d6bcdb9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Nov 2022 11:17:02 +0100 Subject: [PATCH 1/2] Only signin button for now --- .../element/android/x/features/onboarding/OnBoardingScreen.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt index d71c9d9721..168f0bc708 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt @@ -77,6 +77,7 @@ fun OnBoardingContent( .align(CenterHorizontally) .padding(16.dp), ) + /* VectorButton( text = "CREATE ACCOUNT", onClick = { @@ -87,8 +88,9 @@ fun OnBoardingContent( .align(CenterHorizontally) .padding(top = 16.dp) ) + */ VectorButton( - text = "I ALREADY HAVE AN ACCOUNT", + text = "Sign in", onClick = { onSignIn() }, From 80065be58bcb6c019439f7e3cfd7249a1ac1c534 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 10 Nov 2022 12:00:00 +0100 Subject: [PATCH 2/2] Animate carousel --- .../x/features/onboarding/OnBoardingScreen.kt | 27 +++++++++++++++---- .../onboarding/OnBoardingViewModel.kt | 12 +++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt index 168f0bc708..6de8e13c7c 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingScreen.kt @@ -8,9 +8,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember +import androidx.compose.runtime.* import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -26,6 +24,8 @@ import com.google.accompanist.pager.HorizontalPager import com.google.accompanist.pager.HorizontalPagerIndicator import com.google.accompanist.pager.rememberPagerState import io.element.android.x.designsystem.components.VectorButton +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch @Composable fun OnBoardingScreen( @@ -36,6 +36,7 @@ fun OnBoardingScreen( val state: OnBoardingViewState by viewModel.collectAsState() OnBoardingContent( state, + onPageChanged = viewModel::onPageChanged, onSignUp = onSignUp, onSignIn = onSignIn, ) @@ -46,10 +47,13 @@ fun OnBoardingScreen( @Composable fun OnBoardingContent( state: OnBoardingViewState, + onPageChanged: (Int) -> Unit, onSignUp: () -> Unit, onSignIn: () -> Unit, ) { val carrouselState = remember { SplashCarouselStateFactory().create() } + val nbOfPages = carrouselState.items.size + var key by remember { mutableStateOf(false) } Surface( color = MaterialTheme.colorScheme.background, ) { @@ -62,10 +66,23 @@ fun OnBoardingContent( modifier = Modifier.fillMaxSize(), ) { val pagerState = rememberPagerState() - // pagerState.scrollToPage(state.currentPage) + LaunchedEffect(key) { + launch { + delay(3_000) + pagerState.animateScrollToPage((pagerState.currentPage + 1) % nbOfPages) + // https://stackoverflow.com/questions/73714228/accompanist-pager-animatescrolltopage-doesnt-scroll-to-next-page-correctly + key = !key + } + } + LaunchedEffect(pagerState) { + // Collect from the pager state a snapshotFlow reading the currentPage + snapshotFlow { pagerState.currentPage }.collect { page -> + onPageChanged(page) + } + } HorizontalPager( modifier = Modifier.weight(1f), - count = carrouselState.items.size, + count = nbOfPages, state = pagerState, ) { page -> // Our page content diff --git a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt index a0d6ef359a..0749c4a50d 100644 --- a/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt +++ b/features/onboarding/src/main/java/io/element/android/x/features/onboarding/OnBoardingViewModel.kt @@ -5,15 +5,11 @@ import com.airbnb.mvrx.MavericksViewModel class OnBoardingViewModel(initialState: OnBoardingViewState) : MavericksViewModel(initialState) { - fun handle(action: OnBoardingActions) { - when (action) { - is OnBoardingActions.GoToPage -> handleGoToPage(action) - } - } - - private fun handleGoToPage(action: OnBoardingActions.GoToPage) { + fun onPageChanged(page: Int) { setState { - copy(currentPage = action.page) + copy( + currentPage = page, + ) } } } \ No newline at end of file