wrap splash in route

This commit is contained in:
brreynie 2023-04-22 23:47:28 +02:00
parent 95140e1739
commit c401a29061
2 changed files with 45 additions and 11 deletions

View file

@ -31,6 +31,7 @@ import be.ugent.sel.studeez.screens.profile.EditProfileRoute
import be.ugent.sel.studeez.screens.profile.ProfileRoute import be.ugent.sel.studeez.screens.profile.ProfileRoute
import be.ugent.sel.studeez.screens.session.SessionScreen import be.ugent.sel.studeez.screens.session.SessionScreen
import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.sign_up.SignUpRoute
import be.ugent.sel.studeez.screens.splash.SplashRoute
import be.ugent.sel.studeez.screens.splash.SplashScreen import be.ugent.sel.studeez.screens.splash.SplashScreen
import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen
import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen
@ -101,7 +102,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
} }
composable(StudeezDestinations.SPLASH_SCREEN) { composable(StudeezDestinations.SPLASH_SCREEN) {
SplashScreen(openAndPopUp) SplashRoute(openAndPopUp, viewModel = hiltViewModel())
} }
composable(StudeezDestinations.LOGIN_SCREEN) { composable(StudeezDestinations.LOGIN_SCREEN) {

View file

@ -1,5 +1,6 @@
package be.ugent.sel.studeez.screens.splash package be.ugent.sel.studeez.screens.splash
import android.window.SplashScreen
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -15,7 +16,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel import androidx.compose.ui.tooling.preview.Preview
import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.BasicButton
import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.common.ext.basicButton
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -24,14 +25,26 @@ import be.ugent.sel.studeez.R.string as AppText
private const val SPLASH_TIMEOUT = 500L private const val SPLASH_TIMEOUT = 500L
@Composable @Composable
fun SplashScreen( fun SplashRoute(
openAndPopUp: (String, String) -> Unit, openAndPopUp: (String, String) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
viewModel: SplashViewModel = hiltViewModel() viewModel: SplashViewModel,
) {
SplashScreen(
modifier = modifier,
onAppStart = { viewModel.onAppStart(openAndPopUp) },
showError = viewModel.showError.value
)
}
@Composable
fun SplashScreen(
modifier: Modifier = Modifier,
onAppStart: () -> Unit,
showError: Boolean,
) { ) {
Column( Column(
modifier = modifier = modifier
modifier
.fillMaxWidth() .fillMaxWidth()
.fillMaxHeight() .fillMaxHeight()
.background(color = MaterialTheme.colors.background) .background(color = MaterialTheme.colors.background)
@ -39,17 +52,37 @@ fun SplashScreen(
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
if (viewModel.showError.value) { if (showError) {
Text(text = stringResource(AppText.generic_error)) Text(text = stringResource(AppText.generic_error))
BasicButton(
BasicButton(AppText.try_again, Modifier.basicButton()) { viewModel.onAppStart(openAndPopUp) } AppText.try_again,
Modifier.basicButton(),
onClick = onAppStart,
)
} else { } else {
CircularProgressIndicator(color = MaterialTheme.colors.onBackground) CircularProgressIndicator(color = MaterialTheme.colors.onBackground)
} }
} }
LaunchedEffect(true) { LaunchedEffect(true) {
delay(SPLASH_TIMEOUT) delay(SPLASH_TIMEOUT)
viewModel.onAppStart(openAndPopUp) onAppStart()
} }
} }
@Preview
@Composable
fun SplashPreview() {
SplashScreen(
onAppStart = {},
showError = false,
)
}
@Preview
@Composable
fun SplashErrorPreview() {
SplashScreen(
onAppStart = {},
showError = true,
)
}