Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ae5c8c5
[feat]: Onboarding NavGraph 구현(#56)
ikseong00 Mar 30, 2025
f0aa9c0
[feat]: Onboarding navigate 이동 기능 구현 (#56)
ikseong00 Mar 30, 2025
b55224f
[refactor]: LandingScreen navigate 함수 추가 (#56)
ikseong00 Mar 30, 2025
9890c59
[refactor]: LoginScreen navigate 함수 추가 (#56)
ikseong00 Mar 30, 2025
83162af
[refactor]: SignupEmailScreen navigate 함수 추가 (#56)
ikseong00 Mar 30, 2025
e2720ac
[refactor]: SignupPasswordScreen navigate 함수 추가 (#56)
ikseong00 Mar 30, 2025
2dcf092
[refactor]: SignupMealTimeScreen navigate 함수 추가 (#56)
ikseong00 Mar 30, 2025
1cf793b
[refactor]: SignupVerifyScreen navigate 함수 추가 (#56)
ikseong00 Mar 30, 2025
ab0b72c
[refactor]: startDestination 수정 (#56)
ikseong00 Mar 30, 2025
277eecc
[feat]: 바텀네비게이션 탭 Enum class 구현 (#56)
ikseong00 Mar 30, 2025
1994be4
[feat]: 바텀네비게이션 컴포넌트 구현 (#56)
ikseong00 Mar 30, 2025
07a4f45
[feat]: MainNavController 구현 (#56)
ikseong00 Mar 30, 2025
ea28d28
[feat]: MainNavHost 구현 (#56)
ikseong00 Mar 30, 2025
a41d764
[feat]: 각 바텀 탭 클릭 시 navigate 기능 추가 (#56)
ikseong00 Mar 30, 2025
f393cf3
[feat]: NavHost 에 각 NavGraph 추가 (#56)
ikseong00 Mar 30, 2025
083b409
[refactor]: SignunViewModel 을 backStackEntry 에 접근해 가져오도록 변경 (#56)
ikseong00 Mar 30, 2025
f56e7de
[refactor]: SignunViewModel 을 backStackEntry 에 접근해 가져오도록 변경 (#56)
ikseong00 Mar 30, 2025
2e621ed
Merge branch 'feat/navigation' of https://github.com/ikseong00/OurMen…
ikseong00 Mar 30, 2025
6ec15df
[refactor]: 상위 컴포넌트에서 viewModel 선언 후 재사용하는 로직으로 변경 (#56)
ikseong00 Mar 30, 2025
bea9ba4
[fix]: 오타 수정 (#56)
ikseong00 Mar 30, 2025
bea0527
[feat]: MainActivity 에 BottomBar 추가 (#56)
ikseong00 Mar 30, 2025
48bbb97
[feat]: 모든 NavGraph 에 패딩 추가 (#56)
ikseong00 Mar 30, 2025
f5aa304
[chore]: 바텀 탭에 해당하는 Routes 제거 (#56)
ikseong00 Mar 30, 2025
bc386dc
[fix]: 오타 수정 (#56)
ikseong00 Mar 30, 2025
d6637c2
[feat]: 네비게이션 바 그림자 추가 및 startDestination 변경 (#56)
ikseong00 Mar 30, 2025
4279c7d
Resolve Conflict
ikseong00 Mar 30, 2025
c6a9106
Merge branch 'develop' into feat/navigation
casper-jr Apr 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,15 @@ dependencies {
implementation(libs.androidx.lifecycle.runtime.compose.android)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.datastore.preferences)
implementation(libs.androidx.espresso.core)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
implementation(libs.kotlinx.collections.immutable)

// Dots Indicator
implementation("com.tbuonomo:dotsindicator:5.1.0")
Expand Down
36 changes: 32 additions & 4 deletions app/src/main/java/com/kuit/ourmenu/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,25 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.material3.Scaffold
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 com.kuit.ourmenu.ui.navigator.MainNavHost
import com.kuit.ourmenu.ui.navigator.MainTab
import com.kuit.ourmenu.ui.navigator.component.MainBottomBar
import com.kuit.ourmenu.ui.navigator.rememberMainNavigator
import androidx.navigation.compose.rememberNavController
import coil3.imageLoader
import com.kuit.ourmenu.ui.navigator.MainNavGraph
import com.kuit.ourmenu.ui.onboarding.screen.SplashScreen
import com.kuit.ourmenu.ui.theme.NeutralWhite
import com.kuit.ourmenu.ui.theme.OurMenuTheme
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.collections.immutable.toPersistentList

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
Expand All @@ -22,7 +31,9 @@ class MainActivity : ComponentActivity() {
enableEdgeToEdge()
setContent {
var showSplash by remember { mutableStateOf(true) }
val navController = rememberNavController()

val navController = rememberMainNavigator()

OurMenuTheme {
if (showSplash) {
SplashScreen(
Expand All @@ -31,8 +42,25 @@ class MainActivity : ComponentActivity() {
showSplash = false
}
} else {
// TODO: MainNavigation 추가하기
MainNavGraph(navController = navController)
Scaffold(
bottomBar = {
MainBottomBar(
modifier = Modifier
.background(NeutralWhite)
.navigationBarsPadding(),
visible = navController.shouldShowBottomBar(),
tabs = MainTab.entries.toPersistentList(),
currentTab = navController.currentTab,
onTabSelected = { navController.navigate(it) }
)
},
content = { innerPadding ->
MainNavHost(
navController = navController,
padding = innerPadding
)
}
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kuit.ourmenu.ui.home.navigation

import androidx.compose.foundation.layout.PaddingValues
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import com.kuit.ourmenu.ui.home.screen.HomeScreen
import com.kuit.ourmenu.ui.navigator.MainTabRoute

fun NavController.navigateToHome(navOptions: NavOptions) {
navigate(MainTabRoute.Home, navOptions)
}

fun NavGraphBuilder.homeNavGraph(
padding: PaddingValues,
// navigate 이벤트
) {
composable<MainTabRoute.Home> {
HomeScreen(
// navigate 이벤트 + 기타 이벤트
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,14 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.kuit.ourmenu.ui.common.topappbar.OurMenuAddButtonTopAppBar
import com.kuit.ourmenu.ui.home.component.recommendation.main.HomeMainRecommendation
import com.kuit.ourmenu.ui.home.component.recommendation.sub.HomeSubRecommendation
import com.kuit.ourmenu.ui.home.dummy.HomeDummyData

@Composable
fun HomeScreen(modifier: Modifier = Modifier, navController: NavHostController) {
fun HomeScreen(modifier: Modifier = Modifier) {

val scrollState = rememberScrollState()

Expand Down Expand Up @@ -69,5 +68,5 @@ fun HomeScreen(modifier: Modifier = Modifier, navController: NavHostController)
@Composable
private fun HomeScreenPreview() {
val navController = rememberNavController()
HomeScreen(navController = navController)
HomeScreen()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kuit.ourmenu.ui.menuFolder.navigation

import androidx.compose.foundation.layout.PaddingValues
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import com.kuit.ourmenu.ui.menuFolder.screen.MenuFolderScreen
import com.kuit.ourmenu.ui.navigator.MainTabRoute

fun NavController.navigateToMenuFolder(navOptions: NavOptions) {
navigate(MainTabRoute.MenuFolder, navOptions)
}

fun NavGraphBuilder.menuFolderNavGraph(
padding: PaddingValues,
// navigate 이벤트
) {
composable<MainTabRoute.MenuFolder> {
MenuFolderScreen(
// navigate 이벤트 + 기타 이벤트
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.kuit.ourmenu.ui.my.navigation

import androidx.compose.foundation.layout.PaddingValues
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import com.kuit.ourmenu.ui.navigator.MainTabRoute

fun NavController.navigateToMy(navOptions: NavOptions) {
navigate(MainTabRoute.My, navOptions)
}

fun NavGraphBuilder.myNavGraph(
padding: PaddingValues,
// navigate 이벤트
) {
composable<MainTabRoute.My> {
// MyScreen.kt
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package com.kuit.ourmenu.ui.navigator

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.navigation.NavDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navOptions
import com.kuit.ourmenu.ui.home.navigation.navigateToHome
import com.kuit.ourmenu.ui.menuFolder.navigation.navigateToMenuFolder
import com.kuit.ourmenu.ui.my.navigation.navigateToMy
import com.kuit.ourmenu.ui.onboarding.navigation.navigateOnboardingToHome
import com.kuit.ourmenu.ui.onboarding.navigation.navigateToLogin
import com.kuit.ourmenu.ui.onboarding.navigation.navigateToSignupEmail
import com.kuit.ourmenu.ui.onboarding.navigation.navigateToSignupMealTime
import com.kuit.ourmenu.ui.onboarding.navigation.navigateToSignupPassword
import com.kuit.ourmenu.ui.onboarding.navigation.navigateToSignupVerify
import com.kuit.ourmenu.ui.searchmenu.navigation.navigateToSearchMenu

class MainNavController(
val navController: NavHostController,
) {
private val currentDestination: NavDestination?
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination

val startDestination = Routes.Landing

val currentTab: MainTab?
@Composable get() = MainTab.entries.find { tab ->
currentDestination?.route == tab.route::class.qualifiedName
}

fun navigate(tab: MainTab) {
val navOptions = navOptions {
popUpTo(MainTab.HOME.route) {
inclusive = false
}
launchSingleTop = true
restoreState = true
}

when (tab) {
MainTab.HOME -> navController.navigateToHome(navOptions)
MainTab.MAP -> navController.navigateToSearchMenu(navOptions)
MainTab.MENU_FOLDER -> navController.navigateToMenuFolder(navOptions)
MainTab.MY -> navController.navigateToMy(navOptions)
}
}

// Back Pressed
fun navigateUp() {
navController.navigateUp()
}

// Onboarding
fun navigateToLogin() {
navController.navigateToLogin()
}

fun navigateToSignupEmail() {
navController.navigateToSignupEmail()
}

fun navigateToSignupPassword() {
navController.navigateToSignupPassword()
}

fun navigateToSignupMealTime() {
navController.navigateToSignupMealTime()
}

fun navigateToSignupVerify() {
navController.navigateToSignupVerify()
}

fun navigateOnboardingToHome() {
navController.navigateOnboardingToHome()
}

fun popBackStack() {
navController.popBackStack()
}

@Composable
fun shouldShowBottomBar(): Boolean = MainTab.contains {
currentDestination?.route?.startsWith(it::class.qualifiedName!!) == true
}
}

@Composable
fun rememberMainNavigator(
navController: NavHostController = rememberNavController(),
): MainNavController = remember(navController) {
MainNavController(navController)
}
79 changes: 0 additions & 79 deletions app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavGraph.kt

This file was deleted.

Loading