diff --git a/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt index 933a01081..f55e15085 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt @@ -39,8 +39,8 @@ import com.geeksville.mesh.android.Logging import com.geeksville.mesh.database.MeshLogRepository import com.geeksville.mesh.database.entity.MeshLog import com.geeksville.mesh.model.map.CustomTileSource +import com.geeksville.mesh.navigation.Route import com.geeksville.mesh.repository.datastore.RadioConfigRepository -import com.geeksville.mesh.ui.Route import com.geeksville.mesh.ui.map.MAP_STYLE_ID import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.ExperimentalCoroutinesApi diff --git a/app/src/main/java/com/geeksville/mesh/navigation/RadioConfigNavigation.kt b/app/src/main/java/com/geeksville/mesh/navigation/RadioConfigNavigation.kt index 4323b2212..ef20f9d9f 100644 --- a/app/src/main/java/com/geeksville/mesh/navigation/RadioConfigNavigation.kt +++ b/app/src/main/java/com/geeksville/mesh/navigation/RadioConfigNavigation.kt @@ -22,7 +22,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -import com.geeksville.mesh.ui.Route import com.geeksville.mesh.ui.radioconfig.RadioConfigScreen import com.geeksville.mesh.ui.radioconfig.RadioConfigViewModel import com.geeksville.mesh.ui.radioconfig.components.AmbientLightingConfigScreen diff --git a/app/src/main/java/com/geeksville/mesh/navigation/Route.kt b/app/src/main/java/com/geeksville/mesh/navigation/Route.kt new file mode 100644 index 000000000..9aa2e7df3 --- /dev/null +++ b/app/src/main/java/com/geeksville/mesh/navigation/Route.kt @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2025 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.geeksville.mesh.navigation + +import kotlinx.serialization.Serializable + +sealed interface Route { + @Serializable data object Contacts : Route + @Serializable data object Nodes : Route + @Serializable data object Map : Route + @Serializable data object Channels : Route + @Serializable data object Settings : Route + + @Serializable data object DebugPanel : Route + @Serializable + data class Messages(val contactKey: String, val message: String = "") : Route + @Serializable data object QuickChat : Route + @Serializable + data class Share(val message: String) : Route + + @Serializable + data class RadioConfig(val destNum: Int? = null) : Route + @Serializable data object User : Route + @Serializable data object ChannelConfig : Route + @Serializable data object Device : Route + @Serializable data object Position : Route + @Serializable data object Power : Route + @Serializable data object Network : Route + @Serializable data object Display : Route + @Serializable data object LoRa : Route + @Serializable data object Bluetooth : Route + @Serializable data object Security : Route + + @Serializable data object MQTT : Route + @Serializable data object Serial : Route + @Serializable data object ExtNotification : Route + @Serializable data object StoreForward : Route + @Serializable data object RangeTest : Route + @Serializable data object Telemetry : Route + @Serializable data object CannedMessage : Route + @Serializable data object Audio : Route + @Serializable data object RemoteHardware : Route + @Serializable data object NeighborInfo : Route + @Serializable data object AmbientLighting : Route + @Serializable data object DetectionSensor : Route + @Serializable data object Paxcounter : Route + + @Serializable data class NodeDetail(val destNum: Int) : Route + @Serializable data object DeviceMetrics : Route + @Serializable data object NodeMap : Route + @Serializable data object PositionLog : Route + @Serializable data object EnvironmentMetrics : Route + @Serializable data object SignalMetrics : Route + @Serializable data object TracerouteLog : Route +} diff --git a/app/src/main/java/com/geeksville/mesh/ui/NavGraph.kt b/app/src/main/java/com/geeksville/mesh/ui/NavGraph.kt index b98546fde..aecc8d377 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/NavGraph.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/NavGraph.kt @@ -41,6 +41,7 @@ import androidx.navigation.toRoute import com.geeksville.mesh.R import com.geeksville.mesh.android.Logging import com.geeksville.mesh.model.MetricsViewModel +import com.geeksville.mesh.navigation.Route import com.geeksville.mesh.navigation.addRadioConfigSection import com.geeksville.mesh.ui.components.BaseScaffold import com.geeksville.mesh.ui.components.DeviceMetricsScreen @@ -52,7 +53,6 @@ import com.geeksville.mesh.ui.components.TracerouteLogScreen import com.geeksville.mesh.ui.radioconfig.RadioConfigViewModel import com.geeksville.mesh.ui.theme.AppTheme import dagger.hilt.android.AndroidEntryPoint -import kotlinx.serialization.Serializable internal fun FragmentManager.navigateToNavGraph( destNum: Int? = null, @@ -114,49 +114,6 @@ class NavGraphFragment : ScreenFragment("NavGraph"), Logging { } } -sealed interface Route { - @Serializable - data class Messages(val contactKey: String, val message: String = "") : Route - @Serializable - data class Share(val message: String) : Route - - @Serializable - data class RadioConfig(val destNum: Int? = null) : Route - @Serializable data object User : Route - @Serializable data object ChannelConfig : Route - @Serializable data object Device : Route - @Serializable data object Position : Route - @Serializable data object Power : Route - @Serializable data object Network : Route - @Serializable data object Display : Route - @Serializable data object LoRa : Route - @Serializable data object Bluetooth : Route - @Serializable data object Security : Route - - @Serializable data object MQTT : Route - @Serializable data object Serial : Route - @Serializable data object ExtNotification : Route - @Serializable data object StoreForward : Route - @Serializable data object RangeTest : Route - @Serializable data object Telemetry : Route - @Serializable data object CannedMessage : Route - @Serializable data object Audio : Route - @Serializable data object RemoteHardware : Route - @Serializable data object NeighborInfo : Route - @Serializable data object AmbientLighting : Route - @Serializable data object DetectionSensor : Route - @Serializable data object Paxcounter : Route - - @Serializable - data class NodeDetail(val destNum: Int) : Route - @Serializable data object DeviceMetrics : Route - @Serializable data object NodeMap : Route - @Serializable data object PositionLog : Route - @Serializable data object EnvironmentMetrics : Route - @Serializable data object SignalMetrics : Route - @Serializable data object TracerouteLog : Route -} - @Composable fun NavGraph( navController: NavHostController = rememberNavController(), diff --git a/app/src/main/java/com/geeksville/mesh/ui/NodeDetail.kt b/app/src/main/java/com/geeksville/mesh/ui/NodeDetail.kt index f11bcdf36..fc0fa23aa 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/NodeDetail.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/NodeDetail.kt @@ -95,6 +95,7 @@ import com.geeksville.mesh.R import com.geeksville.mesh.model.MetricsState import com.geeksville.mesh.model.MetricsViewModel import com.geeksville.mesh.model.Node +import com.geeksville.mesh.navigation.Route import com.geeksville.mesh.ui.components.PreferenceCategory import com.geeksville.mesh.ui.preview.NodePreviewParameterProvider import com.geeksville.mesh.ui.radioconfig.NavCard diff --git a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ConfigRoute.kt b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ConfigRoute.kt index 4f2986c37..4f8adc042 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ConfigRoute.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ConfigRoute.kt @@ -30,7 +30,7 @@ import androidx.compose.material.icons.filled.Security import androidx.compose.material.icons.filled.Wifi import androidx.compose.ui.graphics.vector.ImageVector import com.geeksville.mesh.MeshProtos.DeviceMetadata -import com.geeksville.mesh.ui.Route +import com.geeksville.mesh.navigation.Route @Suppress("MagicNumber") // Config (type = AdminProtos.AdminMessage.ConfigType) diff --git a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ModuleRoute.kt b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ModuleRoute.kt index cd6dc09da..41abfba54 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ModuleRoute.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/ModuleRoute.kt @@ -33,7 +33,7 @@ import androidx.compose.material.icons.filled.Speed import androidx.compose.material.icons.filled.Usb import androidx.compose.ui.graphics.vector.ImageVector import com.geeksville.mesh.MeshProtos.DeviceMetadata -import com.geeksville.mesh.ui.Route +import com.geeksville.mesh.navigation.Route @Suppress("MagicNumber") // ModuleConfig (type = AdminProtos.AdminMessage.ModuleConfigType) diff --git a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfig.kt b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfig.kt index 2889338f7..613135dfc 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfig.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfig.kt @@ -65,7 +65,7 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.geeksville.mesh.ClientOnlyProtos.DeviceProfile import com.geeksville.mesh.R -import com.geeksville.mesh.ui.Route +import com.geeksville.mesh.navigation.Route import com.geeksville.mesh.ui.components.PreferenceCategory import com.geeksville.mesh.ui.radioconfig.components.EditDeviceProfileDialog import com.geeksville.mesh.ui.radioconfig.components.PacketResponseStateDialog diff --git a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfigViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfigViewModel.kt index 1523d0cae..1d9a24b7e 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfigViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/RadioConfigViewModel.kt @@ -44,9 +44,9 @@ import com.geeksville.mesh.model.getChannelList import com.geeksville.mesh.model.getStringResFrom import com.geeksville.mesh.model.toChannelSet import com.geeksville.mesh.moduleConfig +import com.geeksville.mesh.navigation.Route import com.geeksville.mesh.repository.datastore.RadioConfigRepository import com.geeksville.mesh.service.MeshService.ConnectionState -import com.geeksville.mesh.ui.Route import com.geeksville.mesh.util.UiText import com.google.protobuf.MessageLite import dagger.hilt.android.lifecycle.HiltViewModel