Merge branch 'develop' of https://github.com/vector-im/element-x-android-poc into develop
This commit is contained in:
commit
8ff6e92ac4
2 changed files with 29 additions and 14 deletions
|
|
@ -8,9 +8,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Surface
|
import androidx.compose.material3.Surface
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
|
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.painterResource
|
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.HorizontalPagerIndicator
|
||||||
import com.google.accompanist.pager.rememberPagerState
|
import com.google.accompanist.pager.rememberPagerState
|
||||||
import io.element.android.x.designsystem.components.VectorButton
|
import io.element.android.x.designsystem.components.VectorButton
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun OnBoardingScreen(
|
fun OnBoardingScreen(
|
||||||
|
|
@ -36,6 +36,7 @@ fun OnBoardingScreen(
|
||||||
val state: OnBoardingViewState by viewModel.collectAsState()
|
val state: OnBoardingViewState by viewModel.collectAsState()
|
||||||
OnBoardingContent(
|
OnBoardingContent(
|
||||||
state,
|
state,
|
||||||
|
onPageChanged = viewModel::onPageChanged,
|
||||||
onSignUp = onSignUp,
|
onSignUp = onSignUp,
|
||||||
onSignIn = onSignIn,
|
onSignIn = onSignIn,
|
||||||
)
|
)
|
||||||
|
|
@ -46,10 +47,13 @@ fun OnBoardingScreen(
|
||||||
@Composable
|
@Composable
|
||||||
fun OnBoardingContent(
|
fun OnBoardingContent(
|
||||||
state: OnBoardingViewState,
|
state: OnBoardingViewState,
|
||||||
|
onPageChanged: (Int) -> Unit,
|
||||||
onSignUp: () -> Unit,
|
onSignUp: () -> Unit,
|
||||||
onSignIn: () -> Unit,
|
onSignIn: () -> Unit,
|
||||||
) {
|
) {
|
||||||
val carrouselState = remember { SplashCarouselStateFactory().create() }
|
val carrouselState = remember { SplashCarouselStateFactory().create() }
|
||||||
|
val nbOfPages = carrouselState.items.size
|
||||||
|
var key by remember { mutableStateOf(false) }
|
||||||
Surface(
|
Surface(
|
||||||
color = MaterialTheme.colorScheme.background,
|
color = MaterialTheme.colorScheme.background,
|
||||||
) {
|
) {
|
||||||
|
|
@ -62,10 +66,23 @@ fun OnBoardingContent(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
) {
|
) {
|
||||||
val pagerState = rememberPagerState()
|
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(
|
HorizontalPager(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
count = carrouselState.items.size,
|
count = nbOfPages,
|
||||||
state = pagerState,
|
state = pagerState,
|
||||||
) { page ->
|
) { page ->
|
||||||
// Our page content
|
// Our page content
|
||||||
|
|
@ -77,6 +94,7 @@ fun OnBoardingContent(
|
||||||
.align(CenterHorizontally)
|
.align(CenterHorizontally)
|
||||||
.padding(16.dp),
|
.padding(16.dp),
|
||||||
)
|
)
|
||||||
|
/*
|
||||||
VectorButton(
|
VectorButton(
|
||||||
text = "CREATE ACCOUNT",
|
text = "CREATE ACCOUNT",
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|
@ -87,8 +105,9 @@ fun OnBoardingContent(
|
||||||
.align(CenterHorizontally)
|
.align(CenterHorizontally)
|
||||||
.padding(top = 16.dp)
|
.padding(top = 16.dp)
|
||||||
)
|
)
|
||||||
|
*/
|
||||||
VectorButton(
|
VectorButton(
|
||||||
text = "I ALREADY HAVE AN ACCOUNT",
|
text = "Sign in",
|
||||||
onClick = {
|
onClick = {
|
||||||
onSignIn()
|
onSignIn()
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,11 @@ import com.airbnb.mvrx.MavericksViewModel
|
||||||
class OnBoardingViewModel(initialState: OnBoardingViewState) :
|
class OnBoardingViewModel(initialState: OnBoardingViewState) :
|
||||||
MavericksViewModel<OnBoardingViewState>(initialState) {
|
MavericksViewModel<OnBoardingViewState>(initialState) {
|
||||||
|
|
||||||
fun handle(action: OnBoardingActions) {
|
fun onPageChanged(page: Int) {
|
||||||
when (action) {
|
|
||||||
is OnBoardingActions.GoToPage -> handleGoToPage(action)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleGoToPage(action: OnBoardingActions.GoToPage) {
|
|
||||||
setState {
|
setState {
|
||||||
copy(currentPage = action.page)
|
copy(
|
||||||
|
currentPage = page,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue