diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..f0c6ad0
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/PlaindoApp.kt b/app/src/main/java/com/dnsc/plaindo/PlaindoApp.kt
index 3b4ab2c..104bf76 100644
--- a/app/src/main/java/com/dnsc/plaindo/PlaindoApp.kt
+++ b/app/src/main/java/com/dnsc/plaindo/PlaindoApp.kt
@@ -1,24 +1,44 @@
package com.dnsc.plaindo
+import android.util.Log
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.DateRange
+import androidx.compose.material.icons.outlined.Home
+import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
-import com.dnsc.plaindo.ui.overview.PlaindoOverview
+import com.dnsc.plaindo.ui.agenda.PlaindoAgendaScreen
+import com.dnsc.plaindo.ui.components.BottomNavigation
+import com.dnsc.plaindo.ui.components.TopBar
import com.dnsc.plaindo.ui.overview.PlaindoOverviewScreen
-import com.dnsc.plaindo.ui.settings.PlaindoSettings
import com.dnsc.plaindo.ui.settings.PlaindoSettingsScreen
@Composable
fun PlaindoApp() {
+ val topLevelRoutes = listOf(
+ TopLevelRoute("Home", "overview", Icons.Outlined.Home),
+ TopLevelRoute("Agenda", "agenda", Icons.Outlined.DateRange),
+ )
val navController = rememberNavController()
- NavHost(navController, startDestination = PlaindoOverview) {
- composable {
- PlaindoOverviewScreen()
- }
- composable {
- PlaindoSettingsScreen()
+ Scaffold(
+ topBar = {
+ TopBar("Plaindo", navController)
+ },
+ bottomBar = { BottomNavigation(navController, topLevelRoutes) }
+ ) { innerPadding ->
+ NavHost(navController, startDestination = "overview") {
+ composable("overview") {
+ PlaindoOverviewScreen(navController, innerPadding)
+ }
+ composable("agenda") {
+ PlaindoAgendaScreen(innerPadding)
+ }
+ composable("settings") {
+ PlaindoSettingsScreen(innerPadding)
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/TopLevelRoute.kt b/app/src/main/java/com/dnsc/plaindo/TopLevelRoute.kt
new file mode 100644
index 0000000..1031cca
--- /dev/null
+++ b/app/src/main/java/com/dnsc/plaindo/TopLevelRoute.kt
@@ -0,0 +1,6 @@
+package com.dnsc.plaindo
+
+import androidx.compose.ui.graphics.vector.ImageVector
+
+data class TopLevelRoute(val name: String, val route: String, val icon: ImageVector)
+
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/agenda/PlaindoAgenda.kt b/app/src/main/java/com/dnsc/plaindo/ui/agenda/PlaindoAgenda.kt
new file mode 100644
index 0000000..379d087
--- /dev/null
+++ b/app/src/main/java/com/dnsc/plaindo/ui/agenda/PlaindoAgenda.kt
@@ -0,0 +1,6 @@
+package com.dnsc.plaindo.ui.agenda
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+object PlaindoAgenda
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/agenda/PlaindoAgendaScreen.kt b/app/src/main/java/com/dnsc/plaindo/ui/agenda/PlaindoAgendaScreen.kt
new file mode 100644
index 0000000..2ebcd83
--- /dev/null
+++ b/app/src/main/java/com/dnsc/plaindo/ui/agenda/PlaindoAgendaScreen.kt
@@ -0,0 +1,15 @@
+package com.dnsc.plaindo.ui.agenda
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+
+@Composable
+fun PlaindoAgendaScreen(innerPadding: PaddingValues) {
+ Column(modifier = Modifier.padding(innerPadding)) {
+ Text(text = "Agenda")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/components/BottomNavigation.kt b/app/src/main/java/com/dnsc/plaindo/ui/components/BottomNavigation.kt
new file mode 100644
index 0000000..0c44523
--- /dev/null
+++ b/app/src/main/java/com/dnsc/plaindo/ui/components/BottomNavigation.kt
@@ -0,0 +1,42 @@
+package com.dnsc.plaindo.ui.components
+
+import android.util.Log
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.DateRange
+import androidx.compose.material.icons.outlined.Home
+import androidx.compose.material.icons.outlined.List
+import androidx.compose.material3.Icon
+import androidx.compose.material3.NavigationBar
+import androidx.compose.material3.NavigationBarItem
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.navigation.NavDestination.Companion.hierarchy
+import androidx.navigation.NavGraph.Companion.findStartDestination
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.currentBackStackEntryAsState
+import com.dnsc.plaindo.TopLevelRoute
+
+@Composable
+fun BottomNavigation(navController: NavHostController, topLevelRoutes: List) {
+ NavigationBar {
+ val navBackStackEntry = navController.currentBackStackEntryAsState().value
+ val currentDestination = navBackStackEntry?.destination
+
+ topLevelRoutes.forEach { topLevelRoute ->
+ NavigationBarItem(
+ icon = { Icon(topLevelRoute.icon, contentDescription = topLevelRoute.name) },
+ label = { Text(topLevelRoute.name) },
+ selected = currentDestination?.hierarchy?.any { it.route == topLevelRoute.route } == true,
+ onClick = {
+ navController.navigate(topLevelRoute.route) {
+ popUpTo(navController.graph.findStartDestination().id) {
+ saveState = true
+ }
+ launchSingleTop = true
+ restoreState = true
+ }
+ }
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/shared/TopBar.kt b/app/src/main/java/com/dnsc/plaindo/ui/components/TopBar.kt
similarity index 56%
rename from app/src/main/java/com/dnsc/plaindo/ui/shared/TopBar.kt
rename to app/src/main/java/com/dnsc/plaindo/ui/components/TopBar.kt
index 987421d..51a92d3 100644
--- a/app/src/main/java/com/dnsc/plaindo/ui/shared/TopBar.kt
+++ b/app/src/main/java/com/dnsc/plaindo/ui/components/TopBar.kt
@@ -1,23 +1,30 @@
-package com.dnsc.plaindo.ui.shared
+package com.dnsc.plaindo.ui.components
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.NavHostController
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun TopBar(title: String) {
+fun TopBar(title: String, navController: NavHostController) {
TopAppBar(
title = {
Text(
text = title,
- modifier = Modifier.fillMaxWidth(),
+ modifier = Modifier.fillMaxWidth().padding(start = 12.dp),
textAlign = TextAlign.Left
)
+ },
+ actions = {
+ TopBarMenu(navController)
}
)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/components/TopBarMenu.kt b/app/src/main/java/com/dnsc/plaindo/ui/components/TopBarMenu.kt
new file mode 100644
index 0000000..b723c90
--- /dev/null
+++ b/app/src/main/java/com/dnsc/plaindo/ui/components/TopBarMenu.kt
@@ -0,0 +1,68 @@
+package com.dnsc.plaindo.ui.components
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.MoreVert
+import androidx.compose.material.icons.outlined.Menu
+import androidx.compose.material.icons.outlined.Search
+import androidx.compose.material.icons.outlined.Settings
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.DropdownMenuItem
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
+import androidx.navigation.NavGraph.Companion.findStartDestination
+import androidx.navigation.NavHostController
+
+@Composable
+fun TopBarMenu(navController: NavHostController) {
+ var expanded by remember { mutableStateOf(false) }
+
+ Box(
+ modifier = Modifier
+ .padding(16.dp)
+ ) {
+ IconButton(onClick = { expanded = !expanded }) {
+ Icon(Icons.Default.MoreVert, contentDescription = "More options")
+ }
+ DropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { expanded = false }
+ ) {
+ DropdownMenuItem(
+ leadingIcon = { Icon(Icons.Outlined.Menu, contentDescription = "Filter", modifier = Modifier.padding(start = 12.dp)) },
+ text = { Text("Filter", fontSize = 16.sp, modifier = Modifier.padding(end = 16.dp)) },
+ onClick = { /* Do something... */ }
+ )
+ DropdownMenuItem(
+ leadingIcon = { Icon(Icons.Outlined.Search, contentDescription = "Search", modifier = Modifier.padding(start = 12.dp)) },
+ text = { Text("Search", fontSize = 16.sp, modifier = Modifier.padding(end = 16.dp)) },
+ onClick = { /* Do something... */ }
+ )
+ DropdownMenuItem(
+ leadingIcon = { Icon(Icons.Outlined.Settings, contentDescription = "Settings", modifier = Modifier.padding(start = 12.dp)) },
+ text = { Text("Settings", fontSize = 16.sp, modifier = Modifier.padding(end = 16.dp)) },
+ onClick = {
+ navController.navigate("settings") {
+ popUpTo(navController.graph.findStartDestination().id) {
+ saveState = true
+ }
+ launchSingleTop = true
+ restoreState = true
+ }
+ expanded = false
+ }
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/overview/PlaindoOverviewScreen.kt b/app/src/main/java/com/dnsc/plaindo/ui/overview/PlaindoOverviewScreen.kt
index 262e1d5..cf467d2 100644
--- a/app/src/main/java/com/dnsc/plaindo/ui/overview/PlaindoOverviewScreen.kt
+++ b/app/src/main/java/com/dnsc/plaindo/ui/overview/PlaindoOverviewScreen.kt
@@ -1,24 +1,17 @@
package com.dnsc.plaindo.ui.overview
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import com.dnsc.plaindo.ui.shared.TopBar
+import androidx.navigation.NavHostController
+import com.dnsc.plaindo.ui.components.TopBar
@Composable
-fun PlaindoOverviewScreen() {
- Scaffold(
- topBar = {
- TopBar(title = "Overview")
- }
- ) { innerPadding ->
- Column(
- modifier = Modifier.padding(innerPadding)
- ) {
- Text(text = "Overview")
- }
+fun PlaindoOverviewScreen(navController: NavHostController, innerPadding: PaddingValues) {
+ Column(modifier = Modifier.padding(innerPadding)) {
+ Text(text = "Overview")
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/dnsc/plaindo/ui/settings/PlaindoSettingsScreen.kt b/app/src/main/java/com/dnsc/plaindo/ui/settings/PlaindoSettingsScreen.kt
index e0cfaaf..693563b 100644
--- a/app/src/main/java/com/dnsc/plaindo/ui/settings/PlaindoSettingsScreen.kt
+++ b/app/src/main/java/com/dnsc/plaindo/ui/settings/PlaindoSettingsScreen.kt
@@ -1,24 +1,15 @@
package com.dnsc.plaindo.ui.settings
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import com.dnsc.plaindo.ui.shared.TopBar
@Composable
-fun PlaindoSettingsScreen() {
- Scaffold(
- topBar = {
- TopBar(title = "Settings")
- }
- ) { innerPadding ->
- Column(
- modifier = Modifier.padding(innerPadding)
- ) {
- Text(text = "Settings")
- }
+fun PlaindoSettingsScreen(innerPadding: PaddingValues) {
+ Column(modifier = Modifier.padding(innerPadding)) {
+ Text(text = "Settings")
}
-}
\ No newline at end of file
+}