kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
Use BuildConfigProvider in map views
rodzic
d06430005a
commit
3c7c501f8a
|
@ -256,7 +256,12 @@ fun MapView(mapViewModel: MapViewModel = hiltViewModel(), navigateToNodeDetails:
|
||||||
val geoPoints = nodesWithPosition.map { GeoPoint(it.latitude, it.longitude) }
|
val geoPoints = nodesWithPosition.map { GeoPoint(it.latitude, it.longitude) }
|
||||||
BoundingBox.fromGeoPoints(geoPoints)
|
BoundingBox.fromGeoPoints(geoPoints)
|
||||||
}
|
}
|
||||||
val map = rememberMapViewWithLifecycle(initialCameraView, loadOnlineTileSourceBase())
|
val map =
|
||||||
|
rememberMapViewWithLifecycle(
|
||||||
|
applicationId = mapViewModel.applicationId,
|
||||||
|
box = initialCameraView,
|
||||||
|
tileSource = loadOnlineTileSourceBase(),
|
||||||
|
)
|
||||||
|
|
||||||
val nodeClusterer = remember { RadiusMarkerClusterer(context) }
|
val nodeClusterer = remember { RadiusMarkerClusterer(context) }
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,6 @@ import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleEventObserver
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
import com.geeksville.mesh.BuildConfig
|
|
||||||
import org.meshtastic.feature.map.requiredZoomLevel
|
import org.meshtastic.feature.map.requiredZoomLevel
|
||||||
import org.osmdroid.config.Configuration
|
import org.osmdroid.config.Configuration
|
||||||
import org.osmdroid.tileprovider.tilesource.ITileSource
|
import org.osmdroid.tileprovider.tilesource.ITileSource
|
||||||
|
@ -74,6 +73,7 @@ private const val DEFAULT_ZOOM_LEVEL = 15.0
|
||||||
@Suppress("MagicNumber")
|
@Suppress("MagicNumber")
|
||||||
@Composable
|
@Composable
|
||||||
internal fun rememberMapViewWithLifecycle(
|
internal fun rememberMapViewWithLifecycle(
|
||||||
|
applicationId: String,
|
||||||
box: BoundingBox,
|
box: BoundingBox,
|
||||||
tileSource: ITileSource = TileSourceFactory.DEFAULT_TILE_SOURCE,
|
tileSource: ITileSource = TileSourceFactory.DEFAULT_TILE_SOURCE,
|
||||||
): MapView {
|
): MapView {
|
||||||
|
@ -84,12 +84,18 @@ internal fun rememberMapViewWithLifecycle(
|
||||||
DEFAULT_ZOOM_LEVEL
|
DEFAULT_ZOOM_LEVEL
|
||||||
}
|
}
|
||||||
val center = GeoPoint(box.centerLatitude, box.centerLongitude)
|
val center = GeoPoint(box.centerLatitude, box.centerLongitude)
|
||||||
return rememberMapViewWithLifecycle(zoom, center, tileSource)
|
return rememberMapViewWithLifecycle(
|
||||||
|
applicationId = applicationId,
|
||||||
|
zoomLevel = zoom,
|
||||||
|
mapCenter = center,
|
||||||
|
tileSource = tileSource,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("LongMethod")
|
@Suppress("LongMethod")
|
||||||
@Composable
|
@Composable
|
||||||
internal fun rememberMapViewWithLifecycle(
|
internal fun rememberMapViewWithLifecycle(
|
||||||
|
applicationId: String,
|
||||||
zoomLevel: Double = MIN_ZOOM_LEVEL,
|
zoomLevel: Double = MIN_ZOOM_LEVEL,
|
||||||
mapCenter: GeoPoint = GeoPoint(0.0, 0.0),
|
mapCenter: GeoPoint = GeoPoint(0.0, 0.0),
|
||||||
tileSource: ITileSource = TileSourceFactory.DEFAULT_TILE_SOURCE,
|
tileSource: ITileSource = TileSourceFactory.DEFAULT_TILE_SOURCE,
|
||||||
|
@ -112,7 +118,7 @@ internal fun rememberMapViewWithLifecycle(
|
||||||
clipToOutline = true
|
clipToOutline = true
|
||||||
|
|
||||||
// Required to get online tiles
|
// Required to get online tiles
|
||||||
Configuration.getInstance().userAgentValue = BuildConfig.APPLICATION_ID
|
Configuration.getInstance().userAgentValue = applicationId
|
||||||
setTileSource(tileSource)
|
setTileSource(tileSource)
|
||||||
isVerticalMapRepetitionEnabled = false // disables map repetition
|
isVerticalMapRepetitionEnabled = false // disables map repetition
|
||||||
setMultiTouchControls(true)
|
setMultiTouchControls(true)
|
||||||
|
|
|
@ -48,7 +48,12 @@ fun NodeMapScreen(
|
||||||
val state by metricsViewModel.state.collectAsStateWithLifecycle()
|
val state by metricsViewModel.state.collectAsStateWithLifecycle()
|
||||||
val geoPoints = state.positionLogs.map { GeoPoint(it.latitudeI * DEG_D, it.longitudeI * DEG_D) }
|
val geoPoints = state.positionLogs.map { GeoPoint(it.latitudeI * DEG_D, it.longitudeI * DEG_D) }
|
||||||
val cameraView = remember { BoundingBox.fromGeoPoints(geoPoints) }
|
val cameraView = remember { BoundingBox.fromGeoPoints(geoPoints) }
|
||||||
val mapView = rememberMapViewWithLifecycle(cameraView, metricsViewModel.tileSource)
|
val mapView =
|
||||||
|
rememberMapViewWithLifecycle(
|
||||||
|
applicationId = nodeMapViewModel.applicationId,
|
||||||
|
box = cameraView,
|
||||||
|
tileSource = metricsViewModel.tileSource,
|
||||||
|
)
|
||||||
|
|
||||||
AndroidView(
|
AndroidView(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
|
|
@ -20,11 +20,15 @@ package com.geeksville.mesh.ui.map
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
import org.meshtastic.core.common.build.BuildConfigProvider
|
||||||
import org.meshtastic.core.data.repository.NodeRepository
|
import org.meshtastic.core.data.repository.NodeRepository
|
||||||
import org.meshtastic.core.database.model.Node
|
import org.meshtastic.core.database.model.Node
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class NodeMapViewModel @Inject constructor(nodeRepository: NodeRepository) : ViewModel() {
|
class NodeMapViewModel @Inject constructor(nodeRepository: NodeRepository, buildConfigProvider: BuildConfigProvider) :
|
||||||
|
ViewModel() {
|
||||||
val ourNodeInfo: StateFlow<Node?> = nodeRepository.ourNodeInfo
|
val ourNodeInfo: StateFlow<Node?> = nodeRepository.ourNodeInfo
|
||||||
|
|
||||||
|
val applicationId = buildConfigProvider.applicationId
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ plugins {
|
||||||
android { namespace = "org.meshtastic.feature.map" }
|
android { namespace = "org.meshtastic.feature.map" }
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(projects.core.common)
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.data)
|
||||||
implementation(projects.core.database)
|
implementation(projects.core.database)
|
||||||
implementation(projects.core.datastore)
|
implementation(projects.core.datastore)
|
||||||
|
|
|
@ -22,6 +22,7 @@ import com.geeksville.mesh.LocalOnlyProtos.LocalConfig
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.stateIn
|
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.NodeRepository
|
||||||
import org.meshtastic.core.data.repository.PacketRepository
|
import org.meshtastic.core.data.repository.PacketRepository
|
||||||
import org.meshtastic.core.data.repository.RadioConfigRepository
|
import org.meshtastic.core.data.repository.RadioConfigRepository
|
||||||
|
@ -39,6 +40,7 @@ constructor(
|
||||||
private val nodeRepository: NodeRepository,
|
private val nodeRepository: NodeRepository,
|
||||||
serviceRepository: ServiceRepository,
|
serviceRepository: ServiceRepository,
|
||||||
radioConfigRepository: RadioConfigRepository,
|
radioConfigRepository: RadioConfigRepository,
|
||||||
|
buildConfigProvider: BuildConfigProvider,
|
||||||
) : BaseMapViewModel(mapPrefs, nodeRepository, packetRepository, serviceRepository) {
|
) : BaseMapViewModel(mapPrefs, nodeRepository, packetRepository, serviceRepository) {
|
||||||
|
|
||||||
var mapStyleId: Int
|
var mapStyleId: Int
|
||||||
|
@ -57,5 +59,7 @@ constructor(
|
||||||
val config
|
val config
|
||||||
get() = localConfig.value
|
get() = localConfig.value
|
||||||
|
|
||||||
|
val applicationId = buildConfigProvider.applicationId
|
||||||
|
|
||||||
fun getUser(userId: String?) = nodeRepository.getUser(userId ?: DataPacket.ID_BROADCAST)
|
fun getUser(userId: String?) = nodeRepository.getUser(userId ?: DataPacket.ID_BROADCAST)
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue