Skip to content

Commit a963995

Browse files
committed
✨ :: modify navigate
1 parent 5816e34 commit a963995

File tree

9 files changed

+80
-43
lines changed

9 files changed

+80
-43
lines changed

app/src/main/java/com/kdn/stack_knowledge/navigation/StackKnowledgeNavHost.kt

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,10 @@ fun StackKnowledgeNavHost(
4848
modifier = modifier
4949
) {
5050
loginScreen(
51-
onSuccess = navController::navigateToMain,
51+
onSuccess = {
52+
appState.navigateToTopLevelDestination(TopLevelDestination.MAIN)
53+
},
5254
onLoginButtonClick = onLoginButtonClick,
53-
onDeleteBackStack = {
54-
navController.navigate(mainPageRoute) {
55-
popUpTo(roleCheckRoute) {
56-
inclusive = true
57-
}
58-
}
59-
}
6055
)
6156
roleCheckScreen(
6257
onRoleButtonClick = navController::navigateToLogin
@@ -73,19 +68,29 @@ fun StackKnowledgeNavHost(
7368
}
7469
} else bottomNavigationNavigate(role, navController, navType)
7570
},
76-
logoutSuccess = onLogout,
77-
onDeleteBackStack = {
78-
navController.navigate(mainPageRoute) {
79-
popUpTo(roleCheckRoute)
80-
}
81-
}
71+
logoutSuccess = {
72+
onLogout()
73+
appState.navigateToTopLevelDestination(TopLevelDestination.ROLE_CHECK)
74+
},
8275
)
8376
createMissionScreen(
84-
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
77+
onNavigate = { role, navType ->
78+
bottomNavigationNavigate(
79+
role,
80+
navController,
81+
navType
82+
)
83+
},
8584
createMissionSuccess = navController::navigateToMain
8685
)
8786
entireMissionScreen(
88-
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
87+
onNavigate = { role, navType ->
88+
bottomNavigationNavigate(
89+
role,
90+
navController,
91+
navType
92+
)
93+
},
8994
onItemClick = navController::navigateToResolveMission
9095
)
9196
rankingScreen(
@@ -95,16 +100,34 @@ fun StackKnowledgeNavHost(
95100
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) }
96101
)
97102
resolveMissionScreen(
98-
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
103+
onNavigate = { role, navType ->
104+
bottomNavigationNavigate(
105+
role,
106+
navController,
107+
navType
108+
)
109+
},
99110
onBackClick = navController::popBackStack,
100111
solveMissionSuccess = navController::navigateToMain,
101112
)
102113
gradingAnswerScreen(
103-
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
114+
onNavigate = { role, navType ->
115+
bottomNavigationNavigate(
116+
role,
117+
navController,
118+
navType
119+
)
120+
},
104121
scoreMissionSuccess = navController::navigateToMain,
105122
)
106123
solvedMissionScreen(
107-
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
124+
onNavigate = { role, navType ->
125+
bottomNavigationNavigate(
126+
role,
127+
navController,
128+
navType
129+
)
130+
},
108131
onItemClick = navController::navigateToGradingAnswer
109132
)
110133
shopScreen(

app/src/main/java/com/kdn/stack_knowledge/navigation/TopLevelDestination.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ package com.kdn.stack_knowledge.navigation
22

33
enum class TopLevelDestination {
44
ROLE_CHECK,
5+
MAIN
56
}

app/src/main/java/com/kdn/stack_knowledge/navigation/util/BottomNavigationNavigate.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.navigation.NavController
44
import androidx.navigation.NavGraph.Companion.findStartDestination
55
import androidx.navigation.navOptions
66
import com.minstone.ui.navigation.NavigateType
7+
import com.stackknowledge.main.navigation.mainPageRoute
78
import com.stackknowledge.main.navigation.navigateToMain
89
import com.stackknowledge.ranking.navigation.navigateToRanking
910
import com.stackknowledge.ranking.navigation.navigateToTeacherRanking
@@ -20,7 +21,7 @@ fun bottomNavigationNavigate(
2021
navType: String
2122
) {
2223
val topLevelNavOptions = navOptions {
23-
popUpTo(navController.graph.findStartDestination().id) {
24+
popUpTo(mainPageRoute) {
2425
inclusive = false
2526
}
2627
launchSingleTop = true

app/src/main/java/com/kdn/stack_knowledge/ui/StackKnowledgeAppState.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@ import androidx.compose.runtime.Composable
66
import androidx.compose.runtime.Stable
77
import androidx.compose.runtime.remember
88
import androidx.compose.runtime.rememberCoroutineScope
9+
import androidx.compose.ui.util.trace
910
import androidx.navigation.NavDestination
11+
import androidx.navigation.NavGraph.Companion.findStartDestination
1012
import androidx.navigation.NavHostController
1113
import androidx.navigation.compose.currentBackStackEntryAsState
1214
import androidx.navigation.compose.rememberNavController
15+
import androidx.navigation.navOptions
1316
import com.kdn.stack_knowledge.navigation.TopLevelDestination
17+
import com.stackknowledge.login.navigation.navigateToLogin
18+
import com.stackknowledge.login.navigation.navigateToRoleCheck
1419
import com.stackknowledge.login.navigation.roleCheckRoute
20+
import com.stackknowledge.main.navigation.navigateToMain
1521
import kotlinx.coroutines.CoroutineScope
1622

1723
@Composable
@@ -53,4 +59,19 @@ class StackKnowledgeAppState(
5359
get() = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact
5460

5561
val topLevelDestinations: List<TopLevelDestination> = TopLevelDestination.values().asList()
62+
63+
fun navigateToTopLevelDestination(topLevelDestination: TopLevelDestination) {
64+
trace("Navigation: ${topLevelDestination.name}") {
65+
val topLevelNavOptions = navOptions {
66+
popUpTo(navController.graph.findStartDestination().id) {
67+
inclusive = true
68+
}
69+
}
70+
71+
when (topLevelDestination) {
72+
TopLevelDestination.ROLE_CHECK -> navController.navigateToRoleCheck(topLevelNavOptions)
73+
TopLevelDestination.MAIN -> navController.navigateToMain(topLevelNavOptions)
74+
}
75+
}
76+
}
5677
}

core/data/src/main/kotlin/com/stackknowledge/repository/auth/AuthRepositoryImpl.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,24 @@ class AuthRepositoryImpl @Inject constructor(
2424

2525
override suspend fun saveToken(token: LoginResponseModel) {
2626
token.let {
27-
localDataSource.setAccessToken(it.accessToken)
28-
localDataSource.setAccessTime(it.expiredAt)
29-
localDataSource.setRefreshToken(it.refreshToken)
30-
localDataSource.setRefreshTime(it.expiredAt)
31-
localDataSource.setAuthorityInfo(it.authority.toString())
27+
with(localDataSource) {
28+
setAccessToken(it.accessToken)
29+
setAccessTime(it.expiredAt)
30+
setRefreshToken(it.refreshToken)
31+
setRefreshTime(it.expiredAt)
32+
setAuthorityInfo(it.authority.toString())
33+
}
3234
}
3335
}
3436

3537
override suspend fun deleteToken() {
36-
localDataSource.removeAccessToken()
37-
localDataSource.removeRefreshToken()
38-
localDataSource.removeAccessTime()
39-
localDataSource.removeRefreshTime()
40-
localDataSource.removeAuthorityInfo()
38+
with(localDataSource) {
39+
removeAccessToken()
40+
removeRefreshToken()
41+
removeAccessTime()
42+
removeRefreshTime()
43+
removeAuthorityInfo()
44+
}
4145
}
4246

4347
override fun getRole(): Flow<String> {

feature/login/src/main/java/com/stackknowledge/login/LoginScreen.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import com.stackknowledge.login.viewmodel.uistate.LoginUiState
3535
internal fun LoginRoute(
3636
onSuccess: () -> Unit,
3737
onGoogleLoginButtonClicked: () -> Unit,
38-
onDeleteBackStack: () -> Unit,
3938
viewModel: AuthViewModel = hiltViewModel(LocalContext.current as ComponentActivity),
4039
) {
4140
val loginUiState by viewModel.loginUiState.collectAsStateWithLifecycle()
@@ -45,7 +44,6 @@ internal fun LoginRoute(
4544
loginUiState = loginUiState,
4645
viewModel = viewModel,
4746
onLoginSuccess = onSuccess,
48-
onDeleteBackStack = onDeleteBackStack,
4947
)
5048
}
5149

@@ -56,7 +54,6 @@ private fun LoginScreen(
5654
onGoogleLoginButtonClicked: () -> Unit = {},
5755
loginUiState: LoginUiState,
5856
onLoginSuccess: () -> Unit = {},
59-
onDeleteBackStack: () -> Unit,
6057
) {
6158
StackKnowledgeAndroidTheme { colors, typography ->
6259
Surface {
@@ -111,7 +108,6 @@ private fun LoginScreen(
111108

112109
viewModel.saveToken(tokenResponse)
113110
onLoginSuccess()
114-
onDeleteBackStack()
115111
}
116112
is LoginUiState.Error -> {
117113
// Login 실패 처리 (임의)
@@ -134,6 +130,5 @@ fun LoginScreenPre() {
134130
LoginScreen(
135131
onGoogleLoginButtonClicked = {},
136132
loginUiState = LoginUiState.Loading,
137-
onDeleteBackStack = {}
138133
)
139134
}

feature/login/src/main/java/com/stackknowledge/login/navigation/LoginNavigation.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ fun NavController.navigateToLogin(navOptions: NavOptions? = null) {
1717
fun NavGraphBuilder.loginScreen(
1818
onSuccess: () -> Unit = {},
1919
onLoginButtonClick: () -> Unit = {},
20-
onDeleteBackStack: () -> Unit,
2120
) {
2221
composable(route = loginRoute) {
2322
LoginRoute(
2423
onSuccess = onSuccess,
2524
onGoogleLoginButtonClicked = onLoginButtonClick,
26-
onDeleteBackStack = onDeleteBackStack,
2725
)
2826
}
2927
}

feature/main/src/main/java/com/stackknowledge/main/MainPageScreen.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import com.stackknowledge.design_system.R
4444
internal fun MainPageRoute(
4545
onNavigate: (Authority, String, Int?) -> Unit,
4646
logoutSuccess: () -> Unit,
47-
onDeleteBackStack: () -> Unit,
4847
viewModel: MainViewModel = hiltViewModel()
4948
) {
5049
val role by viewModel.role.collectAsStateWithLifecycle(initialValue = "")
@@ -66,7 +65,6 @@ internal fun MainPageRoute(
6665
},
6766
logout = viewModel::logout,
6867
onSuccess = logoutSuccess,
69-
onDeleteBackStack = onDeleteBackStack,
7068
)
7169
}
7270

@@ -81,7 +79,6 @@ private fun MainPageScreen(
8179
initMain: () -> Unit,
8280
logout: () -> Unit,
8381
onSuccess: () -> Unit,
84-
onDeleteBackStack: () -> Unit,
8582
) {
8683
val scrollState = rememberScrollState()
8784
val context = LocalContext.current
@@ -161,7 +158,6 @@ private fun MainPageScreen(
161158
is Event.Success -> {
162159
onSuccess()
163160
makeToast(context = context, message = stringResource(id = R.string.success_logout))
164-
onDeleteBackStack()
165161
}
166162
else -> {
167163
makeToast(context = context, message = stringResource(id = R.string.failure_logout))

feature/main/src/main/java/com/stackknowledge/main/navigation/MainNavigation.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,11 @@ fun NavController.navigateToMain(navOptions: NavOptions? = null) {
1616
fun NavGraphBuilder.mainScreen(
1717
onNavigate: (Authority, String, Int?) -> Unit,
1818
logoutSuccess: () -> Unit,
19-
onDeleteBackStack: () -> Unit,
2019
) {
2120
composable(route = mainPageRoute) {
2221
MainPageRoute(
2322
onNavigate = onNavigate,
2423
logoutSuccess = logoutSuccess,
25-
onDeleteBackStack = onDeleteBackStack,
2624
)
2725
}
2826
}

0 commit comments

Comments
 (0)