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..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,12 +4,16 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable +import com.debatetimer.app.ui.home.HomePage @Composable fun MainNavHost(navController: NavHostController) { NavHost( navController = navController, - startDestination = NavItem.Login.route + startDestination = MainNavRoute.Home.value ) { + composable(route = MainNavRoute.Home.value) { + HomePage() + } } } \ 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..fae6822 --- /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 value: 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 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..13ca20c --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomePage.kt @@ -0,0 +1,47 @@ +package com.debatetimer.app.ui.home + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +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 +fun HomePage( + modifier: Modifier = Modifier, + viewModel: HomeViewModel = hiltViewModel() +) { + val navController = rememberNavController() + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route ?: BottomNavRoute.Tables.value + + Scaffold( + modifier = modifier, + bottomBar = { + BottomNavBar( + currentNavRoute = currentRoute, + onChangeNavRoute = { route -> + navController.navigate(route) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + ) + } + ) { innerPadding -> + HomeNavHost( + navController = navController, + modifier = Modifier.padding(innerPadding) + ) + } +} \ 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..800435e --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/HomeViewModel.kt @@ -0,0 +1,8 @@ +package com.debatetimer.app.ui.home + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class HomeViewModel @Inject constructor() : ViewModel() \ No newline at end of file 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..afa075b --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavBar.kt @@ -0,0 +1,34 @@ +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 + +@Composable +fun BottomNavBar( + currentNavRoute: String?, + onChangeNavRoute: (String) -> Unit, + modifier: Modifier = Modifier +) { + NavigationBar(modifier = modifier) { + bottomNavItems.forEach { item -> + val isSelected = item.route.value == currentNavRoute + + NavigationBarItem( + icon = { + Icon( + imageVector = if (isSelected) item.selectedIcon else item.unselectedIcon, + contentDescription = stringResource(item.labelId) + ) + }, + label = { Text(stringResource(item.labelId)) }, + selected = isSelected, + onClick = { if (!isSelected) onChangeNavRoute(item.route.value) } + ) + } + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..180ddfa --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavItem.kt @@ -0,0 +1,33 @@ +package com.debatetimer.app.ui.home.component + +import androidx.annotation.StringRes +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.AccessTimeFilled +import androidx.compose.material.icons.filled.Settings +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 + +data class BottomNavItem( + val route: BottomNavRoute, + val selectedIcon: ImageVector, + val unselectedIcon: ImageVector, + @StringRes val labelId: Int +) + +val bottomNavItems = listOf( + BottomNavItem( + BottomNavRoute.Tables, + Icons.Filled.AccessTimeFilled, + Icons.Outlined.AccessTime, + R.string.table + ), + BottomNavItem( + BottomNavRoute.Settings, + 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/ui/home/component/BottomNavRoute.kt b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt new file mode 100644 index 0000000..3e3d8f1 --- /dev/null +++ b/app/src/main/java/com/debatetimer/app/ui/home/component/BottomNavRoute.kt @@ -0,0 +1,8 @@ +package com.debatetimer.app.ui.home.component + +sealed class BottomNavRoute( + val value: String +) { + 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 new file mode 100644 index 0000000..71537bc --- /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.Tables.value, + modifier = modifier + ) { + composable(BottomNavRoute.Tables.value) { + // TODO: Need to replaced with actual view + Text("Tables") + } + + composable(BottomNavRoute.Settings.value) { + // TODO: Need to replaced with actual view + Text("Settings") + } + } +} \ 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..fd80eb1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,7 @@ Debate Timer + + + 설정 + 시간표 \ No newline at end of file