|
1 | 1 | package com.yapp.common.navigation |
2 | 2 |
|
| 3 | +import android.util.Log |
3 | 4 | import androidx.compose.runtime.Composable |
4 | 5 | import androidx.compose.runtime.remember |
5 | | -import androidx.navigation.NavDestination |
6 | 6 | import androidx.navigation.NavHostController |
7 | | -import androidx.navigation.compose.currentBackStackEntryAsState |
| 7 | +import androidx.navigation.NavOptions |
8 | 8 | import androidx.navigation.compose.rememberNavController |
9 | | -import androidx.navigation.navOptions |
10 | | -import com.yapp.common.navigation.destination.HomeDestination |
11 | | -import com.yapp.common.navigation.destination.SplashDestination |
12 | | -import com.yapp.common.navigation.destination.TopLevelDestination |
| 9 | +import com.yapp.common.navigation.route.AlarmInteractionDestination |
| 10 | +import com.yapp.common.navigation.route.FortuneBaseRoute |
| 11 | +import com.yapp.common.navigation.route.FortuneDestination |
| 12 | +import com.yapp.common.navigation.route.HomeBaseRoute |
| 13 | +import com.yapp.common.navigation.route.HomeDestination |
| 14 | +import com.yapp.common.navigation.route.OnboardingBaseRoute |
| 15 | +import com.yapp.common.navigation.route.OnboardingDestination |
| 16 | +import com.yapp.common.navigation.route.SettingBaseRoute |
| 17 | +import com.yapp.common.navigation.route.SettingDestination |
| 18 | +import com.yapp.common.navigation.route.SplashRoute |
| 19 | +import com.yapp.common.navigation.route.WebViewRoute |
| 20 | +import com.yapp.domain.model.Alarm |
13 | 21 |
|
14 | 22 | class OrbitNavigator( |
15 | 23 | val navController: NavHostController, |
16 | 24 | ) { |
17 | | - val startDestination = SplashDestination.Route.route |
18 | | - |
19 | | - private val currentDestination: NavDestination? |
20 | | - @Composable get() = navController |
21 | | - .currentBackStackEntryAsState().value?.destination |
22 | | - |
23 | | - val currentTab: TopLevelDestination? |
24 | | - @Composable get() = currentDestination |
25 | | - ?.route |
26 | | - ?.let(TopLevelDestination.Companion::find) |
27 | | - |
28 | | - fun navigateTo(route: String, popUpTo: String? = null, inclusive: Boolean = false) { |
29 | | - navController.navigate(route) { |
30 | | - popUpTo?.let { |
31 | | - popUpTo(it) { this.inclusive = inclusive } |
32 | | - } |
33 | | - launchSingleTop = true |
34 | | - restoreState = true |
| 25 | + val startDestination = SplashRoute |
| 26 | + |
| 27 | + fun navigateToOnboarding(navOptions: NavOptions? = null) { |
| 28 | + navController.navigate(OnboardingBaseRoute, navOptions) |
| 29 | + } |
| 30 | + |
| 31 | + fun navigateToOnboardingNextStep(currentStep: Int, navOptions: NavOptions? = null) { |
| 32 | + val instance = OnboardingDestination.getNextRouteForStep(currentStep)?.objectInstance |
| 33 | + if (instance != null) { |
| 34 | + navController.navigate(instance, navOptions) |
| 35 | + } else { |
| 36 | + Log.e("Navigator", "Invalid route at step: $currentStep") |
35 | 37 | } |
36 | 38 | } |
37 | 39 |
|
38 | | - fun navigateBack() { |
39 | | - navController.popBackStack() |
| 40 | + fun navigateToAddAlarm(navOptions: NavOptions? = null) { |
| 41 | + navController.navigate(HomeDestination.AlarmAddEdit(-1), navOptions) |
40 | 42 | } |
41 | 43 |
|
42 | | - fun navigateToTopLevelDestination(tab: TopLevelDestination) { |
43 | | - val navOptions = navOptions { |
44 | | - popUpTo(Routes.Home.ROUTE) { |
45 | | - saveState = true |
46 | | - } |
47 | | - launchSingleTop = true |
48 | | - restoreState = true |
49 | | - } |
| 44 | + fun navigateToEditAlarm(alarmId: Long, navOptions: NavOptions? = null) { |
| 45 | + navController.navigate(HomeDestination.AlarmAddEdit(alarmId), navOptions) |
| 46 | + } |
50 | 47 |
|
51 | | - when (tab) { |
52 | | - TopLevelDestination.HOME -> navController.navigate(Routes.Home.ROUTE, navOptions) |
53 | | - TopLevelDestination.MYPAGE -> navController.navigate(Routes.MyPage.ROUTE, navOptions) |
54 | | - } |
| 48 | + fun navigateToHome(navOptions: NavOptions? = null) { |
| 49 | + navController.navigate(HomeBaseRoute, navOptions) |
| 50 | + } |
| 51 | + |
| 52 | + fun navigateToAlarmAction(alarm: Alarm, navOptions: NavOptions? = null) { |
| 53 | + navController.navigate(AlarmInteractionDestination.AlarmAction(alarm), navOptions) |
| 54 | + } |
| 55 | + |
| 56 | + fun navigateToAlarmSnoozeTimer(alarm: Alarm, navOptions: NavOptions? = null) { |
| 57 | + navController.navigate(AlarmInteractionDestination.AlarmSnoozeTimer(alarm), navOptions) |
| 58 | + } |
| 59 | + |
| 60 | + fun navigateToFortune(navOptions: NavOptions? = null) { |
| 61 | + navController.navigate(FortuneBaseRoute, navOptions) |
| 62 | + } |
| 63 | + |
| 64 | + fun navigateToFortuneReward(navOptions: NavOptions? = null) { |
| 65 | + navController.navigate(FortuneDestination.Reward, navOptions) |
| 66 | + } |
| 67 | + |
| 68 | + fun navigateToSetting(navOptions: NavOptions? = null) { |
| 69 | + navController.navigate(SettingBaseRoute, navOptions) |
| 70 | + } |
| 71 | + |
| 72 | + fun navigateToEditProfile(navOptions: NavOptions? = null) { |
| 73 | + navController.navigate(SettingDestination.EditProfile, navOptions) |
55 | 74 | } |
56 | 75 |
|
57 | | - @Composable |
58 | | - fun shouldHaveNavigationBarsPadding(): Boolean { |
59 | | - val currentRoute = currentDestination?.route ?: return false |
60 | | - return currentRoute !in HomeDestination.Home.route |
| 76 | + fun navigateToEditBirthDay(navOptions: NavOptions? = null) { |
| 77 | + navController.navigate(SettingDestination.EditBirthday, navOptions) |
| 78 | + } |
| 79 | + |
| 80 | + fun navigateToWebView(url: String, navOptions: NavOptions? = null) { |
| 81 | + navController.navigate(WebViewRoute(url), navOptions) |
| 82 | + } |
| 83 | + |
| 84 | + fun navigateBack() { |
| 85 | + navController.popBackStack() |
61 | 86 | } |
62 | 87 | } |
63 | 88 |
|
|
0 commit comments