refactor: extract `MapView` extensions from `MapFragment`

pull/1384/head
andrekir 2024-11-04 17:48:38 -03:00
rodzic 63513a56a1
commit c6cc33e16c
3 zmienionych plików z 66 dodań i 57 usunięć

Wyświetl plik

@ -1,8 +1,6 @@
package com.geeksville.mesh.ui.map
import android.content.Context
import android.graphics.Color
import android.graphics.Paint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -66,7 +64,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.hilt.android.AndroidEntryPoint
import org.osmdroid.bonuspack.utils.BonusPackHelper.getBitmapFromVectorDrawable
import org.osmdroid.config.Configuration
import org.osmdroid.events.DelayedMapListener
import org.osmdroid.events.MapEventsReceiver
import org.osmdroid.events.MapListener
import org.osmdroid.events.ScrollEvent
@ -80,14 +77,15 @@ import org.osmdroid.util.BoundingBox
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.MapEventsOverlay
import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.Polygon
import org.osmdroid.views.overlay.gridlines.LatLonGridlineOverlay2
import org.osmdroid.views.overlay.infowindow.InfoWindow
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
import com.geeksville.mesh.model.map.clustering.RadiusMarkerClusterer
import com.geeksville.mesh.util.addCopyright
import com.geeksville.mesh.util.addMapEventListener
import com.geeksville.mesh.util.createLatLongGrid
import java.io.File
import java.text.DateFormat
@ -127,41 +125,6 @@ private fun MapView.UpdateMarkers(
nodeClusterer.invalidate()
}
/**
* Adds copyright to map depending on what source is showing
*/
private fun MapView.addCopyright() {
if (overlays.none { it is CopyrightOverlay }) {
val copyrightNotice: String = tileProvider.tileSource.copyrightNotice ?: return
val copyrightOverlay = CopyrightOverlay(context)
copyrightOverlay.setCopyrightNotice(copyrightNotice)
overlays.add(copyrightOverlay)
}
}
/**
* Create LatLong Grid line overlay
* @param enabled: turn on/off gridlines
*/
private fun MapView.createLatLongGrid(enabled: Boolean) {
val latLongGridOverlay = LatLonGridlineOverlay2()
latLongGridOverlay.isEnabled = enabled
if (latLongGridOverlay.isEnabled) {
val textPaint = Paint().apply {
textSize = 40f
color = Color.GRAY
isAntiAlias = true
isFakeBoldText = true
textAlign = Paint.Align.CENTER
}
latLongGridOverlay.textPaint = textPaint
latLongGridOverlay.setBackgroundColor(Color.TRANSPARENT)
latLongGridOverlay.setLineWidth(3.0f)
latLongGridOverlay.setLineColor(Color.GRAY)
overlays.add(latLongGridOverlay)
}
}
// private fun addWeatherLayer() {
// if (map.tileProvider.tileSource.name()
// .equals(CustomTileSource.getTileSource("ESRI World TOPO").name())
@ -246,21 +209,6 @@ private fun Context.purgeTileSource(onResult: (String) -> Unit) {
builder.show()
}
private const val INACTIVITY_DELAY_MILLIS = 500L
private fun MapView.addMapEventListener(onEvent: () -> Unit) {
addMapListener(DelayedMapListener(object : MapListener {
override fun onScroll(event: ScrollEvent): Boolean {
onEvent()
return true
}
override fun onZoom(event: ZoomEvent): Boolean {
onEvent()
return true
}
}, INACTIVITY_DELAY_MILLIS))
}
private const val MaxZoomLevel = 20.0
@Composable

Wyświetl plik

@ -0,0 +1,61 @@
package com.geeksville.mesh.util
import android.graphics.Color
import android.graphics.Paint
import org.osmdroid.events.DelayedMapListener
import org.osmdroid.events.MapListener
import org.osmdroid.events.ScrollEvent
import org.osmdroid.events.ZoomEvent
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.CopyrightOverlay
import org.osmdroid.views.overlay.gridlines.LatLonGridlineOverlay2
/**
* Adds copyright to map depending on what source is showing
*/
fun MapView.addCopyright() {
if (overlays.none { it is CopyrightOverlay }) {
val copyrightNotice: String = tileProvider.tileSource.copyrightNotice ?: return
val copyrightOverlay = CopyrightOverlay(context)
copyrightOverlay.setCopyrightNotice(copyrightNotice)
overlays.add(copyrightOverlay)
}
}
/**
* Create LatLong Grid line overlay
* @param enabled: turn on/off gridlines
*/
fun MapView.createLatLongGrid(enabled: Boolean) {
val latLongGridOverlay = LatLonGridlineOverlay2()
latLongGridOverlay.isEnabled = enabled
if (latLongGridOverlay.isEnabled) {
val textPaint = Paint().apply {
textSize = 40f
color = Color.GRAY
isAntiAlias = true
isFakeBoldText = true
textAlign = Paint.Align.CENTER
}
latLongGridOverlay.textPaint = textPaint
latLongGridOverlay.setBackgroundColor(Color.TRANSPARENT)
latLongGridOverlay.setLineWidth(3.0f)
latLongGridOverlay.setLineColor(Color.GRAY)
overlays.add(latLongGridOverlay)
}
}
private const val INACTIVITY_DELAY_MILLIS = 500L
fun MapView.addMapEventListener(onEvent: () -> Unit) {
addMapListener(DelayedMapListener(object : MapListener {
override fun onScroll(event: ScrollEvent): Boolean {
onEvent()
return true
}
override fun onZoom(event: ZoomEvent): Boolean {
onEvent()
return true
}
}, INACTIVITY_DELAY_MILLIS))
}

Wyświetl plik

@ -268,9 +268,9 @@
<ID>MagicNumber:MapFragment.kt$128205</ID>
<ID>MagicNumber:MapFragment.kt$12F</ID>
<ID>MagicNumber:MapFragment.kt$1e-7</ID>
<ID>MagicNumber:MapFragment.kt$3.0f</ID>
<ID>MagicNumber:MapFragment.kt$40f</ID>
<ID>MagicNumber:MapFragment.kt$&lt;no name provided&gt;$1e7</ID>
<ID>MagicNumber:MapViewExtensions.kt$3.0f</ID>
<ID>MagicNumber:MapViewExtensions.kt$40f</ID>
<ID>MagicNumber:MarkerWithLabel.kt$MarkerWithLabel$3</ID>
<ID>MagicNumber:MeshService.kt$MeshService$0xffffffff</ID>
<ID>MagicNumber:MeshService.kt$MeshService$100</ID>