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 bd2da57..aeacffa 100644
--- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt
@@ -16,7 +16,6 @@ import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
-import be.ugent.sel.studeez.screens.drawer.Drawer
import be.ugent.sel.studeez.common.snackbar.SnackbarManager
import be.ugent.sel.studeez.navigation.StudeezDestinations
import be.ugent.sel.studeez.screens.home.HomeScreen
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerScreen.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/DrawerComposable.kt
similarity index 90%
rename from app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerScreen.kt
rename to app/src/main/java/be/ugent/sel/studeez/common/composable/DrawerComposable.kt
index a535102..e52e300 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerScreen.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/DrawerComposable.kt
@@ -1,4 +1,4 @@
-package be.ugent.sel.studeez.screens.drawer
+package be.ugent.sel.studeez.common.composable
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
@@ -17,7 +17,6 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
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.ui.theme.StudeezTheme
@@ -25,11 +24,11 @@ import be.ugent.sel.studeez.ui.theme.StudeezTheme
@Composable
fun Drawer(
- openAndPopup: (String, String) -> Unit,
- viewModel: DrawerViewModel = hiltViewModel()
+ currentUser: String,
+ onLogoutClick: () -> Unit
) {
Column(modifier = Modifier.fillMaxSize()) {
- LoggedInUserCard(viewModel.currentUser)
+ LoggedInUserCard(currentUser)
Divider()
@@ -55,7 +54,7 @@ fun Drawer(
icon = ImageVector.vectorResource(id = R.drawable.ic_logout),
text = resources().getString(R.string.log_out)
) {
- viewModel.onLogoutClick(openAndPopup)
+ onLogoutClick()
}
DrawerEntry(
@@ -110,7 +109,10 @@ fun LoggedInUserCard(
@Composable
fun DrawerPreview() {
StudeezTheme {
- Drawer({ a, b -> {}})
+ Drawer(
+ "John Doe",
+ {}
+ )
}
}
diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/ToolbarComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/ToolbarComposable.kt
index fbe8b8a..56320c1 100644
--- a/app/src/main/java/be/ugent/sel/studeez/common/composable/ToolbarComposable.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/ToolbarComposable.kt
@@ -4,72 +4,14 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
-import androidx.compose.material.icons.filled.Menu
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.tooling.preview.Preview
-import be.ugent.sel.studeez.screens.drawer.Drawer
-import be.ugent.sel.studeez.screens.drawer.StudeezDrawerState
+import be.ugent.sel.studeez.R
+import be.ugent.sel.studeez.resources
import be.ugent.sel.studeez.ui.theme.StudeezTheme
-import kotlinx.coroutines.CoroutineScope
// TODO Add option for button in top right corner as extra button
-@Composable
-// Contains floatingActionButton and bottom bar, used in the main four screens.
-fun PrimaryScreenToolbar(
- title: String,
- openAndPopUp: (String, String) -> Unit,
- content: @Composable (PaddingValues) -> Unit
-) {
- val primaryScreenToolbarState = rememberPrimaryScreenToolbarState()
-
- Scaffold(
- scaffoldState = primaryScreenToolbarState.scaffoldState,
-
- // Everything at the top of the screen
- topBar = { TopAppBar(
- title = { Text(text = title) },
- navigationIcon = {
- IconButton(onClick = { primaryScreenToolbarState.openDrawer() }) {
- Icon(imageVector = Icons.Default.Menu, contentDescription = "Menu")
- }
- }
- ) },
-
- // Drawer
- drawerContent = @Composable {
- Drawer(openAndPopUp)
- },
-
- // Everything at the bottom of the screen
- bottomBar = { NavigationBar() }, // TODO Pass arguments so that the current tab etc can be shown
- floatingActionButtonPosition = FabPosition.Center,
- isFloatingActionButtonDocked = true,
- floatingActionButton = { CollapsedAddButton() }
- ) { paddingValues ->
- content(paddingValues)
- }
-}
-
-@Composable
-fun rememberPrimaryScreenToolbarState(
- scaffoldState: ScaffoldState = rememberScaffoldState(),
- coroutineScope: CoroutineScope = rememberCoroutineScope()
-) = remember(scaffoldState, coroutineScope) {
- StudeezDrawerState(scaffoldState, coroutineScope)
-}
-
-@Preview
-@Composable
-fun PrimaryScreenToolbarPreview() {
- StudeezTheme { PrimaryScreenToolbar(
- "Preview screen",
- { a, b -> {}}
- ) {} }
-}
-
@Composable
// Does not contain floatingActionButton and bottom bar, used in all the other screens
fun SecondaryScreenToolbar(
@@ -82,8 +24,11 @@ fun SecondaryScreenToolbar(
topBar = { TopAppBar(
title = { Text(text = title) },
navigationIcon = {
- IconButton(onClick = { /* TODO Go back */ }) {
- Icon(imageVector = Icons.Default.ArrowBack, contentDescription = "Go back")
+ IconButton(onClick = { popUp() }) {
+ Icon(
+ imageVector = Icons.Default.ArrowBack,
+ contentDescription = resources().getString(R.string.go_back)
+ )
}
}
) },
@@ -94,17 +39,9 @@ fun SecondaryScreenToolbar(
@Preview
@Composable
-fun PrimaryScreenToolbarPreview() {
- StudeezTheme { PrimaryScreenToolbar(
+fun SecondaryScreenToolbarPreview() {
+ StudeezTheme { SecondaryScreenToolbar(
"Preview screen",
{}
) {} }
-}
-
-@Preview
-@Composable
-fun SecondaryScreenToolbarPreview() {
- StudeezTheme { SecondaryScreenToolbar(
- "Preview screen"
- ) {} }
}
\ No newline at end of file
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
deleted file mode 100644
index c0c9b85..0000000
--- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-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) {
- val currentUser: String = accountDAO.currentUserId
-
- 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/drawer/StudeezDrawerState.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/StudeezDrawerState.kt
deleted file mode 100644
index 891f4ac..0000000
--- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/StudeezDrawerState.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package be.ugent.sel.studeez.screens.drawer
-
-import androidx.compose.material.ScaffoldState
-import androidx.compose.runtime.Stable
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-
-@Stable
-class StudeezDrawerState(
- val scaffoldState: ScaffoldState,
- private val coroutineScope: CoroutineScope
-) {
- fun openDrawer() {
- coroutineScope.launch { scaffoldState.drawerState.open() }
- }
-}
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt
index 64515f6..d4d3327 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt
@@ -1,13 +1,15 @@
package be.ugent.sel.studeez.screens.home
+import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.hilt.navigation.compose.hiltViewModel
+import androidx.lifecycle.viewModelScope
import be.ugent.sel.studeez.R
import be.ugent.sel.studeez.common.composable.BasicButton
-import be.ugent.sel.studeez.common.composable.PrimaryScreenToolbar
import be.ugent.sel.studeez.common.ext.basicButton
import be.ugent.sel.studeez.resources
+import be.ugent.sel.studeez.screens.templates.primary_screen.PrimaryScreen
@Composable
fun HomeScreen(
@@ -15,9 +17,11 @@ fun HomeScreen(
viewModel: HomeViewModel = hiltViewModel()
) {
- PrimaryScreenToolbar(
+ PrimaryScreen(
title = resources().getString(R.string.home),
- openAndPopUp = openAndPopUp
+ openDrawer = { viewModel.openDrawer() },
+ onLogoutClick = { viewModel.onLogoutClick(openAndPopUp) },
+ viewModel.scaffoldState
) {
BasicButton(R.string.start_session, Modifier.basicButton()) {
viewModel.onStartSessionClick(openAndPopUp)
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt
index f3a5369..67b5b81 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt
@@ -1,14 +1,36 @@
package be.ugent.sel.studeez.screens.home
+import androidx.compose.material.ScaffoldState
+import androidx.compose.material.rememberScaffoldState
+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 HomeViewModel @Inject constructor(logService: LogService) : StudeezViewModel(logService) {
+class HomeViewModel @Inject constructor(
+ private val accountDAO: AccountDAO,
+ logService: LogService
+) : StudeezViewModel(logService) {
+ val scaffoldState: ScaffoldState = rememberScaffoldState()
fun onStartSessionClick(openAndPopUp: (String, String) -> Unit) {
- // openAndPopUp(StudeezDestinations.xxx, StudeezDestinations.HOME_SCREEN)
+ // TODO openAndPopUp(StudeezDestinations.xxx, StudeezDestinations.HOME_SCREEN)
+ }
+
+ fun onLogoutClick(openAndPopup: (String, String) -> Unit) {
+ launchCatching {
+ accountDAO.signOut()
+ openAndPopup(LOGIN_SCREEN, HOME_SCREEN)
+ }
+ }
+
+ fun openDrawer() {
+ launchCatching {
+ scaffoldState.drawerState.open()
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt
index b02a2f3..d54ccbf 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt
@@ -27,7 +27,7 @@ fun LoginScreen(
val uiState by viewModel.uiState
// TODO Make this a separate kind of screen?
- SecondaryScreenToolbar(title = resources().getString(AppText.sign_in)) {
+ SecondaryScreenToolbar(title = resources().getString(AppText.sign_in), {}) {
Column(
modifier = modifier
.fillMaxWidth()
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt
index 4d07f59..473c53f 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt
@@ -27,7 +27,7 @@ fun SignUpScreen(
val uiState by viewModel.uiState
val fieldModifier = Modifier.fieldModifier()
- SecondaryScreenToolbar(title = resources().getString(AppText.create_account)) {
+ SecondaryScreenToolbar(title = resources().getString(AppText.create_account), {}) {
Column(
modifier = modifier
.fillMaxWidth()
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/templates/primary_screen/PrimaryScreenComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/templates/primary_screen/PrimaryScreenComposable.kt
new file mode 100644
index 0000000..a6468d4
--- /dev/null
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/templates/primary_screen/PrimaryScreenComposable.kt
@@ -0,0 +1,65 @@
+package be.ugent.sel.studeez.screens.templates.primary_screen
+
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.material.*
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Menu
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import be.ugent.sel.studeez.R
+import be.ugent.sel.studeez.common.composable.CollapsedAddButton
+import be.ugent.sel.studeez.common.composable.Drawer
+import be.ugent.sel.studeez.common.composable.NavigationBar
+import be.ugent.sel.studeez.resources
+import be.ugent.sel.studeez.ui.theme.StudeezTheme
+
+@Composable
+fun PrimaryScreen(
+ title: String,
+ openDrawer: () -> Unit,
+ onLogoutClick: () -> Unit,
+ scaffoldState: ScaffoldState,
+ content: @Composable (PaddingValues) -> Unit
+) {
+
+ Scaffold(
+ scaffoldState = scaffoldState,
+
+ topBar = { TopAppBar(
+ title = { Text(text = title) },
+ navigationIcon = {
+ IconButton(onClick = { openDrawer() }) {
+ Icon(
+ imageVector = Icons.Default.Menu,
+ contentDescription = resources().getString(R.string.menu)
+ )
+ }
+ }
+ ) },
+
+ drawerContent = {
+ Drawer(
+ currentUser = "TODO John Doe",
+ onLogoutClick = { onLogoutClick() }
+ )
+ },
+
+ bottomBar = { NavigationBar() }, // TODO Pass arguments so that the current tab etc can be shown
+ floatingActionButtonPosition = FabPosition.Center,
+ isFloatingActionButtonDocked = true,
+ floatingActionButton = { CollapsedAddButton() }
+ ) {
+ content(it)
+ }
+}
+
+@Preview
+@Composable
+fun PrimaryScreenPreview() {
+ StudeezTheme {
+ PrimaryScreen(
+ "Preview screen",
+ {}, {}, rememberScaffoldState()
+ ) {}
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/templates/primary_screen/PrimaryScreenUiState.kt b/app/src/main/java/be/ugent/sel/studeez/screens/templates/primary_screen/PrimaryScreenUiState.kt
new file mode 100644
index 0000000..93ede47
--- /dev/null
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/templates/primary_screen/PrimaryScreenUiState.kt
@@ -0,0 +1,14 @@
+package be.ugent.sel.studeez.screens.templates.primary_screen
+
+import androidx.compose.material.ScaffoldState
+import androidx.compose.material.rememberScaffoldState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import be.ugent.sel.studeez.StudeezAppstate
+
+@Composable
+fun rememberPrimaryScreenState(
+ scaffoldState: ScaffoldState = rememberScaffoldState()
+) = remember(scaffoldState) {
+ StudeezAppstate(scaffoldState)
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8c1a5aa..672586e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -8,6 +8,8 @@
Please insert a valid email.
Cancel
Try again
+ Go back
+ Menu
Create account
@@ -30,7 +32,7 @@
Log out
Profile Picture
- Studeez user
+ Normal user
Timers