added splashscreen
This commit is contained in:
		
							parent
							
								
									30cfdd2c96
								
							
						
					
					
						commit
						10202fa693
					
				
					 2 changed files with 81 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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( <homeScreen>, SPLASH_SCREEN)
 | 
			
		||||
        } else{
 | 
			
		||||
            // openAndPopUp(<login>, SPLASH_SCREEN)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue