From c6cc33e16cf7ff04ebdb4cb3c5f6dd88a3050787 Mon Sep 17 00:00:00 2001 From: andrekir Date: Mon, 4 Nov 2024 17:48:38 -0300 Subject: [PATCH] refactor: extract `MapView` extensions from `MapFragment` --- .../com/geeksville/mesh/ui/map/MapFragment.kt | 58 +----------------- .../geeksville/mesh/util/MapViewExtensions.kt | 61 +++++++++++++++++++ config/detekt/detekt-baseline.xml | 4 +- 3 files changed, 66 insertions(+), 57 deletions(-) create mode 100644 app/src/main/java/com/geeksville/mesh/util/MapViewExtensions.kt diff --git a/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt index 3c67dae48..d09b89404 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt @@ -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 diff --git a/app/src/main/java/com/geeksville/mesh/util/MapViewExtensions.kt b/app/src/main/java/com/geeksville/mesh/util/MapViewExtensions.kt new file mode 100644 index 000000000..ecdabdae9 --- /dev/null +++ b/app/src/main/java/com/geeksville/mesh/util/MapViewExtensions.kt @@ -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)) +} diff --git a/config/detekt/detekt-baseline.xml b/config/detekt/detekt-baseline.xml index 85842bbf1..ac48b704d 100644 --- a/config/detekt/detekt-baseline.xml +++ b/config/detekt/detekt-baseline.xml @@ -268,9 +268,9 @@ MagicNumber:MapFragment.kt$128205 MagicNumber:MapFragment.kt$12F MagicNumber:MapFragment.kt$1e-7 - MagicNumber:MapFragment.kt$3.0f - MagicNumber:MapFragment.kt$40f MagicNumber:MapFragment.kt$<no name provided>$1e7 + MagicNumber:MapViewExtensions.kt$3.0f + MagicNumber:MapViewExtensions.kt$40f MagicNumber:MarkerWithLabel.kt$MarkerWithLabel$3 MagicNumber:MeshService.kt$MeshService$0xffffffff MagicNumber:MeshService.kt$MeshService$100