diff --git a/app/src/main/java/com/geeksville/mesh/ui/contact/AdaptiveContactsScreen.kt b/app/src/main/java/com/geeksville/mesh/ui/contact/AdaptiveContactsScreen.kt index 9996ec1e1..50317dda3 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/contact/AdaptiveContactsScreen.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/contact/AdaptiveContactsScreen.kt @@ -41,6 +41,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavHostController import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch @@ -69,7 +70,17 @@ fun AdaptiveContactsScreen( val backNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange BackHandler(enabled = navigator.currentDestination?.pane == ListDetailPaneScaffoldRole.Detail) { - scope.launch { navigator.navigateBack(backNavigationBehavior) } + // Check if we navigated here from another screen (e.g., from Nodes or Map) + val previousEntry = navController.previousBackStackEntry + val isFromDifferentGraph = previousEntry?.destination?.hasRoute() == false + + if (isFromDifferentGraph) { + // Navigate back via NavController to return to the previous screen + navController.navigateUp() + } else { + // Close the detail pane within the adaptive scaffold + scope.launch { navigator.navigateBack(backNavigationBehavior) } + } } LaunchedEffect(initialContactKey) { diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/AdaptiveNodeListScreen.kt b/app/src/main/java/com/geeksville/mesh/ui/node/AdaptiveNodeListScreen.kt index 5b76a9425..b3bd9b368 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/AdaptiveNodeListScreen.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/AdaptiveNodeListScreen.kt @@ -42,10 +42,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.unit.dp +import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavHostController import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch import org.jetbrains.compose.resources.stringResource +import org.meshtastic.core.navigation.NodesRoutes import org.meshtastic.core.strings.Res import org.meshtastic.core.strings.nodes import org.meshtastic.core.ui.component.ScrollToTopEvent @@ -68,7 +70,17 @@ fun AdaptiveNodeListScreen( val backNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange BackHandler(enabled = navigator.currentDestination?.pane == ListDetailPaneScaffoldRole.Detail) { - scope.launch { navigator.navigateBack(backNavigationBehavior) } + // Check if we navigated here from another screen (e.g., from Messages or Map) + val previousEntry = navController.previousBackStackEntry + val isFromDifferentGraph = previousEntry?.destination?.hasRoute() == false + + if (isFromDifferentGraph) { + // Navigate back via NavController to return to the previous screen + navController.navigateUp() + } else { + // Close the detail pane within the adaptive scaffold + scope.launch { navigator.navigateBack(backNavigationBehavior) } + } } LaunchedEffect(initialNodeId) { diff --git a/core/proto/src/main/proto b/core/proto/src/main/proto index 4095e5989..52fa252f1 160000 --- a/core/proto/src/main/proto +++ b/core/proto/src/main/proto @@ -1 +1 @@ -Subproject commit 4095e598902b4cd893dbcb62842514704d0f64e0 +Subproject commit 52fa252f1e01be87ad2f7ab17ceef7882b2a4a93