@@ -2,51 +2,70 @@ package org.odk.collect.mapbox
22
33import com.mapbox.geojson.Point
44import 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
66import com.mapbox.maps.plugin.annotation.generated.PolygonAnnotationManager
77import 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
810import org.odk.collect.maps.MapFragment
911import org.odk.collect.maps.MapPoint
1012import org.odk.collect.maps.PolygonDescription
1113
1214class 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