refactor: convert gpsString to Position extension

This commit is contained in:
andrekir 2023-09-04 18:40:21 -03:00
parent b25bdb6ff8
commit e72b046c53
5 changed files with 27 additions and 25 deletions

View file

@ -58,6 +58,9 @@ class UsersFragment : ScreenFragment("Users"), Logging {
private var nodes = arrayOf<NodeInfo>()
val ignoreIncomingList: MutableList<Int> = mutableListOf()
private val gpsFormat by lazy { model.config.display.gpsFormat.number }
private val displayUnits by lazy { model.config.display.units.number }
private fun CharSequence.strike() = SpannableString(this).apply {
setSpan(StrikethroughSpan(), 0, this.length, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE)
}
@ -215,7 +218,7 @@ class UsersFragment : ScreenFragment("Users"), Logging {
if (pos != null) {
val html = "<a href='geo:${pos.latitude},${pos.longitude}?z=17&label=${
URLEncoder.encode(name, "utf-8")
}'>${model.gpsString(pos)}</a>"
}'>${pos.gpsString(gpsFormat)}</a>"
holder.coordsView.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY)
holder.coordsView.movementMethod = LinkMovementMethod.getInstance()
holder.coordsView.visibility = View.VISIBLE
@ -224,7 +227,7 @@ class UsersFragment : ScreenFragment("Users"), Logging {
}
val ourNodeInfo = model.ourNodeInfo.value
val distance = ourNodeInfo?.distanceStr(n, model.config.display.units.number)
val distance = ourNodeInfo?.distanceStr(n, displayUnits)
if (distance != null) {
holder.distanceView.text = distance
holder.distanceView.visibility = View.VISIBLE

View file

@ -81,11 +81,9 @@ import org.osmdroid.util.GeoPoint
import org.osmdroid.views.CustomZoomButtonsController
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.CopyrightOverlay
import org.osmdroid.views.overlay.DefaultOverlayManager
import org.osmdroid.views.overlay.MapEventsOverlay
import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.Polygon
import org.osmdroid.views.overlay.TilesOverlay
import org.osmdroid.views.overlay.gridlines.LatLonGridlineOverlay2
import org.osmdroid.views.overlay.infowindow.InfoWindow
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
@ -188,23 +186,28 @@ fun MapView(model: UIViewModel = viewModel()) {
var showEditWaypointDialog by remember { mutableStateOf<Waypoint?>(null) }
var showCurrentCacheInfo by remember { mutableStateOf(false) }
val markerIcon by lazy {
AppCompatResources.getDrawable(context, R.drawable.ic_baseline_location_on_24)
}
fun MapView.onNodesChanged(nodes: Collection<NodeInfo>): List<MarkerWithLabel> {
val nodesWithPosition = nodes.filter { it.validPosition != null }
val ic = ContextCompat.getDrawable(context, R.drawable.ic_baseline_location_on_24)
val ourNode = model.ourNodeInfo.value
val gpsFormat = model.config.display.gpsFormat.number
val displayUnits = model.config.display.units.number
return nodesWithPosition.map { node ->
val (p, u) = node.position!! to node.user!!
MarkerWithLabel(this, "${u.longName} ${formatAgo(p.time)}").apply {
MarkerWithLabel(this, "${u.shortName} ${formatAgo(p.time)}").apply {
id = u.id
title = "${u.longName} ${node.batteryStr}"
snippet = model.gpsString(p)
ourNode?.distanceStr(node, model.config.display.units.number)?.let { dist ->
snippet = p.gpsString(gpsFormat)
ourNode?.distanceStr(node, displayUnits)?.let { dist ->
subDescription =
context.getString(R.string.map_subDescription, ourNode.bearing(node), dist)
}
setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
position = GeoPoint(p.latitude, p.longitude)
icon = ic
icon = markerIcon
}
}
}
@ -594,7 +597,6 @@ fun MapView(model: UIViewModel = viewModel()) {
setTileSource(loadOnlineTileSourceBase())
setDestroyMode(false) // keeps map instance alive when in the background
isVerticalMapRepetitionEnabled = false // disables map repetition
overlayManager = DefaultOverlayManager(TilesOverlay(tileProvider, context))
setMultiTouchControls(true)
setScrollableAreaLimitLatitude( // bounds scrollable map
overlayManager.tilesOverlay.bounds.actualNorth,