diff --git a/app/src/main/java/com/geeksville/mesh/model/map/CirclePlottingOverlay.kt b/app/src/main/java/com/geeksville/mesh/model/map/CirclePlottingOverlay.kt
new file mode 100644
index 00000000..eb7c3696
--- /dev/null
+++ b/app/src/main/java/com/geeksville/mesh/model/map/CirclePlottingOverlay.kt
@@ -0,0 +1,42 @@
+package com.geeksville.mesh.model.map
+
+import android.util.Log
+import android.view.MotionEvent
+import org.osmdroid.api.IMapView
+import org.osmdroid.config.Configuration
+import org.osmdroid.util.GeoPoint
+import org.osmdroid.views.MapView
+import org.osmdroid.views.overlay.Overlay
+import org.osmdroid.views.overlay.Polygon
+
+
+class CirclePlottingOverlay(var distanceKm: Int) : Overlay() {
+ override fun onLongPress(e: MotionEvent, mapView: MapView): Boolean {
+ if (Configuration.getInstance().isDebugMapView) {
+ Log.d(IMapView.LOGTAG, "CirclePlottingOverlay onLongPress")
+ }
+ val pt = mapView.projection.fromPixels(e.x.toInt(), e.y.toInt(), null) as GeoPoint
+ /*
+ * Notehttps://github.com/osmdroid/osmdroid/pull/722
+ * for more information and the discussion associated with this.
+ */
+
+ //just in case the point is off the map, let's fix the coordinates
+ if (pt.longitude < -180) pt.longitude = pt.longitude + 360
+ if (pt.longitude > 180) pt.longitude = pt.longitude - 360
+ //latitude is a bit harder. see https://en.wikipedia.org/wiki/Mercator_projection
+ if (pt.latitude > 85.05112877980659) pt.latitude = 85.05112877980659
+ if (pt.latitude < -85.05112877980659) pt.latitude = -85.05112877980659
+ val circle: List = Polygon.pointsAsCircle(pt, distanceKm.toDouble())
+ val p = Polygon(mapView)
+ p.points = circle
+ p.title = "A circle"
+ mapView.overlayManager.add(p)
+ mapView.invalidate()
+ return true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/geeksville/mesh/model/CustomTileSource.kt b/app/src/main/java/com/geeksville/mesh/model/map/CustomTileSource.kt
similarity index 98%
rename from app/src/main/java/com/geeksville/mesh/model/CustomTileSource.kt
rename to app/src/main/java/com/geeksville/mesh/model/map/CustomTileSource.kt
index 7e60c9a7..a537229e 100644
--- a/app/src/main/java/com/geeksville/mesh/model/CustomTileSource.kt
+++ b/app/src/main/java/com/geeksville/mesh/model/map/CustomTileSource.kt
@@ -1,11 +1,10 @@
-package com.geeksville.mesh.model
+package com.geeksville.mesh.model.map
import org.osmdroid.tileprovider.tilesource.ITileSource
import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
import org.osmdroid.tileprovider.tilesource.TileSourcePolicy
import org.osmdroid.util.MapTileIndex
-import org.osmdroid.wms.WMSTileSource
class CustomTileSource {
@@ -153,7 +152,6 @@ class CustomTileSource {
USGS_TOPO,
USGS_SAT,
ESRI_IMAGERY,
- NOAA_RADAR
)
diff --git a/app/src/main/java/com/geeksville/mesh/model/NOAAWmsTileSource.kt b/app/src/main/java/com/geeksville/mesh/model/map/NOAAWmsTileSource.kt
similarity index 99%
rename from app/src/main/java/com/geeksville/mesh/model/NOAAWmsTileSource.kt
rename to app/src/main/java/com/geeksville/mesh/model/map/NOAAWmsTileSource.kt
index da5f65b5..434a929e 100644
--- a/app/src/main/java/com/geeksville/mesh/model/NOAAWmsTileSource.kt
+++ b/app/src/main/java/com/geeksville/mesh/model/map/NOAAWmsTileSource.kt
@@ -1,4 +1,4 @@
-package com.geeksville.mesh.model
+package com.geeksville.mesh.model.map
import android.content.res.Resources
import android.util.Log
diff --git a/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt
index 3aa193fa..fa068d4c 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/MapFragment.kt
@@ -22,8 +22,9 @@ import com.geeksville.mesh.R
import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.database.entity.Packet
import com.geeksville.mesh.databinding.MapViewBinding
-import com.geeksville.mesh.model.CustomTileSource
import com.geeksville.mesh.model.UIViewModel
+import com.geeksville.mesh.model.map.CirclePlottingOverlay
+import com.geeksville.mesh.model.map.CustomTileSource
import com.geeksville.mesh.util.formatAgo
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.floatingactionbutton.FloatingActionButton
@@ -51,7 +52,7 @@ import kotlin.math.pow
@AndroidEntryPoint
class MapFragment : ScreenFragment("Map"), Logging, View.OnClickListener, OnSeekBarChangeListener,
- TextWatcher {
+ TextWatcher, View.OnLongClickListener {
private lateinit var binding: MapViewBinding
private lateinit var map: MapView
@@ -127,6 +128,9 @@ class MapFragment : ScreenFragment("Map"), Logging, View.OnClickListener, OnSeek
drawOverlays()
}
zoomToNodes(mapController)
+ map.setOnLongClickListener(this)
+ val plotter = CirclePlottingOverlay(100)
+ map.overlayManager.add(plotter)
}
downloadBtn.setOnClickListener(this)
}
@@ -499,20 +503,6 @@ class MapFragment : ScreenFragment("Map"), Logging, View.OnClickListener, OnSeek
defaultMinZoom // sets the minimum zoom level (the furthest out you can zoom)
map.setMultiTouchControls(true) // Sets gesture controls to true.
map.zoomController.setVisibility(CustomZoomButtonsController.Visibility.NEVER) // Disables default +/- button for zooming
- map.addMapListener(onMapLongPress())
- }
- }
-
- private fun onMapLongPress(): MapListener {
- return object : MapListener {
- override fun onScroll(event: ScrollEvent?): Boolean {
- return true
- }
-
- override fun onZoom(event: ZoomEvent?): Boolean {
- return true
- }
-
}
}
@@ -568,6 +558,30 @@ class MapFragment : ScreenFragment("Map"), Logging, View.OnClickListener, OnSeek
super.onDestroyView()
map.onDetach()
}
+ override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
+ updateEstimate(false)
+ }
+
+ override fun onStartTrackingTouch(p0: SeekBar?) {
+ }
+
+ override fun onStopTrackingTouch(p0: SeekBar?) {
+ }
+
+ override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
+ }
+
+ override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
+ updateEstimate(false)
+ }
+
+ override fun afterTextChanged(p0: Editable?) {
+ }
+
+ override fun onLongClick(p0: View?): Boolean {
+ Log.d("MapFragment", "Long pressed map")
+ return true
+ }
private inner class MarkerWithLabel(mapView: MapView?, label: String) : Marker(mapView) {
val mLabel = label
@@ -607,26 +621,6 @@ class MapFragment : ScreenFragment("Map"), Logging, View.OnClickListener, OnSeek
c.drawText(mLabel, (p.x - 0f), (p.y - 110f), textPaint)
}
}
-
- override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
- updateEstimate(false)
- }
-
- override fun onStartTrackingTouch(p0: SeekBar?) {
- }
-
- override fun onStopTrackingTouch(p0: SeekBar?) {
- }
-
- override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
- }
-
- override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
- updateEstimate(false)
- }
-
- override fun afterTextChanged(p0: Editable?) {
- }
}
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 742af2ee..38fea1c7 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -91,6 +91,5 @@
- USGS TOPO
- USGS Satellite
- ESRI World Overview
- - NOAA GOES Radar
\ No newline at end of file