From 85e1b55507109a319a3016a402839c8018894f3d Mon Sep 17 00:00:00 2001 From: tdpeuter Date: Wed, 12 Apr 2023 09:52:09 +0200 Subject: [PATCH] #52 Add logout functionality --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 2 +- .../drawer/DrawerScreen.kt} | 11 +++++++--- .../studeez/screens/drawer/DrawerViewModel.kt | 22 +++++++++++++++++++ .../studeez/screens/log_in/LoginViewModel.kt | 1 - 4 files changed, 31 insertions(+), 5 deletions(-) rename app/src/main/java/be/ugent/sel/studeez/{common/composable/DrawerComposable.kt => screens/drawer/DrawerScreen.kt} (90%) create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt index b90c99e..e416c38 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -33,7 +33,7 @@ fun StudeezApp() { val appState = rememberAppState() ModalDrawer( - drawerContent = { Drawer() }, + drawerContent = { Drawer({ route, popUp -> appState.navigateAndPopUp(route, popUp) }) }, drawerState = appState.drawerState ) { Scaffold( diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/DrawerComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerScreen.kt similarity index 90% rename from app/src/main/java/be/ugent/sel/studeez/common/composable/DrawerComposable.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerScreen.kt index 7cd1b49..756397b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/DrawerComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerScreen.kt @@ -14,13 +14,18 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.drawer.DrawerViewModel import be.ugent.sel.studeez.ui.theme.StudeezTheme @Composable -fun Drawer() { +fun Drawer( + openAndPopup: (String, String) -> Unit, + viewModel: DrawerViewModel = hiltViewModel() +) { Column(modifier = Modifier.fillMaxSize()) { LoggedInUserCard() @@ -48,7 +53,7 @@ fun Drawer() { icon = Icons.Default.AccountBox, // TODO Fix icon text = resources().getString(R.string.log_out) ) { - // TODO Log out + viewModel.onLogoutClick(openAndPopup) } DrawerEntry( @@ -102,7 +107,7 @@ fun LoggedInUserCard() { @Composable fun DrawerPreview() { StudeezTheme { - Drawer() + Drawer({ a, b -> {}}) } } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt new file mode 100644 index 0000000..ac40023 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt @@ -0,0 +1,22 @@ +package be.ugent.sel.studeez.screens.drawer + +import be.ugent.sel.studeez.domain.AccountDAO +import be.ugent.sel.studeez.domain.LogService +import be.ugent.sel.studeez.navigation.StudeezDestinations.HOME_SCREEN +import be.ugent.sel.studeez.navigation.StudeezDestinations.LOGIN_SCREEN +import be.ugent.sel.studeez.screens.StudeezViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class DrawerViewModel @Inject constructor( + private val accountDAO: AccountDAO, + logService: LogService +): StudeezViewModel(logService) { + fun onLogoutClick(openAndPopup: (String, String) -> Unit) { + launchCatching { + accountDAO.signOut() + openAndPopup(LOGIN_SCREEN, HOME_SCREEN) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt index ea178ef..cf3a72d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt @@ -5,7 +5,6 @@ import be.ugent.sel.studeez.common.ext.isValidEmail import be.ugent.sel.studeez.common.snackbar.SnackbarManager import be.ugent.sel.studeez.domain.AccountDAO import be.ugent.sel.studeez.domain.LogService -import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.navigation.StudeezDestinations.HOME_SCREEN import be.ugent.sel.studeez.navigation.StudeezDestinations.LOGIN_SCREEN import be.ugent.sel.studeez.navigation.StudeezDestinations.SIGN_UP_SCREEN