mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
Refactor map layer management and navigation infrastructure (#4921)
Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
This commit is contained in:
parent
b608a04ca4
commit
a005231d94
142 changed files with 5408 additions and 3090 deletions
|
|
@ -712,6 +712,10 @@ private fun MapLayerOverlay(layerItem: MapLayerItem, mapViewModel: MapViewModel)
|
|||
var currentLayer by remember { mutableStateOf<com.google.maps.android.data.Layer?>(null) }
|
||||
|
||||
MapEffect(layerItem.id, layerItem.isRefreshing) { map ->
|
||||
// Cleanup old layer if we're reloading
|
||||
currentLayer?.safeRemoveLayerFromMap()
|
||||
currentLayer = null
|
||||
|
||||
val inputStream = mapViewModel.getInputStreamFromUri(layerItem) ?: return@MapEffect
|
||||
val layer =
|
||||
try {
|
||||
|
|
@ -727,7 +731,7 @@ private fun MapLayerOverlay(layerItem: MapLayerItem, mapViewModel: MapViewModel)
|
|||
|
||||
layer?.let {
|
||||
if (layerItem.isVisible) {
|
||||
it.addLayerToMap()
|
||||
it.safeAddLayerToMap()
|
||||
}
|
||||
currentLayer = it
|
||||
}
|
||||
|
|
@ -735,7 +739,7 @@ private fun MapLayerOverlay(layerItem: MapLayerItem, mapViewModel: MapViewModel)
|
|||
|
||||
DisposableEffect(layerItem.id) {
|
||||
onDispose {
|
||||
currentLayer?.removeLayerFromMap()
|
||||
currentLayer?.safeRemoveLayerFromMap()
|
||||
currentLayer = null
|
||||
}
|
||||
}
|
||||
|
|
@ -745,13 +749,33 @@ private fun MapLayerOverlay(layerItem: MapLayerItem, mapViewModel: MapViewModel)
|
|||
LaunchedEffect(layerItem.isVisible) {
|
||||
val layer = currentLayer ?: return@LaunchedEffect
|
||||
if (layerItem.isVisible) {
|
||||
if (!layer.isLayerOnMap) layer.addLayerToMap()
|
||||
layer.safeAddLayerToMap()
|
||||
} else {
|
||||
if (layer.isLayerOnMap) layer.removeLayerFromMap()
|
||||
layer.safeRemoveLayerFromMap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun com.google.maps.android.data.Layer.safeRemoveLayerFromMap() {
|
||||
try {
|
||||
removeLayerFromMap()
|
||||
} catch (e: Exception) {
|
||||
// Log it and ignore. This specifically handles a NullPointerException in
|
||||
// KmlRenderer.hasNestedContainers which can occur when disposing layers.
|
||||
Logger.withTag("MapView").e(e) { "Error removing map layer" }
|
||||
}
|
||||
}
|
||||
|
||||
private fun com.google.maps.android.data.Layer.safeAddLayerToMap() {
|
||||
try {
|
||||
if (!isLayerOnMap) {
|
||||
addLayerToMap()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Logger.withTag("MapView").e(e) { "Error adding map layer" }
|
||||
}
|
||||
}
|
||||
|
||||
internal fun convertIntToEmoji(unicodeCodePoint: Int): String = try {
|
||||
String(Character.toChars(unicodeCodePoint))
|
||||
} catch (e: IllegalArgumentException) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue