Use BuildConfigProvider in map views

pull/3318/head
Phil Oliver 2025-10-03 15:37:55 -04:00
rodzic d06430005a
commit 3c7c501f8a
6 zmienionych plików z 31 dodań i 6 usunięć

Wyświetl plik

@ -256,7 +256,12 @@ fun MapView(mapViewModel: MapViewModel = hiltViewModel(), navigateToNodeDetails:
val geoPoints = nodesWithPosition.map { GeoPoint(it.latitude, it.longitude) }
BoundingBox.fromGeoPoints(geoPoints)
}
val map = rememberMapViewWithLifecycle(initialCameraView, loadOnlineTileSourceBase())
val map =
rememberMapViewWithLifecycle(
applicationId = mapViewModel.applicationId,
box = initialCameraView,
tileSource = loadOnlineTileSourceBase(),
)
val nodeClusterer = remember { RadiusMarkerClusterer(context) }

Wyświetl plik

@ -33,7 +33,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import com.geeksville.mesh.BuildConfig
import org.meshtastic.feature.map.requiredZoomLevel
import org.osmdroid.config.Configuration
import org.osmdroid.tileprovider.tilesource.ITileSource
@ -74,6 +73,7 @@ private const val DEFAULT_ZOOM_LEVEL = 15.0
@Suppress("MagicNumber")
@Composable
internal fun rememberMapViewWithLifecycle(
applicationId: String,
box: BoundingBox,
tileSource: ITileSource = TileSourceFactory.DEFAULT_TILE_SOURCE,
): MapView {
@ -84,12 +84,18 @@ internal fun rememberMapViewWithLifecycle(
DEFAULT_ZOOM_LEVEL
}
val center = GeoPoint(box.centerLatitude, box.centerLongitude)
return rememberMapViewWithLifecycle(zoom, center, tileSource)
return rememberMapViewWithLifecycle(
applicationId = applicationId,
zoomLevel = zoom,
mapCenter = center,
tileSource = tileSource,
)
}
@Suppress("LongMethod")
@Composable
internal fun rememberMapViewWithLifecycle(
applicationId: String,
zoomLevel: Double = MIN_ZOOM_LEVEL,
mapCenter: GeoPoint = GeoPoint(0.0, 0.0),
tileSource: ITileSource = TileSourceFactory.DEFAULT_TILE_SOURCE,
@ -112,7 +118,7 @@ internal fun rememberMapViewWithLifecycle(
clipToOutline = true
// Required to get online tiles
Configuration.getInstance().userAgentValue = BuildConfig.APPLICATION_ID
Configuration.getInstance().userAgentValue = applicationId
setTileSource(tileSource)
isVerticalMapRepetitionEnabled = false // disables map repetition
setMultiTouchControls(true)

Wyświetl plik

@ -48,7 +48,12 @@ fun NodeMapScreen(
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, metricsViewModel.tileSource)
val mapView =
rememberMapViewWithLifecycle(
applicationId = nodeMapViewModel.applicationId,
box = cameraView,
tileSource = metricsViewModel.tileSource,
)
AndroidView(
modifier = Modifier.fillMaxSize(),

Wyświetl plik

@ -20,11 +20,15 @@ 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.common.build.BuildConfigProvider
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() {
class NodeMapViewModel @Inject constructor(nodeRepository: NodeRepository, buildConfigProvider: BuildConfigProvider) :
ViewModel() {
val ourNodeInfo: StateFlow<Node?> = nodeRepository.ourNodeInfo
val applicationId = buildConfigProvider.applicationId
}

Wyświetl plik

@ -25,6 +25,7 @@ plugins {
android { namespace = "org.meshtastic.feature.map" }
dependencies {
implementation(projects.core.common)
implementation(projects.core.data)
implementation(projects.core.database)
implementation(projects.core.datastore)

Wyświetl plik

@ -22,6 +22,7 @@ import com.geeksville.mesh.LocalOnlyProtos.LocalConfig
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
import org.meshtastic.core.common.build.BuildConfigProvider
import org.meshtastic.core.data.repository.NodeRepository
import org.meshtastic.core.data.repository.PacketRepository
import org.meshtastic.core.data.repository.RadioConfigRepository
@ -39,6 +40,7 @@ constructor(
private val nodeRepository: NodeRepository,
serviceRepository: ServiceRepository,
radioConfigRepository: RadioConfigRepository,
buildConfigProvider: BuildConfigProvider,
) : BaseMapViewModel(mapPrefs, nodeRepository, packetRepository, serviceRepository) {
var mapStyleId: Int
@ -57,5 +59,7 @@ constructor(
val config
get() = localConfig.value
val applicationId = buildConfigProvider.applicationId
fun getUser(userId: String?) = nodeRepository.getUser(userId ?: DataPacket.ID_BROADCAST)
}