Skip to content

Commit ccc2e38

Browse files
authored
Merge pull request #221 from YAPP-Github/refactor/#212-navigation-kclass
[REFACTOR] 네비게이션의 sealed class 기반 경로를 KClass 기반으로 리팩토링
2 parents c8f3cdc + 8a297e7 commit ccc2e38

File tree

61 files changed

+680
-838
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+680
-838
lines changed

core/common/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ android {
1212

1313
dependencies {
1414
implementation(projects.core.designsystem)
15+
implementation(projects.domain)
1516
implementation(libs.compose.navigation)
1617
implementation(libs.hilt.navigation.compose)
18+
implementation(libs.kotlinx.serialization.json)
1719
}

core/common/src/main/java/com/yapp/common/navigation/JsonNavType.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt

Lines changed: 67 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,88 @@
11
package com.yapp.common.navigation
22

3+
import android.util.Log
34
import androidx.compose.runtime.Composable
45
import androidx.compose.runtime.remember
5-
import androidx.navigation.NavDestination
66
import androidx.navigation.NavHostController
7-
import androidx.navigation.compose.currentBackStackEntryAsState
7+
import androidx.navigation.NavOptions
88
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
1321

1422
class OrbitNavigator(
1523
val navController: NavHostController,
1624
) {
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")
3537
}
3638
}
3739

38-
fun navigateBack() {
39-
navController.popBackStack()
40+
fun navigateToAddAlarm(navOptions: NavOptions? = null) {
41+
navController.navigate(HomeDestination.AlarmAddEdit(-1), navOptions)
4042
}
4143

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+
}
5047

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)
5574
}
5675

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()
6186
}
6287
}
6388

core/common/src/main/java/com/yapp/common/navigation/Routes.kt

Lines changed: 0 additions & 62 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/destination/AlarmInteractionDestination.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/destination/FortuneDestination.kt

Lines changed: 0 additions & 13 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/destination/HomeDestination.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/destination/MissionDestination.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/destination/MyPageDestination.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

core/common/src/main/java/com/yapp/common/navigation/destination/OnboardingDestination.kt

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)