Skip to content

Commit f3e5fb5

Browse files
authored
Merge pull request #7090 from grzesiek2010/COLLECT-7084
Add lines to mapbox static polygons
2 parents e08225b + 311baf1 commit f3e5fb5

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
lines changed

mapbox/src/main/java/org/odk/collect/mapbox/MapboxMapFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ class MapboxMapFragment :
402402
} else {
403403
features[featureId] = StaticPolygonFeature(
404404
polygonAnnotationManager,
405+
polylineAnnotationManager,
405406
polygonDescription,
406407
featureClickListener,
407408
featureId

mapbox/src/main/java/org/odk/collect/mapbox/StaticPolygonFeature.kt

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,70 @@ package org.odk.collect.mapbox
22

33
import com.mapbox.geojson.Point
44
import com.mapbox.maps.plugin.annotation.generated.OnPolygonAnnotationClickListener
5-
import com.mapbox.maps.plugin.annotation.generated.PolygonAnnotation
5+
import com.mapbox.maps.plugin.annotation.generated.OnPolylineAnnotationClickListener
66
import com.mapbox.maps.plugin.annotation.generated.PolygonAnnotationManager
77
import com.mapbox.maps.plugin.annotation.generated.PolygonAnnotationOptions
8+
import com.mapbox.maps.plugin.annotation.generated.PolylineAnnotationManager
9+
import com.mapbox.maps.plugin.annotation.generated.PolylineAnnotationOptions
810
import org.odk.collect.maps.MapFragment
911
import org.odk.collect.maps.MapPoint
1012
import org.odk.collect.maps.PolygonDescription
1113

1214
class StaticPolygonFeature(
1315
private val polygonAnnotationManager: PolygonAnnotationManager,
16+
private val polylineAnnotationManager: PolylineAnnotationManager,
1417
polygonDescription: PolygonDescription,
1518
featureClickListener: MapFragment.FeatureListener?,
1619
featureId: Int
1720
) : LineFeature {
1821

1922
override val points: List<MapPoint> = polygonDescription.points
2023

21-
private val polygonAnnotation: PolygonAnnotation = polygonAnnotationManager.create(
24+
private val mapboxPoints = points.map { Point.fromLngLat(it.longitude, it.latitude) }
25+
26+
private val polygonAnnotation = polygonAnnotationManager.create(
2227
PolygonAnnotationOptions()
23-
.withPoints(listOf(polygonDescription.points.map { Point.fromLngLat(it.longitude, it.latitude) }))
28+
.withPoints(listOf(mapboxPoints))
2429
.withFillOutlineColor(polygonDescription.getStrokeColor())
2530
.withFillColor(polygonDescription.getFillColor())
2631
)
2732

28-
private val polygonClickListener =
29-
PolygonClickListener(polygonAnnotation.id, featureClickListener, featureId).also {
30-
polygonAnnotationManager.addClickListener(it)
31-
}
33+
private val polylineAnnotation = polylineAnnotationManager.create(
34+
PolylineAnnotationOptions()
35+
.withPoints(mapboxPoints)
36+
.withLineColor(polygonDescription.getStrokeColor())
37+
.withLineWidth(MapUtils.convertStrokeWidth(polygonDescription))
38+
)
3239

33-
override fun dispose() {
34-
polygonAnnotationManager.delete(polygonAnnotation)
35-
polygonAnnotationManager.removeClickListener(polygonClickListener)
40+
private val polygonClickListener = OnPolygonAnnotationClickListener { annotation ->
41+
if (annotation.id == polygonAnnotation.id) {
42+
featureClickListener?.onFeature(featureId)
43+
true
44+
} else {
45+
false
46+
}
47+
}.also {
48+
polygonAnnotationManager.addClickListener(it)
3649
}
37-
}
3850

39-
private class PolygonClickListener(
40-
private val polygonId: Long,
41-
private val featureClickListener: MapFragment.FeatureListener?,
42-
private val featureId: Int
43-
) : OnPolygonAnnotationClickListener {
44-
override fun onAnnotationClick(annotation: PolygonAnnotation): Boolean {
45-
return if (annotation.id == polygonId && featureClickListener != null) {
46-
featureClickListener.onFeature(featureId)
51+
private val polylineClickListener = OnPolylineAnnotationClickListener { annotation ->
52+
if (annotation.id == polylineAnnotation.id) {
53+
featureClickListener?.onFeature(featureId)
4754
true
4855
} else {
4956
false
5057
}
58+
}.also(polylineAnnotationManager::addClickListener)
59+
60+
override fun dispose() {
61+
polygonAnnotationManager.run {
62+
delete(polygonAnnotation)
63+
removeClickListener(polygonClickListener)
64+
}
65+
66+
polylineAnnotationManager.run {
67+
delete(polylineAnnotation)
68+
removeClickListener(polylineClickListener)
69+
}
5170
}
5271
}

0 commit comments

Comments
 (0)