From 9819a89b9703f2241dc776b28e0dc977b9c2b557 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Sat, 28 Jun 2025 22:32:44 +0000 Subject: [PATCH] fix: crash in charts, nav (#2290) Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com> --- .../mesh/model/EnvironmentMetricsState.kt | 4 +-- .../geeksville/mesh/navigation/NavGraph.kt | 28 +++++++++++++++---- .../main/java/com/geeksville/mesh/ui/Main.kt | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/model/EnvironmentMetricsState.kt b/app/src/main/java/com/geeksville/mesh/model/EnvironmentMetricsState.kt index c32a52d02..5e0016b13 100644 --- a/app/src/main/java/com/geeksville/mesh/model/EnvironmentMetricsState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/EnvironmentMetricsState.kt @@ -117,8 +117,8 @@ data class EnvironmentMetricsState( shouldPlot[Environment.IAQ.ordinal] = true } - val min = minValues.minOf { it } - val max = maxValues.maxOf { it } + val min = if (minValues.isEmpty()) 0f else minValues.minOf { it } + val max = if (maxValues.isEmpty()) 0f else maxValues.maxOf { it } val (minPressure, maxPressure) = Pair( telemetries.minBy { it.environmentMetrics.barometricPressure }, diff --git a/app/src/main/java/com/geeksville/mesh/navigation/NavGraph.kt b/app/src/main/java/com/geeksville/mesh/navigation/NavGraph.kt index 0eb4f0980..c22ff6729 100644 --- a/app/src/main/java/com/geeksville/mesh/navigation/NavGraph.kt +++ b/app/src/main/java/com/geeksville/mesh/navigation/NavGraph.kt @@ -19,8 +19,11 @@ package com.geeksville.mesh.navigation import androidx.annotation.StringRes import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavHostController @@ -47,6 +50,9 @@ const val DEEP_LINK_BASE_URI = "meshtastic://meshtastic" sealed interface Graph : Route @Serializable sealed interface Route { + @Serializable + data object Dispatcher : Route + @Serializable data object DebugPanel : Route } @@ -80,15 +86,25 @@ fun NavGraph( ) { NavHost( navController = navController, - startDestination = if (uIViewModel.isConnected()) { - NodesRoutes.NodesGraph - } else { - ConnectionsRoutes.ConnectionsGraph - }, + startDestination = Route.Dispatcher, modifier = modifier, ) { + composable { + val isConnected by uIViewModel.isConnected.collectAsStateWithLifecycle(false) + LaunchedEffect(isConnected) { + if (isConnected) { + navController.navigate(NodesRoutes.NodesGraph) { + popUpTo(Route.Dispatcher) { inclusive = true } + } + } else { + navController.navigate(ConnectionsRoutes.ConnectionsGraph) { + popUpTo(Route.Dispatcher) { inclusive = true } + } + } + } + } contactsGraph(navController, uIViewModel) - nodesGraph(navController, uIViewModel,) + nodesGraph(navController, uIViewModel) mapGraph(navController, uIViewModel) channelsGraph(navController, uIViewModel) connectionsGraph(navController, uIViewModel, bluetoothViewModel) diff --git a/app/src/main/java/com/geeksville/mesh/ui/Main.kt b/app/src/main/java/com/geeksville/mesh/ui/Main.kt index 79a45b5e2..a9812e12b 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Main.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Main.kt @@ -473,7 +473,7 @@ private fun TopBarActions( ) { val ourNode by viewModel.ourNodeInfo.collectAsStateWithLifecycle() val isConnected by viewModel.isConnected.collectAsStateWithLifecycle(false) - AnimatedVisibility(ourNode != null) { + AnimatedVisibility(ourNode != null && currentDestination?.isTopLevel() == true) { ourNode?.let { NodeChip( node = it,