diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt new file mode 100644 index 0000000..ec5e515 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt @@ -0,0 +1,55 @@ +package be.ugent.sel.studeez.screens.splash + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.CircularProgressIndicator +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.hilt.navigation.compose.hiltViewModel +import be.ugent.sel.studeez.common.composable.BasicButton +import be.ugent.sel.studeez.common.ext.basicButton +import kotlinx.coroutines.delay +import be.ugent.sel.studeez.R.string as AppText + +private const val SPLASH_TIMEOUT = 1000L + +@Composable +fun SplashScreen( + openAndPopUp: (String, String) -> Unit, + modifier: Modifier = Modifier, + viewModel: SplashViewModel = hiltViewModel() +) { + Column( + modifier = + modifier + .fillMaxWidth() + .fillMaxHeight() + .background(color = MaterialTheme.colors.background) + .verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + if (viewModel.showError.value) { + Text(text = stringResource(AppText.generic_error)) + + BasicButton(AppText.try_again, Modifier.basicButton()) { viewModel.onAppStart(openAndPopUp) } + } else { + CircularProgressIndicator(color = MaterialTheme.colors.onBackground) + } + } + + LaunchedEffect(true) { + delay(SPLASH_TIMEOUT) + viewModel.onAppStart(openAndPopUp) + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashViewModel.kt new file mode 100644 index 0000000..f019c8c --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashViewModel.kt @@ -0,0 +1,26 @@ +package be.ugent.sel.studeez.screens.splash + +import androidx.compose.runtime.mutableStateOf +import be.ugent.sel.studeez.domain.AccountDAO +import be.ugent.sel.studeez.domain.LogService +import be.ugent.sel.studeez.screens.StudeezViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class SplashViewModel @Inject constructor( + private val accountDAO: AccountDAO, + logService: LogService +) : StudeezViewModel(logService) { + val showError = mutableStateOf(false) + + fun onAppStart(openAndPopUp: (String, String) -> Unit) { + + showError.value = false + if (accountDAO.hasUser) { + // openAndPopUp( , SPLASH_SCREEN) + } else{ + // openAndPopUp(, SPLASH_SCREEN) + } + } +} \ No newline at end of file