From 7b80ee8bf049f13d6570b341489841c3de098f24 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 3 Mar 2026 12:29:17 -0500 Subject: [PATCH] Fixes the need to specify route in the check if navigation is going to the same route or not --- .../amethyst/ui/navigation/AppNavigation.kt | 12 ++-- .../amethyst/ui/navigation/navs/Nav.kt | 4 +- .../amethyst/ui/navigation/routes/Routes.kt | 65 +++---------------- 3 files changed, 17 insertions(+), 64 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index 51ddf401c..632cc1881 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -334,11 +334,11 @@ private fun NavigateIfIntentRequested( accountViewModel: AccountViewModel, accountStateViewModel: AccountStateViewModel, ) { - accountViewModel.firstRoute?.let { + accountViewModel.firstRoute?.let { newRoute -> accountViewModel.firstRoute = null - val currentRoute = getRouteWithArguments(nav.controller) - if (!isSameRoute(currentRoute, it)) { - nav.newStack(it) + val currentRoute = getRouteWithArguments(newRoute::class, nav.controller) + if (!isSameRoute(currentRoute, newRoute)) { + nav.newStack(newRoute) } } @@ -389,7 +389,7 @@ private fun NavigateIfIntentRequested( if (npub != null && accountStateViewModel.currentAccountNPub() != npub) { accountStateViewModel.checkAndSwitchUserSync(npub, nextRoute) } else { - val currentRoute = getRouteWithArguments(nav.controller) + val currentRoute = getRouteWithArguments(nextRoute::class, nav.controller) if (!isSameRoute(currentRoute, nextRoute)) { nav.newStack(nextRoute) } @@ -445,7 +445,7 @@ private fun NavigateIfIntentRequested( if (npub != null && accountStateViewModel.currentAccountNPub() != npub) { accountStateViewModel.checkAndSwitchUserSync(npub, newPage) } else { - val currentRoute = getRouteWithArguments(nav.controller) + val currentRoute = getRouteWithArguments(newPage::class, nav.controller) if (!isSameRoute(currentRoute, newPage)) { nav.newStack(newPage) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/navs/Nav.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/navs/Nav.kt index d91b264da..7956d1e77 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/navs/Nav.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/navs/Nav.kt @@ -48,7 +48,7 @@ class Nav( override fun nav(route: Route) { navigationScope.launch { - if (getRouteWithArguments(controller) != route) { + if (getRouteWithArguments(route::class, controller) != route) { controller.navigate(route) } } @@ -57,7 +57,7 @@ class Nav( override fun nav(computeRoute: suspend () -> Route?) { navigationScope.launch { val route = computeRoute() - if (route != null && getRouteWithArguments(controller) != route) { + if (route != null && getRouteWithArguments(route::class, controller) != route) { controller.navigate(route) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt index 1dccca0a8..f5fa4a8fd 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/navigation/routes/Routes.kt @@ -28,6 +28,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Address import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip17Dm.base.ChatroomKey import kotlinx.serialization.Serializable +import kotlin.reflect.KClass sealed class Route { @Serializable object Home : Route() @@ -322,65 +323,17 @@ sealed class Route { inline fun isBaseRoute(navController: NavHostController): Boolean = navController.currentBackStackEntry?.destination?.hasRoute() == true -fun getRouteWithArguments(navController: NavHostController): Route? { +fun getRouteWithArguments( + klazz: KClass, + navController: NavHostController, +): Route? { val entry = navController.currentBackStackEntry ?: return null val dest = entry.destination - return when { - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - dest.hasRoute() -> entry.toRoute() - else -> null + return if (dest.hasRoute(klazz)) { + entry.toRoute(klazz) + } else { + null } }