diff --git a/app/src/fdroid/java/com/geeksville/mesh/ui/node/NodeMap.kt b/app/src/fdroid/java/com/geeksville/mesh/ui/node/NodeMapScreen.kt similarity index 87% rename from app/src/fdroid/java/com/geeksville/mesh/ui/node/NodeMap.kt rename to app/src/fdroid/java/com/geeksville/mesh/ui/node/NodeMapScreen.kt index 45820aa3a..39a0cdc2a 100644 --- a/app/src/fdroid/java/com/geeksville/mesh/ui/node/NodeMap.kt +++ b/app/src/fdroid/java/com/geeksville/mesh/ui/node/NodeMapScreen.kt @@ -28,7 +28,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavHostController import com.geeksville.mesh.model.MetricsViewModel -import com.geeksville.mesh.model.UIViewModel +import com.geeksville.mesh.ui.map.NodeMapViewModel import com.geeksville.mesh.ui.map.rememberMapViewWithLifecycle import com.geeksville.mesh.util.addCopyright import com.geeksville.mesh.util.addPolyline @@ -42,14 +42,14 @@ private const val DEG_D = 1e-7 @Composable fun NodeMapScreen( navController: NavHostController, - @Suppress("UNUSED_PARAMETER") uiViewModel: UIViewModel = hiltViewModel(), - viewModel: MetricsViewModel = hiltViewModel(), + metricsViewModel: MetricsViewModel = hiltViewModel(), + nodeMapViewModel: NodeMapViewModel = hiltViewModel(), ) { val density = LocalDensity.current - val state by viewModel.state.collectAsStateWithLifecycle() + val state by metricsViewModel.state.collectAsStateWithLifecycle() val geoPoints = state.positionLogs.map { GeoPoint(it.latitudeI * DEG_D, it.longitudeI * DEG_D) } val cameraView = remember { BoundingBox.fromGeoPoints(geoPoints) } - val mapView = rememberMapViewWithLifecycle(cameraView, viewModel.tileSource) + val mapView = rememberMapViewWithLifecycle(cameraView, metricsViewModel.tileSource) AndroidView( modifier = Modifier.fillMaxSize(), diff --git a/app/src/google/java/com/geeksville/mesh/ui/node/NodeMap.kt b/app/src/google/java/com/geeksville/mesh/ui/node/NodeMapScreen.kt similarity index 92% rename from app/src/google/java/com/geeksville/mesh/ui/node/NodeMap.kt rename to app/src/google/java/com/geeksville/mesh/ui/node/NodeMapScreen.kt index fbcb47eae..f9dd1420b 100644 --- a/app/src/google/java/com/geeksville/mesh/ui/node/NodeMap.kt +++ b/app/src/google/java/com/geeksville/mesh/ui/node/NodeMapScreen.kt @@ -28,22 +28,22 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavHostController import com.geeksville.mesh.model.MetricsViewModel -import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.common.components.MainAppBar import com.geeksville.mesh.ui.map.MapView +import com.geeksville.mesh.ui.map.NodeMapViewModel const val DEG_D = 1e-7 @Composable fun NodeMapScreen( navController: NavHostController, - uiViewModel: UIViewModel, metricsViewModel: MetricsViewModel = hiltViewModel(), + nodeMapViewModel: NodeMapViewModel = hiltViewModel(), ) { val state by metricsViewModel.state.collectAsState() val positions = state.positionLogs val destNum = state.node?.num - val ourNodeInfo by uiViewModel.ourNodeInfo.collectAsStateWithLifecycle() + val ourNodeInfo by nodeMapViewModel.ourNodeInfo.collectAsStateWithLifecycle() Scaffold( topBar = { diff --git a/app/src/main/java/com/geeksville/mesh/navigation/NodesNavigation.kt b/app/src/main/java/com/geeksville/mesh/navigation/NodesNavigation.kt index 514845c7c..b05be2265 100644 --- a/app/src/main/java/com/geeksville/mesh/navigation/NodesNavigation.kt +++ b/app/src/main/java/com/geeksville/mesh/navigation/NodesNavigation.kt @@ -225,7 +225,7 @@ enum class NodeDetailRoute( R.string.node_map, NodeDetailRoutes.NodeMap, Icons.Default.LocationOn, - { navController, metricsVM, uiVM -> NodeMapScreen(navController, uiVM, metricsVM) }, + { navController, metricsVM, _ -> NodeMapScreen(navController, metricsVM) }, ), POSITION_LOG( R.string.position_log, diff --git a/app/src/main/java/com/geeksville/mesh/ui/map/NodeMapViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/map/NodeMapViewModel.kt new file mode 100644 index 000000000..20c36ffbe --- /dev/null +++ b/app/src/main/java/com/geeksville/mesh/ui/map/NodeMapViewModel.kt @@ -0,0 +1,30 @@ +/* + * 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.ui.map + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.StateFlow +import org.meshtastic.core.data.repository.NodeRepository +import org.meshtastic.core.database.model.Node +import javax.inject.Inject + +@HiltViewModel +class NodeMapViewModel @Inject constructor(nodeRepository: NodeRepository) : ViewModel() { + val ourNodeInfo: StateFlow = nodeRepository.ourNodeInfo +}