From 2e503422c8a1cb45a5d024fc6eb6381112c764db Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 7 Feb 2022 14:53:08 +0530 Subject: [PATCH] android: fix navigation backstack handling As seen previously in #66 --- .../kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt | 2 +- .../claw/android/ui/decorations/ClawNavigationBar.kt | 7 ++++++- .../msfjarvis/claw/android/ui/navigation/Destinations.kt | 5 +++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt index e497afca..d3c4693e 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt @@ -122,7 +122,7 @@ fun LobstersApp( ) { NavHost( navController, - startDestination = Destinations.Hottest.getRoute(), + startDestination = Destinations.startDestination.getRoute(), modifier = Modifier.padding(top = 8.dp), ) { composable(Destinations.Hottest.getRoute()) { diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt index 14857741..1da832e0 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt @@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.navigation.NavController import dev.msfjarvis.claw.android.ui.AnimationDuration +import dev.msfjarvis.claw.android.ui.navigation.Destinations @Composable fun ClawNavigationBar( @@ -53,7 +54,11 @@ fun ClawNavigationBar( selected = selectedIndex == index, onClick = { selectedIndex = index - navController.navigate(navItem.route) + if (navController.currentDestination?.route == navItem.route) return@NavigationBarItem + navController.popBackStack(navController.graph.startDestinationRoute!!, false) + if (navItem.route != Destinations.startDestination.getRoute()) { + navController.navigate(navItem.route) + } } ) } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/navigation/Destinations.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/navigation/Destinations.kt index d422a429..e1f6b309 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/navigation/Destinations.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/navigation/Destinations.kt @@ -12,4 +12,9 @@ sealed class Destinations(internal val route: String) { object Comments : Destinations("comments/%s") { fun getRoute(postId: String) = route.format(postId) } + + companion object { + val startDestination + get() = Hottest + } }