From 313cc53ac14dcda74cb75896d4717f98b1baf9a6 Mon Sep 17 00:00:00 2001 From: sonms Date: Sun, 6 Jul 2025 18:22:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat/#7:=20=EB=A9=94=EC=9D=B8=20=ED=83=AD?= =?UTF-8?q?=20=EC=8A=A4=ED=81=AC=EB=A6=B0=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/community/CommunityScreen.kt | 52 ++++++++++++++++++ .../presentation/ui/course/CourseScreen.kt | 52 ++++++++++++++++++ .../key/presentation/ui/home/HomeScreen.kt | 54 +++++++++++++++++++ .../presentation/ui/mypage/MyPageScreen.kt | 53 ++++++++++++++++++ 4 files changed, 211 insertions(+) create mode 100644 app/src/main/java/com/paw/key/presentation/ui/community/CommunityScreen.kt create mode 100644 app/src/main/java/com/paw/key/presentation/ui/course/CourseScreen.kt create mode 100644 app/src/main/java/com/paw/key/presentation/ui/home/HomeScreen.kt create mode 100644 app/src/main/java/com/paw/key/presentation/ui/mypage/MyPageScreen.kt diff --git a/app/src/main/java/com/paw/key/presentation/ui/community/CommunityScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/community/CommunityScreen.kt new file mode 100644 index 00000000..0ebf814d --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/community/CommunityScreen.kt @@ -0,0 +1,52 @@ +package com.paw.key.presentation.ui.community + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.paw.key.R + +@Composable +fun CommunityRoute( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + CommunityScreen( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + modifier = modifier, + ) +} + +@Composable +fun CommunityScreen( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + Text( + text = stringResource(R.string.ic_community_description), + modifier = modifier, + ) +} + +@Preview +@Composable +private fun CommunityScreenPreview() { + CommunityScreen( + paddingValues = PaddingValues(), + navigateUp = {}, + navigateNext = {}, + snackBarHostState = SnackbarHostState(), + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/CourseScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/course/CourseScreen.kt new file mode 100644 index 00000000..2a0793af --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/course/CourseScreen.kt @@ -0,0 +1,52 @@ +package com.paw.key.presentation.ui.course + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.paw.key.R + +@Composable +fun CourseRoute( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + CourseScreen( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + modifier = modifier, + ) +} + +@Composable +fun CourseScreen( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + Text( + text = stringResource(R.string.ic_course_description), + modifier = modifier, + ) +} + +@Preview +@Composable +private fun CourseScreenPreview() { + CourseScreen( + paddingValues = PaddingValues(), + navigateUp = {}, + navigateNext = {}, + snackBarHostState = SnackbarHostState(), + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/home/HomeScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/home/HomeScreen.kt new file mode 100644 index 00000000..df4ebccf --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/home/HomeScreen.kt @@ -0,0 +1,54 @@ +package com.paw.key.presentation.ui.home + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.paw.key.R + +@Composable +fun HomeRoute ( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier +) { + + HomeScreen( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + modifier = modifier + ) +} + +@Composable +fun HomeScreen ( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier +) { + // Todo : 변경 예정 + Text( + text = stringResource(R.string.ic_home_description), + modifier = modifier + ) +} + +@Preview +@Composable +private fun HomeScreenPreview() { + HomeScreen( + paddingValues = PaddingValues(), + navigateUp = {}, + navigateNext = {}, + snackBarHostState = SnackbarHostState(), + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/mypage/MyPageScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/mypage/MyPageScreen.kt new file mode 100644 index 00000000..fc9eb308 --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/mypage/MyPageScreen.kt @@ -0,0 +1,53 @@ +package com.paw.key.presentation.ui.mypage + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.paw.key.R +import com.paw.key.presentation.ui.mypage.navigation.MyPage + +@Composable +fun MyPageRoute( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + MyPageScreen( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + modifier = modifier, + ) +} + +@Composable +fun MyPageScreen( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier, +) { + Text( + text = stringResource(R.string.ic_mypage_description), + modifier = modifier, + ) +} + +@Preview +@Composable +private fun MyPageScreenPreview() { + MyPageScreen( + paddingValues = PaddingValues(), + navigateUp = {}, + navigateNext = {}, + snackBarHostState = SnackbarHostState(), + ) +} \ No newline at end of file From f8a748c961993773f9bb2f781aab6a873ccb081d Mon Sep 17 00:00:00 2001 From: sonms Date: Sun, 6 Jul 2025 18:22:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat/#7:=20=EB=A9=94=EC=9D=B8=20=ED=83=AD?= =?UTF-8?q?=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/CommunityNavigation.kt | 36 +++++++++++++++++ .../ui/course/navigation/CourseNavigation.kt | 36 +++++++++++++++++ .../ui/home/navigation/HomeNavigation.kt | 39 +++++++++++++++++++ .../ui/mypage/navigation/MyPageNavigation.kt | 36 +++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 app/src/main/java/com/paw/key/presentation/ui/community/navigation/CommunityNavigation.kt create mode 100644 app/src/main/java/com/paw/key/presentation/ui/course/navigation/CourseNavigation.kt create mode 100644 app/src/main/java/com/paw/key/presentation/ui/home/navigation/HomeNavigation.kt create mode 100644 app/src/main/java/com/paw/key/presentation/ui/mypage/navigation/MyPageNavigation.kt diff --git a/app/src/main/java/com/paw/key/presentation/ui/community/navigation/CommunityNavigation.kt b/app/src/main/java/com/paw/key/presentation/ui/community/navigation/CommunityNavigation.kt new file mode 100644 index 00000000..e0a1522a --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/community/navigation/CommunityNavigation.kt @@ -0,0 +1,36 @@ +package com.paw.key.presentation.ui.community.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.paw.key.core.navigation.MainTabRoute +import com.paw.key.presentation.ui.community.CommunityRoute +import kotlinx.serialization.Serializable + +fun NavController.navigateCommunity( + navOptions: NavOptions? +) { + navigate(Community, navOptions) +} + +fun NavGraphBuilder.communityNavGraph( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, +) { + composable { + CommunityRoute( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + ) + } +} + +@Serializable +data object Community : MainTabRoute \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/course/navigation/CourseNavigation.kt b/app/src/main/java/com/paw/key/presentation/ui/course/navigation/CourseNavigation.kt new file mode 100644 index 00000000..95cc92f6 --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/course/navigation/CourseNavigation.kt @@ -0,0 +1,36 @@ +package com.paw.key.presentation.ui.course.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.paw.key.core.navigation.MainTabRoute +import com.paw.key.presentation.ui.course.CourseRoute +import kotlinx.serialization.Serializable + +fun NavController.navigateCourse( + navOptions: NavOptions? +) { + navigate(Course, navOptions) +} + +fun NavGraphBuilder.courseNavGraph( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, +) { + composable { + CourseRoute( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + ) + } +} + +@Serializable +data object Course : MainTabRoute \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/home/navigation/HomeNavigation.kt b/app/src/main/java/com/paw/key/presentation/ui/home/navigation/HomeNavigation.kt new file mode 100644 index 00000000..72f24dfa --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/home/navigation/HomeNavigation.kt @@ -0,0 +1,39 @@ +package com.paw.key.presentation.ui.home.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.compose.ui.Modifier +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.paw.key.core.navigation.MainTabRoute +import com.paw.key.presentation.ui.home.HomeRoute +import kotlinx.serialization.Serializable + +fun NavController.navigateHome( + navOptions: NavOptions? +) { + navigate(Home, navOptions) +} + +fun NavGraphBuilder.homeNavGraph( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState, + modifier: Modifier = Modifier +) { + composable { + HomeRoute( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState, + modifier = modifier + ) + } +} + +@Serializable +data object Home : MainTabRoute \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/mypage/navigation/MyPageNavigation.kt b/app/src/main/java/com/paw/key/presentation/ui/mypage/navigation/MyPageNavigation.kt new file mode 100644 index 00000000..7a38f3d3 --- /dev/null +++ b/app/src/main/java/com/paw/key/presentation/ui/mypage/navigation/MyPageNavigation.kt @@ -0,0 +1,36 @@ +package com.paw.key.presentation.ui.mypage.navigation + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material3.SnackbarHostState +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.paw.key.core.navigation.MainTabRoute +import com.paw.key.presentation.ui.mypage.MyPageRoute +import kotlinx.serialization.Serializable + +fun NavController.navigateMyPage( + navOptions: NavOptions? +) { + navigate(MyPage, navOptions) +} + +fun NavGraphBuilder.myPageNavGraph( + paddingValues: PaddingValues, + navigateUp: () -> Unit, + navigateNext: () -> Unit, + snackBarHostState: SnackbarHostState +) { + composable { + MyPageRoute( + paddingValues = paddingValues, + navigateUp = navigateUp, + navigateNext = navigateNext, + snackBarHostState = snackBarHostState + ) + } +} + +@Serializable +data object MyPage : MainTabRoute \ No newline at end of file From 0457da1665485c0c75102f58c58d99050272c0e2 Mon Sep 17 00:00:00 2001 From: sonms Date: Sun, 6 Jul 2025 18:32:07 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat/#7:=20=EB=A9=94=EC=9D=B8=20=EB=B0=94?= =?UTF-8?q?=ED=85=80=20=EB=B0=94,=20=EA=B7=B8=EB=9E=98=ED=94=84,=20?= =?UTF-8?q?=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=ED=84=B0=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../key/presentation/ui/main/MainNavigator.kt | 15 ++- .../key/presentation/ui/main/MainScreen.kt | 55 ++++------ .../paw/key/presentation/ui/main/MainTab.kt | 55 +++++----- .../key/presentation/ui/main/PawKeyNavHost.kt | 34 +++++- .../ui/main/component/MainBottomBar.kt | 101 +++++++++++------- 5 files changed, 150 insertions(+), 110 deletions(-) diff --git a/app/src/main/java/com/paw/key/presentation/ui/main/MainNavigator.kt b/app/src/main/java/com/paw/key/presentation/ui/main/MainNavigator.kt index e9894a52..eefe1b9e 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/main/MainNavigator.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/main/MainNavigator.kt @@ -9,9 +9,13 @@ import androidx.navigation.NavOptions import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import androidx.navigation.navOptions -import com.paw.key.presentation.ui.dummy.navigation.Dummy +import com.paw.key.presentation.ui.community.navigation.navigateCommunity +import com.paw.key.presentation.ui.course.navigation.navigateCourse import com.paw.key.presentation.ui.dummy.navigation.navigateDummy import com.paw.key.presentation.ui.dummy.next.navigateDummyNext +import com.paw.key.presentation.ui.home.navigation.Home +import com.paw.key.presentation.ui.home.navigation.navigateHome +import com.paw.key.presentation.ui.mypage.navigation.navigateMyPage class MainNavigator ( val navController: NavHostController @@ -20,7 +24,7 @@ class MainNavigator ( @Composable get() = navController .currentBackStackEntryAsState().value?.destination - val startDestination = Dummy + val startDestination = Home val currentTab : MainTab? @Composable get() = MainTab.find { tab -> @@ -40,9 +44,10 @@ class MainNavigator ( } when (tab) { - /* MainTab.HOME -> navController.navigateToHome(navOptions) - MainTab.ACCOUNT -> navController.navigateToAccount(navOptions)*/ - else -> {} + MainTab.HOME -> navController.navigateHome(navOptions) + MainTab.COURSE -> navController.navigateCourse(navOptions) + MainTab.COMMUNITY -> navController.navigateCommunity(navOptions) + MainTab.MYPAGE -> navController.navigateMyPage(navOptions) } } diff --git a/app/src/main/java/com/paw/key/presentation/ui/main/MainScreen.kt b/app/src/main/java/com/paw/key/presentation/ui/main/MainScreen.kt index 5f184bf8..5e44e405 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/main/MainScreen.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/main/MainScreen.kt @@ -1,22 +1,19 @@ package com.paw.key.presentation.ui.main -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import com.paw.key.presentation.ui.main.component.MainBottomBar import kotlinx.collections.immutable.toImmutableList @@ -38,34 +35,26 @@ private fun MainScreenContent( snackBarHostState: SnackbarHostState, modifier: Modifier = Modifier ) { - Scaffold( - modifier = Modifier - .background(color = Color.White) + Box( + modifier = modifier .windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Top)) .systemBarsPadding() - .fillMaxSize(), - content = { padding -> - Box(modifier = Modifier.fillMaxSize()) { - PawKeyNavHost( - navigator = navigator, - paddingValues = padding, - snackbarHostState = snackBarHostState, - modifier = Modifier.padding(padding) - ) - } - }, - bottomBar = { - MainBottomBar( - isVisible = navigator.showBottomBar(), - tabs = MainTab.entries.toImmutableList(), - currentTab = navigator.currentTab, - onTabSelected = navigator::navigate - ) - }, - snackbarHost = { - SnackbarHost( - hostState = snackBarHostState - ) - } - ) + .fillMaxSize() + ) { + PawKeyNavHost( + navigator = navigator, + paddingValues = PaddingValues(), + snackbarHostState = snackBarHostState, + modifier = modifier + ) + + MainBottomBar( + isVisible = navigator.showBottomBar(), + tabs = MainTab.entries.toImmutableList(), + currentTab = navigator.currentTab, + onTabSelected = navigator::navigate, + modifier = modifier + .align(Alignment.BottomCenter) + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/presentation/ui/main/MainTab.kt b/app/src/main/java/com/paw/key/presentation/ui/main/MainTab.kt index 3d0871dd..847fd7b9 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/main/MainTab.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/main/MainTab.kt @@ -3,50 +3,53 @@ package com.paw.key.presentation.ui.main import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.compose.runtime.Composable +import com.paw.key.R import com.paw.key.core.navigation.MainTabRoute +import com.paw.key.presentation.ui.home.navigation.Home +import com.paw.key.presentation.ui.course.navigation.Course +import com.paw.key.presentation.ui.community.navigation.Community +import com.paw.key.presentation.ui.mypage.navigation.MyPage +import com.paw.key.R.string.ic_home_description +import com.paw.key.R.string.ic_course_description +import com.paw.key.R.string.ic_community_description +import com.paw.key.R.string.ic_mypage_description import com.paw.key.core.navigation.Route + enum class MainTab( @DrawableRes val selectedIcon: Int, @DrawableRes val unselectedIcon: Int, @StringRes val contentDescription: Int, val route: MainTabRoute, ) { - ; - /*HOME( + // Todo : 아이콘 및 라벨 변경 예정 + HOME( selectedIcon = R.drawable.baseline_home_filled_24, unselectedIcon = R.drawable.baseline_home_filled_24, - contentDescription = R.string.home, + contentDescription = ic_home_description, route = Home, ), - SEARCH( - selectedIcon = R.drawable.baseline_search_24, - unselectedIcon = R.drawable.baseline_search_24, - contentDescription = R.string.search, - route = Search, - ), - - COUPON( - selectedIcon = R.drawable.coupon_icon, - unselectedIcon = R.drawable.coupon_icon, - contentDescription = R.string.coupon, - route = Coupon, + COURSE( + selectedIcon = R.drawable.baseline_home_filled_24, + unselectedIcon = R.drawable.baseline_home_filled_24, + contentDescription = ic_course_description, + route = Course, ), - SCRAP( - selectedIcon = R.drawable.baseline_star_24, - unselectedIcon = R.drawable.baseline_star_24, - contentDescription = R.string.scrap, - route = Scrap, + COMMUNITY( + selectedIcon = R.drawable.baseline_home_filled_24, + unselectedIcon = R.drawable.baseline_home_filled_24, + contentDescription = ic_community_description, + route = Community, ), - ACCOUNT( - selectedIcon = R.drawable.account_icon, - unselectedIcon = R.drawable.account_icon, - contentDescription = R.string.account, - route = Account, - );*/ + MYPAGE( + selectedIcon = R.drawable.baseline_home_filled_24, + unselectedIcon = R.drawable.baseline_home_filled_24, + contentDescription = ic_mypage_description, + route = MyPage, + ); companion object { @Composable diff --git a/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt b/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt index 2c52f27c..52b36222 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/main/PawKeyNavHost.kt @@ -7,8 +7,12 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost +import com.paw.key.presentation.ui.community.navigation.communityNavGraph +import com.paw.key.presentation.ui.course.navigation.courseNavGraph import com.paw.key.presentation.ui.dummy.navigation.dummyNavGraph import com.paw.key.presentation.ui.dummy.next.dummyNextNavGraph +import com.paw.key.presentation.ui.home.navigation.homeNavGraph +import com.paw.key.presentation.ui.mypage.navigation.myPageNavGraph @Composable fun PawKeyNavHost ( @@ -25,15 +29,35 @@ fun PawKeyNavHost ( popEnterTransition = { EnterTransition.None }, popExitTransition = { ExitTransition.None }, ) { - /* - * homeGraph( + homeNavGraph ( paddingValues = paddingValues, navigateUp = navigator.navController::navigateUp, - navigateNext = navigator.navController::navigateToCuration, - snackbarHostState = snackbarHostState, + navigateNext = navigator.navController::navigateUp, + snackBarHostState = snackbarHostState, modifier = modifier, ) - * */ + + courseNavGraph( + paddingValues = paddingValues, + navigateUp = navigator::navigateUp, + navigateNext = navigator::navigateDummyNext, + snackBarHostState = snackbarHostState + ) + + communityNavGraph( + paddingValues = paddingValues, + navigateUp = navigator::navigateUp, + navigateNext = navigator::navigateDummyNext, + snackBarHostState = snackbarHostState + ) + + myPageNavGraph( + paddingValues = paddingValues, + navigateUp = navigator::navigateUp, + navigateNext = navigator::navigateDummyNext, + snackBarHostState = snackbarHostState + ) + dummyNavGraph( paddingValues = paddingValues, navigateUp = navigator::navigateUp, diff --git a/app/src/main/java/com/paw/key/presentation/ui/main/component/MainBottomBar.kt b/app/src/main/java/com/paw/key/presentation/ui/main/component/MainBottomBar.kt index dbe38c5e..8fa79e34 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/main/component/MainBottomBar.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/main/component/MainBottomBar.kt @@ -3,25 +3,24 @@ package com.paw.key.presentation.ui.main.component import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.selection.selectableGroup +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface -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.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource @@ -32,6 +31,7 @@ import com.paw.key.core.designsystem.theme.PawKeyTheme import com.paw.key.core.util.noRippleClickable import com.paw.key.presentation.ui.main.MainTab import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList @Composable @@ -42,32 +42,42 @@ fun MainBottomBar( onTabSelected: (MainTab) -> Unit, modifier: Modifier = Modifier, ) { - AnimatedVisibility( - visible = isVisible, + AnimatedVisibility ( + visible = true, enter = EnterTransition.None, exit = ExitTransition.None, + modifier = modifier ) { - Surface( - color = Color.White, + Box ( + modifier = Modifier + .background(Color.Transparent) + .fillMaxWidth() + .padding(bottom = 12.dp), + contentAlignment = Alignment.Center ) { - Row( - modifier = modifier - .fillMaxWidth() - .navigationBarsPadding() - .padding(horizontal = 5.dp) - .selectableGroup(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, + Surface( + color = Color.Black, + shape = RoundedCornerShape(200.dp), + shadowElevation = 10.dp, + modifier = Modifier ) { - tabs.forEach { tab -> - MainNavigationBarItem( - selected = tab == currentTab, - tab = tab, - onClick = { onTabSelected(tab) }, - modifier = Modifier - .weight(1f) - .padding(vertical = 12.dp), - ) + Row( + modifier = Modifier + .selectableGroup(), + horizontalArrangement = Arrangement.SpaceAround, + verticalAlignment = Alignment.CenterVertically + ) { + tabs.forEach { tab -> + MainNavigationBarItem( + selected = tab == currentTab, + tab = tab, + onClick = { + onTabSelected(tab) + }, + modifier = modifier + .padding(6.dp), + ) + } } } } @@ -84,36 +94,45 @@ private fun MainNavigationBarItem( //Todo : 색상 교환예정 val iconRes = if (selected) tab.selectedIcon else tab.unselectedIcon - val textColor = if (selected) Color.Black else Color.Gray + val iconColor = if (selected) Color.Green else Color.White + + val backGroundColor = if (selected) Color.White else Color.Transparent - Column( + Box ( modifier = modifier - .noRippleClickable(onClick), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(4.dp), + .noRippleClickable(onClick) + .clip(RoundedCornerShape(24.dp)) + .background(backGroundColor) + .size(48.dp), + contentAlignment = Alignment.Center ) { Icon( imageVector = ImageVector.vectorResource(iconRes), contentDescription = stringResource(tab.contentDescription), - tint = Color.Unspecified, - modifier = Modifier.size(24.dp), - ) - Text( - text = stringResource(tab.contentDescription), - style = MaterialTheme.typography.labelSmall + tint = iconColor, + modifier = Modifier + .padding(12.dp) + .size(24.dp), ) } } -@Preview +@Preview(showBackground = false) @Composable private fun MainBottomBarPreview() { PawKeyTheme { - //Todo : MainTab 생성 후 변경 예정 - var currentTab by remember { mutableStateOf(null) } + val dummyTabs = persistentListOf( + MainTab.HOME, + MainTab.COURSE, + MainTab.COMMUNITY, + MainTab.MYPAGE + ) + + val currentTab by remember { mutableStateOf(MainTab.HOME) } + MainBottomBar( isVisible = true, - tabs = MainTab.entries.toImmutableList(), + tabs = dummyTabs.toImmutableList(), currentTab = currentTab, onTabSelected = { } )