Skip to content

Commit fc36f60

Browse files
committed
maps: click listeners on polylines and polygons
1 parent 143358e commit fc36f60

4 files changed

Lines changed: 63 additions & 2 deletions

File tree

play-services-maps/core/mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/AbstractGoogleMap.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ abstract class AbstractGoogleMap(context: Context) : IGoogleMapDelegate.Stub() {
3232
internal var mapLongClickListener: IOnMapLongClickListener? = null
3333
internal var markerClickListener: IOnMarkerClickListener? = null
3434
internal var circleClickListener: IOnCircleClickListener? = null
35+
internal var polygonClickListener : IOnPolygonClickListener? = null
36+
internal var polylineClickListener : IOnPolylineClickListener? = null
3537

3638
internal var myLocationChangeListener: IOnMyLocationChangeListener? = null
3739

@@ -87,11 +89,11 @@ abstract class AbstractGoogleMap(context: Context) : IGoogleMapDelegate.Stub() {
8789
}
8890

8991
override fun setOnPolygonClickListener(listener: IOnPolygonClickListener?) {
90-
Log.d(TAG, "Not yet implemented: setOnPolygonClickListener")
92+
polygonClickListener = listener
9193
}
9294

9395
override fun setOnPolylineClickListener(listener: IOnPolylineClickListener?) {
94-
Log.d(TAG, "Not yet implemented: setOnPolylineClickListener")
96+
polylineClickListener = listener
9597
}
9698

9799
override fun setOnGroundOverlayClickListener(listener: IOnGroundOverlayClickListener?) {

play-services-maps/core/mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/GoogleMap.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,12 @@ class GoogleMapImpl(context: Context, var options: GoogleMapOptions) : AbstractG
101101

102102
var lineManager: LineManager? = null
103103
val pendingLines = mutableSetOf<Markup<Line, LineOptions>>()
104+
val lines = mutableMapOf<Long, PolylineImpl>()
104105
var lineId = 0L
105106

106107
var fillManager: FillManager? = null
107108
val pendingFills = mutableSetOf<Markup<Fill, FillOptions>>()
109+
val polygons = mutableMapOf<Long, PolygonImpl>()
108110
val circles = mutableMapOf<Long, CircleImpl>()
109111
var fillId = 0L
110112

@@ -768,6 +770,29 @@ class GoogleMapImpl(context: Context, var options: GoogleMapOptions) : AbstractG
768770
}
769771
}
770772
}
773+
polygons[fill.id]?.let { polygon ->
774+
if (polygon.isClickable) {
775+
polygonClickListener?.let {
776+
it.onPolygonClick(polygon)
777+
return@addClickListener true
778+
}
779+
}
780+
}
781+
} catch (e: Exception) {
782+
Log.w(TAG, e)
783+
}
784+
false
785+
}
786+
lineManager.addClickListener { line ->
787+
try {
788+
lines[line.id]?.let { polyline ->
789+
if (polyline.isClickable) {
790+
polylineClickListener?.let {
791+
it.onPolylineClick(polyline)
792+
return@addClickListener true
793+
}
794+
}
795+
}
771796
} catch (e: Exception) {
772797
Log.w(TAG, e)
773798
}
@@ -860,8 +885,10 @@ class GoogleMapImpl(context: Context, var options: GoogleMapOptions) : AbstractG
860885
userOnInitializedCallbackList.clear()
861886
lineManager?.onDestroy()
862887
lineManager = null
888+
lines.clear()
863889
fillManager?.onDestroy()
864890
fillManager = null
891+
polygons.clear()
865892
circles.clear()
866893
symbolManager?.onDestroy()
867894
symbolManager = null

play-services-maps/core/mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/model/Polygon.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.google.android.gms.maps.model.PatternItem
1515
import com.google.android.gms.maps.model.PolygonOptions
1616
import com.google.android.gms.maps.model.PolylineOptions
1717
import com.google.android.gms.maps.model.internal.IPolygonDelegate
18+
import com.mapbox.mapboxsdk.plugins.annotation.AnnotationManager
1819
import com.mapbox.mapboxsdk.plugins.annotation.Fill
1920
import com.mapbox.mapboxsdk.plugins.annotation.FillOptions
2021
import com.mapbox.mapboxsdk.utils.ColorUtils
@@ -226,6 +227,20 @@ class PolygonImpl(private val map: GoogleMapImpl, id: String, options: PolygonOp
226227
strokes.add(PolylineImpl(map, id, options))
227228
}
228229

230+
override fun update(manager: AnnotationManager<*, Fill, FillOptions, *, *, *>) {
231+
synchronized(this) {
232+
val id = annotation?.id
233+
if (removed && id != null) {
234+
map.polygons.remove(id)
235+
}
236+
super.update(manager)
237+
val annotation = annotation
238+
if (annotation != null && id == null) {
239+
map.polygons[annotation.id] = this
240+
}
241+
}
242+
}
243+
229244
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags) { super.onTransact(code, data, reply, flags) }
230245

231246
companion object {

play-services-maps/core/mapbox/src/main/kotlin/org/microg/gms/maps/mapbox/model/Polyline.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import com.google.android.gms.maps.model.Cap
1212
import com.google.android.gms.maps.model.LatLng
1313
import com.google.android.gms.maps.model.PatternItem
1414
import com.google.android.gms.maps.model.internal.IPolylineDelegate
15+
import com.mapbox.mapboxsdk.plugins.annotation.AnnotationManager
16+
import com.mapbox.mapboxsdk.plugins.annotation.Fill
17+
import com.mapbox.mapboxsdk.plugins.annotation.FillOptions
1518
import com.mapbox.mapboxsdk.plugins.annotation.Line
1619
import com.mapbox.mapboxsdk.plugins.annotation.LineOptions
1720
import com.mapbox.mapboxsdk.utils.ColorUtils
@@ -169,6 +172,20 @@ class PolylineImpl(private val map: GoogleMapImpl, id: String, options: GmsLineO
169172
map.lineManager?.let { update(it) }
170173
}
171174

175+
override fun update(manager: AnnotationManager<*, Line, LineOptions, *, *, *>) {
176+
synchronized(this) {
177+
val id = annotation?.id
178+
if (removed && id != null) {
179+
map.lines.remove(id)
180+
}
181+
super.update(manager)
182+
val annotation = annotation
183+
if (annotation != null && id == null) {
184+
map.lines[annotation.id] = this
185+
}
186+
}
187+
}
188+
172189
companion object {
173190
private val TAG = "GmsMapPolyline"
174191
}

0 commit comments

Comments
 (0)