Skip to content

Commit 769b16a

Browse files
committed
fix: navigate back home on nested graph
1 parent 61b7b75 commit 769b16a

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

app/src/main/java/to/bitkit/ui/ContentView.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ fun ContentView(
195195
modifier: Modifier = Modifier,
196196
) {
197197
val navController = rememberNavController()
198+
val walletNavController = rememberNavController()
199+
198200
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
199201
val context = LocalContext.current
200202
val lifecycle = LocalLifecycleOwner.current.lifecycle
@@ -436,6 +438,7 @@ fun ContentView(
436438
Box(modifier = Modifier.fillMaxSize()) {
437439
RootNavHost(
438440
navController = navController,
441+
walletNavController = walletNavController,
439442
drawerState = drawerState,
440443
walletViewModel = walletViewModel,
441444
appViewModel = appViewModel,
@@ -466,6 +469,7 @@ fun ContentView(
466469
DrawerMenu(
467470
drawerState = drawerState,
468471
rootNavController = navController,
472+
walletNavController = walletNavController,
469473
hasSeenWidgetsIntro = hasSeenWidgetsIntro,
470474
hasSeenShopIntro = hasSeenShopIntro,
471475
modifier = Modifier.align(Alignment.TopEnd),
@@ -477,6 +481,7 @@ fun ContentView(
477481
@Composable
478482
private fun RootNavHost(
479483
navController: NavHostController,
484+
walletNavController: NavHostController,
480485
drawerState: DrawerState,
481486
walletViewModel: WalletViewModel,
482487
appViewModel: AppViewModel,
@@ -494,7 +499,8 @@ private fun RootNavHost(
494499
activityListViewModel = activityListViewModel,
495500
settingsViewModel = settingsViewModel,
496501
navController = navController,
497-
drawerState = drawerState
502+
walletNavController = walletNavController,
503+
drawerState = drawerState,
498504
)
499505
allActivity(
500506
activityListViewModel = activityListViewModel,
@@ -741,6 +747,7 @@ private fun NavGraphBuilder.home(
741747
activityListViewModel: ActivityListViewModel,
742748
settingsViewModel: SettingsViewModel,
743749
navController: NavHostController,
750+
walletNavController: NavHostController,
744751
drawerState: DrawerState,
745752
) {
746753
composable<Routes.Home> {
@@ -750,6 +757,7 @@ private fun NavGraphBuilder.home(
750757
activityListViewModel = activityListViewModel,
751758
settingsViewModel = settingsViewModel,
752759
rootNavController = navController,
760+
walletNavController = walletNavController,
753761
drawerState = drawerState,
754762
)
755763
}

app/src/main/java/to/bitkit/ui/components/DrawerMenu.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import to.bitkit.R
4646
import to.bitkit.ui.Routes
4747
import to.bitkit.ui.navigateIfNotCurrent
4848
import to.bitkit.ui.navigateToHome
49+
import to.bitkit.ui.screens.wallets.HomeRoutes
4950
import to.bitkit.ui.shared.util.blockPointerInputPassthrough
5051
import to.bitkit.ui.shared.util.clickableAlpha
5152
import to.bitkit.ui.theme.AppThemeSurface
@@ -62,6 +63,7 @@ private val drawerWidth = 200.dp
6263
fun DrawerMenu(
6364
drawerState: DrawerState,
6465
rootNavController: NavController,
66+
walletNavController: NavController,
6567
hasSeenWidgetsIntro: Boolean,
6668
hasSeenShopIntro: Boolean,
6769
modifier: Modifier = Modifier,
@@ -97,6 +99,7 @@ fun DrawerMenu(
9799
) {
98100
Menu(
99101
rootNavController = rootNavController,
102+
walletNavController = walletNavController,
100103
drawerState = drawerState,
101104
onClickAddWidget = {
102105
if (!hasSeenWidgetsIntro) {
@@ -119,6 +122,7 @@ fun DrawerMenu(
119122
@Composable
120123
private fun Menu(
121124
rootNavController: NavController,
125+
walletNavController: NavController,
122126
drawerState: DrawerState,
123127
onClickAddWidget: () -> Unit,
124128
onClickShop: () -> Unit,
@@ -139,8 +143,18 @@ private fun Menu(
139143
iconRes = R.drawable.ic_coins,
140144
onClick = {
141145
val isOnHome = rootNavController.currentBackStackEntry
142-
?.destination?.hasRoute<Routes.Home>() ?: false
146+
?.destination?.hasRoute<Routes.Home>() == true && walletNavController.currentBackStackEntry
147+
?.destination?.hasRoute<HomeRoutes.Home>() == true
143148
if (!isOnHome) {
149+
walletNavController.run {
150+
val popped = popBackStack<HomeRoutes.Home>(inclusive = false)
151+
if (!popped) {
152+
navigate(HomeRoutes.Home) {
153+
popUpTo(graph.startDestinationId)
154+
launchSingleTop = true
155+
}
156+
}
157+
}
144158
rootNavController.navigateToHome()
145159
}
146160
scope.launch { drawerState.close() }
@@ -304,6 +318,7 @@ private fun Preview() {
304318
Box {
305319
DrawerMenu(
306320
rootNavController = navController,
321+
walletNavController = navController,
307322
drawerState = rememberDrawerState(initialValue = DrawerValue.Open),
308323
hasSeenWidgetsIntro = false,
309324
hasSeenShopIntro = false,

app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ fun HomeNav(
3737
activityListViewModel: ActivityListViewModel,
3838
settingsViewModel: SettingsViewModel,
3939
rootNavController: NavController,
40+
walletNavController: NavHostController,
4041
drawerState: DrawerState,
4142
) {
4243
val uiState: MainUiState by walletViewModel.uiState.collectAsStateWithLifecycle()
@@ -47,9 +48,6 @@ fun HomeNav(
4748
settingsViewModel.setNotificationPreference(granted)
4849
}
4950
)
50-
51-
val walletNavController = rememberNavController()
52-
5351
Box(
5452
modifier = Modifier
5553
.fillMaxSize()

0 commit comments

Comments
 (0)