Skip to content
This repository was archived by the owner on Aug 16, 2025. It is now read-only.

Commit ecfb857

Browse files
committed
Refactor MapData and Waypoints
1 parent b05249b commit ecfb857

File tree

3 files changed

+63
-67
lines changed

3 files changed

+63
-67
lines changed

src/main/kotlin/de/storchp/opentracks/osmplugin/dashboardapi/Waypoint.kt

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package de.storchp.opentracks.osmplugin.dashboardapi
22

33
import android.content.ContentResolver
44
import android.content.Intent
5+
import android.database.Cursor
56
import android.net.Uri
67
import de.storchp.opentracks.osmplugin.map.MapData
78
import de.storchp.opentracks.osmplugin.map.MapUtils
@@ -31,7 +32,7 @@ object WaypointReader {
3132
const val LATITUDE: String = "latitude" // latitude
3233
const val PHOTOURL: String = "photoUrl" // url for the photo
3334

34-
val PROJECTION: Array<String?> = arrayOf<String?>(
35+
val PROJECTION = arrayOf<String>(
3536
_ID,
3637
NAME,
3738
DESCRIPTION,
@@ -97,41 +98,46 @@ object WaypointReader {
9798
return buildList {
9899
resolver.query(data, PROJECTION, null, null, null).use { cursor ->
99100
while (cursor!!.moveToNext()) {
100-
val waypointId = cursor.getLong(cursor.getColumnIndexOrThrow(_ID))
101-
if (lastWaypointId > 0 && lastWaypointId >= waypointId) { // skip waypoints we already have
102-
continue
103-
}
104-
val name = cursor.getString(cursor.getColumnIndexOrThrow(NAME))
105-
val description =
106-
cursor.getString(cursor.getColumnIndexOrThrow(DESCRIPTION))
107-
val category = cursor.getString(cursor.getColumnIndexOrThrow(CATEGORY))
108-
val icon = cursor.getString(cursor.getColumnIndexOrThrow(ICON))
109-
val trackId = cursor.getLong(cursor.getColumnIndexOrThrow(TRACKID))
110-
val latitude =
111-
cursor.getInt(cursor.getColumnIndexOrThrow(LATITUDE)) / APIConstants.LAT_LON_FACTOR
112-
val longitude =
113-
cursor.getInt(cursor.getColumnIndexOrThrow(LONGITUDE)) / APIConstants.LAT_LON_FACTOR
114-
if (MapUtils.isValid(latitude, longitude)) {
115-
val latLong = GeoPoint(latitude, longitude)
116-
val photoUrl = cursor.getString(cursor.getColumnIndexOrThrow(PHOTOURL))
117-
add(
118-
Waypoint(
119-
waypointId,
120-
name,
121-
description,
122-
category,
123-
icon,
124-
trackId,
125-
latLong,
126-
photoUrl
127-
)
128-
)
129-
}
101+
readWaypointFromCursor(cursor, lastWaypointId)?.let(::add)
130102
}
131103
}
132104
}
133105
}
134106

107+
private fun readWaypointFromCursor(cursor: Cursor, lastWaypointId: Long): Waypoint? {
108+
val waypointId = cursor.getLong(cursor.getColumnIndexOrThrow(_ID))
109+
if (lastWaypointId > 0 && lastWaypointId >= waypointId) { // skip waypoints we already have
110+
return null
111+
}
112+
val name = cursor.getString(cursor.getColumnIndexOrThrow(NAME))
113+
val description =
114+
cursor.getString(cursor.getColumnIndexOrThrow(DESCRIPTION))
115+
val category = cursor.getString(cursor.getColumnIndexOrThrow(CATEGORY))
116+
val icon = cursor.getString(cursor.getColumnIndexOrThrow(ICON))
117+
val trackId = cursor.getLong(cursor.getColumnIndexOrThrow(TRACKID))
118+
val latitude =
119+
cursor.getInt(cursor.getColumnIndexOrThrow(LATITUDE)) / APIConstants.LAT_LON_FACTOR
120+
val longitude =
121+
cursor.getInt(cursor.getColumnIndexOrThrow(LONGITUDE)) / APIConstants.LAT_LON_FACTOR
122+
val photoUrl = cursor.getString(cursor.getColumnIndexOrThrow(PHOTOURL))
123+
124+
return if (MapUtils.isValid(latitude, longitude)) {
125+
val latLong = GeoPoint(latitude, longitude)
126+
Waypoint(
127+
waypointId,
128+
name,
129+
description,
130+
category,
131+
icon,
132+
trackId,
133+
latLong,
134+
photoUrl
135+
)
136+
} else {
137+
null
138+
}
139+
}
140+
135141
fun fromGeoIntent(intent: Intent, mapData: MapData) {
136142
require(intent.isGeoIntent())
137143

src/main/kotlin/de/storchp/opentracks/osmplugin/map/MapActivity.kt

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ import org.oscim.event.Gesture
4444
import org.oscim.event.Gesture.LongPress
4545
import org.oscim.event.GestureListener
4646
import org.oscim.event.MotionEvent
47-
import org.oscim.layers.GroupLayer
4847
import org.oscim.layers.Layer
49-
import org.oscim.layers.marker.ItemizedLayer
5048
import org.oscim.layers.marker.ItemizedLayer.OnItemGestureListener
5149
import org.oscim.layers.marker.MarkerInterface
5250
import org.oscim.layers.marker.MarkerItem
@@ -74,7 +72,6 @@ import java.io.File
7472
import java.io.FileInputStream
7573
import java.lang.Exception
7674
import java.lang.RuntimeException
77-
import java.util.ArrayList
7875
import java.util.Collections
7976
import java.util.Objects
8077
import java.util.concurrent.atomic.AtomicInteger
@@ -88,14 +85,12 @@ const val EXTRA_LOCATION: String = "location"
8885
private const val MAP_DEFAULT_ZOOM_LEVEL = 12
8986

9087

91-
open class MapsActivity : BaseActivity(), OnItemGestureListener<MarkerInterface?> {
88+
open class MapsActivity : BaseActivity(), OnItemGestureListener<MarkerInterface> {
9289
private lateinit var binding: ActivityMapsBinding
9390
private lateinit var map: Map
9491
private lateinit var mapPreferences: MapPreferences
9592
private var mapData: MapData? = null
9693
private var renderTheme: IRenderTheme? = null
97-
private var polylinesLayer: GroupLayer? = null
98-
private var waypointsLayer: ItemizedLayer? = null
9994
private var dashboardReader: DashboardReader? = null
10095
private var fullscreenMode = false
10196

@@ -498,28 +493,12 @@ open class MapsActivity : BaseActivity(), OnItemGestureListener<MarkerInterface?
498493

499494
private fun resetMapData() {
500495
dashboardReader?.unregisterContentObserver()
501-
502-
val layers = map.layers()
503-
504-
// polylines
505-
if (polylinesLayer != null) {
506-
layers.remove(polylinesLayer)
507-
}
508-
polylinesLayer = GroupLayer(map)
509-
layers.add(polylinesLayer)
510-
511-
// waypoints
512-
if (waypointsLayer != null) {
513-
layers.remove(waypointsLayer)
514-
}
515-
waypointsLayer = createWaypointsLayer()
516-
map.layers().add(waypointsLayer)
496+
mapData?.removeLayers()
517497

518498
dashboardReader = null
519499
mapData = MapData(
520500
map = map,
521-
polylinesLayer = polylinesLayer!!,
522-
waypointsLayer = waypointsLayer!!,
501+
onItemGestureListener = this,
523502
strokeWidth = PreferencesUtils.getStrokeWidth(),
524503
mapMode = PreferencesUtils.getMapMode(),
525504
pauseMarkerSymbol = MapUtils.createPauseMarkerSymbol(this),
@@ -546,11 +525,6 @@ open class MapsActivity : BaseActivity(), OnItemGestureListener<MarkerInterface?
546525
}
547526
}
548527

549-
private fun createWaypointsLayer(): ItemizedLayer {
550-
val symbol = MapUtils.createPushpinSymbol(this)
551-
return ItemizedLayer(map, ArrayList<MarkerInterface?>(), symbol, this)
552-
}
553-
554528
override fun onItemSingleTapUp(index: Int, item: MarkerInterface?): Boolean {
555529
val markerItem = item as MarkerItem
556530
if (markerItem.uid != null) {

src/main/kotlin/de/storchp/opentracks/osmplugin/map/MapData.kt

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,39 @@ import org.oscim.core.GeoPoint
66
import org.oscim.layers.GroupLayer
77
import org.oscim.layers.PathLayer
88
import org.oscim.layers.marker.ItemizedLayer
9+
import org.oscim.layers.marker.ItemizedLayer.OnItemGestureListener
10+
import org.oscim.layers.marker.MarkerInterface
911
import org.oscim.layers.marker.MarkerItem
1012
import org.oscim.layers.marker.MarkerSymbol
1113
import org.oscim.map.Map
1214

1315

1416
data class MapData(
1517
private val map: Map,
16-
private val polylinesLayer: GroupLayer,
17-
private val waypointsLayer: ItemizedLayer,
18+
private val onItemGestureListener: OnItemGestureListener<MarkerInterface>,
1819
private val strokeWidth: Int,
1920
private val mapMode: MapMode,
2021
private val pauseMarkerSymbol: MarkerSymbol,
2122
private val waypointMarkerSymbol: MarkerSymbol,
2223
private val compassMarkerSymbol: MarkerSymbol,
2324
) {
2425

25-
var boundingBox: BoundingBox? = null
26-
val movementDirection = MovementDirection()
27-
var endMarker: MarkerItem? = null
28-
var startPos: GeoPoint? = null
29-
var endPos: GeoPoint? = null
26+
private val polylinesLayer = GroupLayer(map)
27+
private val waypointsLayer: ItemizedLayer
28+
private val movementDirection = MovementDirection()
29+
private var endMarker: MarkerItem? = null
30+
private var startPos: GeoPoint? = null
31+
3032
var polyline: PathLayer? = null
33+
var endPos: GeoPoint? = null
34+
var boundingBox: BoundingBox? = null
35+
36+
init {
37+
map.layers().add(polylinesLayer)
38+
39+
waypointsLayer = ItemizedLayer(map, listOf(), waypointMarkerSymbol, onItemGestureListener)
40+
map.layers().add(waypointsLayer)
41+
}
3142

3243
fun addNewPolyline(trackColor: Int, geoPoint: GeoPoint): PathLayer? {
3344
polyline = PathLayer(map, trackColor, strokeWidth.toFloat())
@@ -116,4 +127,9 @@ data class MapData(
116127
waypointsLayer.addItem(marker)
117128
}
118129

130+
fun removeLayers() {
131+
map.layers().remove(polylinesLayer)
132+
map.layers().remove(waypointsLayer)
133+
}
134+
119135
}

0 commit comments

Comments
 (0)