diff --git a/app/src/fdroid/kotlin/org/meshtastic/app/node/component/InlineMap.kt b/app/src/fdroid/kotlin/org/meshtastic/app/node/component/InlineMap.kt index 638dcead9..447765522 100644 --- a/app/src/fdroid/kotlin/org/meshtastic/app/node/component/InlineMap.kt +++ b/app/src/fdroid/kotlin/org/meshtastic/app/node/component/InlineMap.kt @@ -16,11 +16,49 @@ */ package org.meshtastic.app.node.component +import android.view.ViewGroup import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.viewinterop.AndroidView import org.meshtastic.core.model.Node +import org.osmdroid.tileprovider.tilesource.TileSourceFactory +import org.osmdroid.util.GeoPoint +import org.osmdroid.views.MapView +import org.osmdroid.views.overlay.Marker @Composable fun InlineMap(node: Node, modifier: Modifier = Modifier) { - // No-op for F-Droid builds + val context = androidx.compose.ui.platform.LocalContext.current + + val map = remember { + MapView(context).apply { + layoutParams = + ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + + // Default osmdroid tile source. + setTileSource(TileSourceFactory.MAPNIK) + setMultiTouchControls(false) + + controller.setZoom(15.0) + } + } + + LaunchedEffect(node.num) { + val point = GeoPoint(node.latitude, node.longitude) + + map.overlays.clear() + + val marker = + Marker(map).apply { + position = point + setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM) + } + map.overlays.add(marker) + + map.controller.animateTo(point) + } + + AndroidView(factory = { map }, modifier = modifier) }