From fd7316d8b2308b15ccf39dd68bdf29024989cb17 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 21:06:00 +0900 Subject: [PATCH 01/16] feat: add sealed classes that defines routes --- .../app/navigation/BottomNavItem.kt | 32 +++++++++++++++++++ .../app/navigation/BottomNavRoute.kt | 8 +++++ .../app/navigation/MainNavRoute.kt | 8 +++++ .../com/debatetimer/app/navigation/NavItem.kt | 8 ----- 4 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt create mode 100644 app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt create mode 100644 app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt delete mode 100644 app/src/main/java/com/debatetimer/app/navigation/NavItem.kt diff --git a/app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt b/app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt new file mode 100644 index 0000000..84a011b --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt @@ -0,0 +1,32 @@ +package com.debatetimer.app.navigation + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.outlined.Home +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.ui.graphics.vector.ImageVector +import com.debatetimer.app.R + +data class BottomNavItem( + val route: BottomNavRoute, + val selectedIcon: ImageVector, + val unselectedIcon: ImageVector, + val labelId: Int +) + +val bottomNavItems = listOf( + BottomNavItem( + BottomNavRoute.Home, + Icons.Filled.Home, + Icons.Outlined.Home, + R.string.home + ), + BottomNavItem( + BottomNavRoute.Setting, + Icons.Filled.Settings, + Icons.Outlined.Settings, + R.string.setting + ) + +) \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt b/app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt new file mode 100644 index 0000000..f413d8c --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt @@ -0,0 +1,8 @@ +package com.debatetimer.app.navigation + +sealed class BottomNavRoute( + val route: String +) { + object Home : BottomNavRoute("/home") + object Setting : BottomNavRoute("/setting") +} \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt b/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt new file mode 100644 index 0000000..c84cc61 --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt @@ -0,0 +1,8 @@ +package com.debatetimer.app.navigation + +sealed class MainNavRoute( + val route: String, +) { + object Home : MainNavRoute("home") + object Login : MainNavRoute("login") +} \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/navigation/NavItem.kt b/app/src/main/java/com/debatetimer/app/navigation/NavItem.kt deleted file mode 100644 index 32e5253..0000000 --- a/app/src/main/java/com/debatetimer/app/navigation/NavItem.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.debatetimer.app.navigation - -sealed class NavItem( - val route: String, -) { - object Home : NavItem("home") - object Login : NavItem("login") -} \ No newline at end of file From a5dbcba933b9f84f26d59cfec244677527228ee2 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 21:07:55 +0900 Subject: [PATCH 02/16] feat: add BottomNavBar --- .../app/ui/home/component/BottomNavBar.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt new file mode 100644 index 0000000..ce51535 --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt @@ -0,0 +1,36 @@ +package com.debatetimer.app.ui.home.component + +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.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import com.debatetimer.app.navigation.BottomNavRoute +import com.debatetimer.app.navigation.bottomNavItems + +@Composable +fun BottomNavBar( + currentNavRoute: BottomNavRoute, + onChangeNavRoute: (BottomNavRoute) -> Unit, + modifier: Modifier = Modifier +) { + NavigationBar(modifier = modifier) { + bottomNavItems.forEach { item -> + val isSelected = item.route == currentNavRoute + + NavigationBarItem( + icon = { + Icon( + imageVector = if (isSelected) item.selectedIcon else item.unselectedIcon, + contentDescription = stringResource(item.labelId) + ) + }, + label = { Text(stringResource(item.labelId)) }, + selected = isSelected, + onClick = { onChangeNavRoute(item.route) } + ) + } + } +} \ No newline at end of file From 5b8b4973b7a4a778fdd602f8de12bda26d614a97 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 21:08:12 +0900 Subject: [PATCH 03/16] feat: add HomePage and its view model --- .../com/debatetimer/app/ui/home/HomePage.kt | 30 +++++++++++++++++++ .../debatetimer/app/ui/home/HomeViewModel.kt | 19 ++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt create mode 100644 app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt diff --git a/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt new file mode 100644 index 0000000..cfef1fe --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt @@ -0,0 +1,30 @@ +package com.debatetimer.app.ui.home + +import androidx.compose.foundation.layout.Box +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 androidx.hilt.navigation.compose.hiltViewModel +import com.debatetimer.app.ui.home.component.BottomNavBar + +@Composable +fun HomePage( + modifier: Modifier = Modifier, + viewModel: HomeViewModel = hiltViewModel() +) { + Scaffold( + modifier = modifier, + bottomBar = { + BottomNavBar( + currentNavRoute = viewModel.currentNavRoute.value, + onChangeNavRoute = { index -> viewModel.setNavRoute(index) } + ) + } + ) { innerPadding -> + Box(modifier = Modifier.padding(innerPadding)) { + Text("안녕") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt b/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt new file mode 100644 index 0000000..4f961aa --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt @@ -0,0 +1,19 @@ +package com.debatetimer.app.ui.home + +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.ViewModel +import com.debatetimer.app.navigation.BottomNavRoute +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class HomeViewModel @Inject constructor() : ViewModel() { + private val _currentNavRoute = mutableStateOf(BottomNavRoute.Home) + val currentNavRoute: State = _currentNavRoute + + fun setNavRoute(index: BottomNavRoute) { + _currentNavRoute.value = index + } + +} \ No newline at end of file From 1748db16095c440ace91347acbedfc60c109f7ad Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 21:08:29 +0900 Subject: [PATCH 04/16] feat: add HomePage to the main navigation graph --- .../com/debatetimer/app/navigation/MainNavHost.kt | 12 +++++++++++- app/src/main/res/values/strings.xml | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt b/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt index 089f3f1..bcddae1 100644 --- a/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt +++ b/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt @@ -4,12 +4,22 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable +import androidx.navigation.navigation +import com.debatetimer.app.ui.home.HomePage @Composable fun MainNavHost(navController: NavHostController) { NavHost( navController = navController, - startDestination = NavItem.Login.route + startDestination = MainNavRoute.Home.route ) { + navigation( + route = MainNavRoute.Home.route, + startDestination = BottomNavRoute.Home.route + ) { + composable(BottomNavRoute.Home.route) { + HomePage() + } + } } } \ 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 83f7159..ac0a77f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ Debate Timer + + + 설정 \ No newline at end of file From 1776ea19ef2cf289c955d237e5ec31652f9a5f18 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 21:50:52 +0900 Subject: [PATCH 05/16] refactor: add slash on main navigation routes --- .../main/java/com/debatetimer/app/navigation/MainNavRoute.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt b/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt index c84cc61..895a051 100644 --- a/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt +++ b/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt @@ -3,6 +3,6 @@ package com.debatetimer.app.navigation sealed class MainNavRoute( val route: String, ) { - object Home : MainNavRoute("home") - object Login : MainNavRoute("login") + object Home : MainNavRoute("/home") + object Login : MainNavRoute("/login") } \ No newline at end of file From 03049df6267550082b17a524320e5abce6a5b334 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:48:11 +0900 Subject: [PATCH 06/16] chore: move bottom navigation bar related files --- .../app/{navigation => ui/home/component}/BottomNavItem.kt | 2 +- .../app/{navigation => ui/home/component}/BottomNavRoute.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename app/src/main/java/com/debatetimer/app/{navigation => ui/home/component}/BottomNavItem.kt (94%) rename app/src/main/java/com/debatetimer/app/{navigation => ui/home/component}/BottomNavRoute.kt (64%) diff --git a/app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt similarity index 94% rename from app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt rename to app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt index 84a011b..a67ac3e 100644 --- a/app/src/main/java/com/debatetimer/app/navigation/BottomNavItem.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt @@ -1,4 +1,4 @@ -package com.debatetimer.app.navigation +package com.debatetimer.app.ui.home.component import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Home diff --git a/app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt similarity index 64% rename from app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt rename to app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt index f413d8c..fe45970 100644 --- a/app/src/main/java/com/debatetimer/app/navigation/BottomNavRoute.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt @@ -1,7 +1,7 @@ -package com.debatetimer.app.navigation +package com.debatetimer.app.ui.home.component sealed class BottomNavRoute( - val route: String + val value: String ) { object Home : BottomNavRoute("/home") object Setting : BottomNavRoute("/setting") From 37ceaae291d4f4ec3745f9e009e85fddfc6cc98e Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:48:29 +0900 Subject: [PATCH 07/16] feat: add a NavHost for HomePage --- .../app/ui/home/component/HomeNavHost.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt new file mode 100644 index 0000000..b7c1b4a --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt @@ -0,0 +1,30 @@ +package com.debatetimer.app.ui.home.component + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable + +@Composable +fun HomeNavHost( + navController: NavHostController, + modifier: Modifier = Modifier +) { + NavHost( + navController = navController, + startDestination = BottomNavRoute.Home.value, + modifier = modifier + ) { + composable(BottomNavRoute.Home.value) { + // TODO: Need to replaced with actual view + Text("Home") + } + + composable(BottomNavRoute.Setting.value) { + // TODO: Need to replaced with actual view + Text("Setting") + } + } +} \ No newline at end of file From 36df1c1ba3d74dda3187d5726417ba293b8211c6 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:48:59 +0900 Subject: [PATCH 08/16] chore: change Route's attribute name --- .../main/java/com/debatetimer/app/navigation/MainNavRoute.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt b/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt index 895a051..fae6822 100644 --- a/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt +++ b/app/src/main/java/com/debatetimer/app/navigation/MainNavRoute.kt @@ -1,7 +1,7 @@ package com.debatetimer.app.navigation sealed class MainNavRoute( - val route: String, + val value: String, ) { object Home : MainNavRoute("/home") object Login : MainNavRoute("/login") From 763c920c7a3fe2b94920e41179e40e6131eeac9a Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:49:21 +0900 Subject: [PATCH 09/16] fix: remove unnecessary nested navigation graph --- .../com/debatetimer/app/navigation/MainNavHost.kt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt b/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt index bcddae1..8d11d5a 100644 --- a/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt +++ b/app/src/main/java/com/debatetimer/app/navigation/MainNavHost.kt @@ -4,22 +4,16 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable -import androidx.navigation.navigation import com.debatetimer.app.ui.home.HomePage @Composable fun MainNavHost(navController: NavHostController) { NavHost( navController = navController, - startDestination = MainNavRoute.Home.route + startDestination = MainNavRoute.Home.value ) { - navigation( - route = MainNavRoute.Home.route, - startDestination = BottomNavRoute.Home.route - ) { - composable(BottomNavRoute.Home.route) { - HomePage() - } + composable(route = MainNavRoute.Home.value) { + HomePage() } } } \ No newline at end of file From 2714b02f4c4ec8fd4472479212f8c63e4c79f57f Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:50:08 +0900 Subject: [PATCH 10/16] refactor: remove nav states from HomePage's view model --- .../com/debatetimer/app/ui/home/HomeViewModel.kt | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt b/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt index 4f961aa..800435e 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt @@ -1,19 +1,8 @@ package com.debatetimer.app.ui.home -import androidx.compose.runtime.State -import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel -import com.debatetimer.app.navigation.BottomNavRoute import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class HomeViewModel @Inject constructor() : ViewModel() { - private val _currentNavRoute = mutableStateOf(BottomNavRoute.Home) - val currentNavRoute: State = _currentNavRoute - - fun setNavRoute(index: BottomNavRoute) { - _currentNavRoute.value = index - } - -} \ No newline at end of file +class HomeViewModel @Inject constructor() : ViewModel() \ No newline at end of file From ca1626b9858cc0bd372e5a03af85f28fbbdad812 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:50:34 +0900 Subject: [PATCH 11/16] refactor: change the signature of BottomNavBar --- .../debatetimer/app/ui/home/component/BottomNavBar.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt index ce51535..1508371 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt @@ -7,18 +7,16 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import com.debatetimer.app.navigation.BottomNavRoute -import com.debatetimer.app.navigation.bottomNavItems @Composable fun BottomNavBar( - currentNavRoute: BottomNavRoute, - onChangeNavRoute: (BottomNavRoute) -> Unit, + currentNavRoute: String?, + onChangeNavRoute: (String) -> Unit, modifier: Modifier = Modifier ) { NavigationBar(modifier = modifier) { bottomNavItems.forEach { item -> - val isSelected = item.route == currentNavRoute + val isSelected = item.route.value == currentNavRoute NavigationBarItem( icon = { @@ -29,7 +27,7 @@ fun BottomNavBar( }, label = { Text(stringResource(item.labelId)) }, selected = isSelected, - onClick = { onChangeNavRoute(item.route) } + onClick = { onChangeNavRoute(item.route.value) } ) } } From c4d11013330a0a86d8a474e5754e9ba3fde45686 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sat, 6 Sep 2025 23:50:50 +0900 Subject: [PATCH 12/16] feat: add navHostController on HomePage --- .../com/debatetimer/app/ui/home/HomePage.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt index cfef1fe..e5ca1c4 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt @@ -1,30 +1,37 @@ package com.debatetimer.app.ui.home -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController import com.debatetimer.app.ui.home.component.BottomNavBar +import com.debatetimer.app.ui.home.component.HomeNavHost @Composable fun HomePage( modifier: Modifier = Modifier, viewModel: HomeViewModel = hiltViewModel() ) { + val navController = rememberNavController() + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route + Scaffold( modifier = modifier, bottomBar = { BottomNavBar( - currentNavRoute = viewModel.currentNavRoute.value, - onChangeNavRoute = { index -> viewModel.setNavRoute(index) } + currentNavRoute = currentRoute, + onChangeNavRoute = { route -> navController.navigate(route) } ) } ) { innerPadding -> - Box(modifier = Modifier.padding(innerPadding)) { - Text("안녕") - } + HomeNavHost( + navController = navController, + modifier = Modifier.padding(innerPadding) + ) } } \ No newline at end of file From 8ca8d7906df09808b4a3aaee4dde31dce46d9386 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sun, 7 Sep 2025 00:05:56 +0900 Subject: [PATCH 13/16] refactor: enhance navigation condition --- .../java/com/debatetimer/app/ui/home/component/BottomNavBar.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt index 1508371..afa075b 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt @@ -27,7 +27,7 @@ fun BottomNavBar( }, label = { Text(stringResource(item.labelId)) }, selected = isSelected, - onClick = { onChangeNavRoute(item.route.value) } + onClick = { if (!isSelected) onChangeNavRoute(item.route.value) } ) } } From 9610a1faae28fa7b5e763538f66a44544638b658 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sun, 7 Sep 2025 00:06:12 +0900 Subject: [PATCH 14/16] chore: add new word on strings.xml --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac0a77f..fd80eb1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,4 +3,5 @@ 설정 + 시간표 \ No newline at end of file From 24090b7612735457d3f572905d7fb56d80ac6524 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sun, 7 Sep 2025 00:11:16 +0900 Subject: [PATCH 15/16] chore: change home route to tables route --- .../app/ui/home/component/BottomNavItem.kt | 17 +++++++++-------- .../app/ui/home/component/BottomNavRoute.kt | 4 ++-- .../app/ui/home/component/HomeNavHost.kt | 10 +++++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt index a67ac3e..180ddfa 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt @@ -1,9 +1,10 @@ package com.debatetimer.app.ui.home.component +import androidx.annotation.StringRes import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.AccessTimeFilled import androidx.compose.material.icons.filled.Settings -import androidx.compose.material.icons.outlined.Home +import androidx.compose.material.icons.outlined.AccessTime import androidx.compose.material.icons.outlined.Settings import androidx.compose.ui.graphics.vector.ImageVector import com.debatetimer.app.R @@ -12,18 +13,18 @@ data class BottomNavItem( val route: BottomNavRoute, val selectedIcon: ImageVector, val unselectedIcon: ImageVector, - val labelId: Int + @StringRes val labelId: Int ) val bottomNavItems = listOf( BottomNavItem( - BottomNavRoute.Home, - Icons.Filled.Home, - Icons.Outlined.Home, - R.string.home + BottomNavRoute.Tables, + Icons.Filled.AccessTimeFilled, + Icons.Outlined.AccessTime, + R.string.table ), BottomNavItem( - BottomNavRoute.Setting, + BottomNavRoute.Settings, Icons.Filled.Settings, Icons.Outlined.Settings, R.string.setting diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt index fe45970..3e3d8f1 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt @@ -3,6 +3,6 @@ package com.debatetimer.app.ui.home.component sealed class BottomNavRoute( val value: String ) { - object Home : BottomNavRoute("/home") - object Setting : BottomNavRoute("/setting") + object Tables : BottomNavRoute("/tables") + object Settings : BottomNavRoute("/settings") } \ No newline at end of file diff --git a/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt index b7c1b4a..71537bc 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/HomeNavHost.kt @@ -14,17 +14,17 @@ fun HomeNavHost( ) { NavHost( navController = navController, - startDestination = BottomNavRoute.Home.value, + startDestination = BottomNavRoute.Tables.value, modifier = modifier ) { - composable(BottomNavRoute.Home.value) { + composable(BottomNavRoute.Tables.value) { // TODO: Need to replaced with actual view - Text("Home") + Text("Tables") } - composable(BottomNavRoute.Setting.value) { + composable(BottomNavRoute.Settings.value) { // TODO: Need to replaced with actual view - Text("Setting") + Text("Settings") } } } \ No newline at end of file From 78ea154e1e4b47d07a5b49fb32b94197fa8bee68 Mon Sep 17 00:00:00 2001 From: Shawn Kang Date: Sun, 7 Sep 2025 00:11:41 +0900 Subject: [PATCH 16/16] refactor: enhance navigate function of HomePage --- .../java/com/debatetimer/app/ui/home/HomePage.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt index e5ca1c4..13ca20c 100644 --- a/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt @@ -6,9 +6,11 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import com.debatetimer.app.ui.home.component.BottomNavBar +import com.debatetimer.app.ui.home.component.BottomNavRoute import com.debatetimer.app.ui.home.component.HomeNavHost @Composable @@ -18,14 +20,22 @@ fun HomePage( ) { val navController = rememberNavController() val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentRoute = navBackStackEntry?.destination?.route + val currentRoute = navBackStackEntry?.destination?.route ?: BottomNavRoute.Tables.value Scaffold( modifier = modifier, bottomBar = { BottomNavBar( currentNavRoute = currentRoute, - onChangeNavRoute = { route -> navController.navigate(route) } + onChangeNavRoute = { route -> + navController.navigate(route) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } ) } ) { innerPadding ->