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 28dc42d05..50baf4e0f 100644 --- a/app/src/main/java/com/geeksville/mesh/navigation/NavGraph.kt +++ b/app/src/main/java/com/geeksville/mesh/navigation/NavGraph.kt @@ -37,7 +37,6 @@ import com.geeksville.mesh.ui.debug.DebugScreen import com.geeksville.mesh.ui.map.MapView import com.geeksville.mesh.ui.message.MessageScreen import com.geeksville.mesh.ui.message.QuickChatScreen -import com.geeksville.mesh.ui.node.NodeScreen import com.geeksville.mesh.ui.sharing.ShareScreen import kotlinx.serialization.Serializable @@ -52,9 +51,6 @@ const val DEEP_LINK_BASE_URI = "meshtastic://meshtastic" @Serializable sealed interface Graph : Route { - @Serializable - data class NodeDetailGraph(val destNum: Int) : Graph - @Serializable data class RadioConfigGraph(val destNum: Int? = null) : Graph } @@ -64,9 +60,6 @@ sealed interface Route { @Serializable data object Contacts : Route - @Serializable - data object Nodes : Route - @Serializable data object Map : Route @@ -223,13 +216,6 @@ fun NavGraph( onNavigate = { navController.navigate(Route.Messages(it)) } ) } - composable { - NodeScreen( - model = uIViewModel, - navigateToMessages = { navController.navigate(Route.Messages(it)) }, - navigateToNodeDetails = { navController.navigate(Route.NodeDetail(it)) }, - ) - } composable { MapView(uIViewModel) } @@ -262,7 +248,7 @@ fun NavGraph( composable { QuickChatScreen() } - nodeDetailGraph( + nodesGraph( navController, uIViewModel, ) diff --git a/app/src/main/java/com/geeksville/mesh/navigation/NodeDetailGraph.kt b/app/src/main/java/com/geeksville/mesh/navigation/NodesGraph.kt similarity index 58% rename from app/src/main/java/com/geeksville/mesh/navigation/NodeDetailGraph.kt rename to app/src/main/java/com/geeksville/mesh/navigation/NodesGraph.kt index dbab460e6..5eb38112e 100644 --- a/app/src/main/java/com/geeksville/mesh/navigation/NodeDetailGraph.kt +++ b/app/src/main/java/com/geeksville/mesh/navigation/NodesGraph.kt @@ -32,7 +32,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import androidx.navigation.navigation +import androidx.navigation.compose.navigation import com.geeksville.mesh.R import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.metrics.DeviceMetricsScreen @@ -44,57 +44,78 @@ import com.geeksville.mesh.ui.metrics.SignalMetricsScreen import com.geeksville.mesh.ui.metrics.TracerouteLogScreen import com.geeksville.mesh.ui.node.NodeDetailScreen import com.geeksville.mesh.ui.node.NodeMapScreen +import com.geeksville.mesh.ui.node.NodeScreen +import kotlinx.serialization.Serializable -fun NavGraphBuilder.nodeDetailGraph( +sealed class NodesRoutes { + @Serializable + data object Nodes : Route + @Serializable + data object NodesGraph : Graph +} + +fun NavGraphBuilder.nodesGraph( navController: NavHostController, uiViewModel: UIViewModel, ) { - navigation( - startDestination = Route.NodeDetail(), + navigation( + startDestination = NodesRoutes.Nodes, ) { - composable { backStackEntry -> - val parentEntry = remember(backStackEntry) { - navController.getBackStackEntry() - } - NodeDetailScreen( - uiViewModel = uiViewModel, + composable { + NodeScreen( + model = uiViewModel, navigateToMessages = { - navController.navigate(Route.Messages(it)) { - popUpTo(Route.NodeDetail()) { - inclusive = false - } - } + navController.navigate(Route.Messages(it)) }, - onNavigate = { - navController.navigate(it) { - popUpTo(Route.NodeDetail()) { - inclusive = false - } - } + navigateToNodeDetails = { + navController.navigate(Route.NodeDetail(it)) }, - viewModel = hiltViewModel(parentEntry), ) } - NodeDetailRoute.entries.forEach { nodeDetailRoute -> - composable(nodeDetailRoute.route::class) { backStackEntry -> - val parentEntry = remember(backStackEntry) { - navController.getBackStackEntry() - } - when (nodeDetailRoute) { - NodeDetailRoute.DEVICE -> DeviceMetricsScreen(hiltViewModel(parentEntry)) - NodeDetailRoute.NODE_MAP -> NodeMapScreen(hiltViewModel(parentEntry)) - NodeDetailRoute.POSITION_LOG -> PositionLogScreen(hiltViewModel(parentEntry)) - NodeDetailRoute.ENVIRONMENT -> EnvironmentMetricsScreen( - hiltViewModel( - parentEntry - ) - ) + nodeDetailRoutes(navController, uiViewModel) + } +} - NodeDetailRoute.SIGNAL -> SignalMetricsScreen(hiltViewModel(parentEntry)) - NodeDetailRoute.TRACEROUTE -> TracerouteLogScreen(viewModel = hiltViewModel(parentEntry)) - NodeDetailRoute.POWER -> PowerMetricsScreen(hiltViewModel(parentEntry)) - NodeDetailRoute.HOST -> HostMetricsLogScreen(hiltViewModel(parentEntry)) - } +fun NavGraphBuilder.nodeDetailRoutes( + navController: NavHostController, + uiViewModel: UIViewModel, +) { + composable { + NodeDetailScreen( + uiViewModel = uiViewModel, + navigateToMessages = { + navController.navigate(Route.Messages(it)) + }, + onNavigate = { + navController.navigate(it) + }, + viewModel = hiltViewModel(), + ) + } + NodeDetailRoute.entries.forEach { nodeDetailRoute -> + composable(nodeDetailRoute.route::class) { backStackEntry -> + val parentEntry = remember(backStackEntry) { + navController.getBackStackEntry() + } + when (nodeDetailRoute) { + NodeDetailRoute.DEVICE -> DeviceMetricsScreen(hiltViewModel(parentEntry)) + NodeDetailRoute.NODE_MAP -> NodeMapScreen(hiltViewModel(parentEntry)) + NodeDetailRoute.POSITION_LOG -> PositionLogScreen(hiltViewModel(parentEntry)) + NodeDetailRoute.ENVIRONMENT -> EnvironmentMetricsScreen( + hiltViewModel( + parentEntry + ) + ) + + NodeDetailRoute.SIGNAL -> SignalMetricsScreen(hiltViewModel(parentEntry)) + NodeDetailRoute.TRACEROUTE -> TracerouteLogScreen( + viewModel = hiltViewModel( + parentEntry + ) + ) + + NodeDetailRoute.POWER -> PowerMetricsScreen(hiltViewModel(parentEntry)) + NodeDetailRoute.HOST -> HostMetricsLogScreen(hiltViewModel(parentEntry)) } } } 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 8cc9f7f79..73970d66c 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Main.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Main.kt @@ -77,6 +77,7 @@ import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.navigation.ChannelsRoutes import com.geeksville.mesh.navigation.ConnectionsRoutes import com.geeksville.mesh.navigation.NavGraph +import com.geeksville.mesh.navigation.NodesRoutes import com.geeksville.mesh.navigation.Route import com.geeksville.mesh.navigation.showLongNameTitle import com.geeksville.mesh.service.MeshService @@ -88,7 +89,7 @@ import com.geeksville.mesh.ui.debug.DebugMenuActions enum class TopLevelDestination(@StringRes val label: Int, val icon: ImageVector, val route: Route) { Contacts(R.string.contacts, Icons.AutoMirrored.TwoTone.Chat, Route.Contacts), - Nodes(R.string.nodes, Icons.TwoTone.People, Route.Nodes), + Nodes(R.string.nodes, Icons.TwoTone.People, NodesRoutes.Nodes), Map(R.string.map, Icons.TwoTone.Map, Route.Map), Channels(R.string.channels, Icons.TwoTone.Contactless, ChannelsRoutes.Channels), Connections(R.string.connections, Icons.TwoTone.CloudOff, ConnectionsRoutes.Connections),