Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 861f830f authored by Fynn Godau's avatar Fynn Godau
Browse files

Clickable circles

parent 68d2d2c8
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ import com.google.android.gms.maps.internal.IOnCameraIdleListener;
import com.google.android.gms.maps.internal.IOnCameraMoveCanceledListener;
import com.google.android.gms.maps.internal.IOnCameraMoveListener;
import com.google.android.gms.maps.internal.IOnCameraMoveStartedListener;
import com.google.android.gms.maps.internal.IOnCircleClickListener;
import com.google.android.gms.maps.internal.IOnMapClickListener;
import com.google.android.gms.maps.internal.IOnMapLongClickListener;
import com.google.android.gms.maps.internal.IOnMarkerClickListener;
@@ -124,7 +125,7 @@ interface IGoogleMapDelegate {
    //void setPolygonClickListener(IOnPolygonClickListener listener) = 84;
    //void setInfoWindowCloseListener(IOnInfoWindowCloseListener listener) = 85;
    //void setPolylineClickListener(IOnPolylineClickListener listener) = 86;
    //void setCircleClickListener(IOnCircleClickListener listener) = 88;
    void setCircleClickListener(IOnCircleClickListener listener) = 88;

    boolean setMapStyle(in MapStyleOptions options) = 90;
    void setMinZoomPreference(float minZoom) = 91;
+7 −0
Original line number Diff line number Diff line
package com.google.android.gms.maps.internal;

import com.google.android.gms.maps.model.internal.ICircleDelegate;

interface IOnCircleClickListener {
    void onCircleClick(ICircleDelegate circle);
}
+2 −0
Original line number Diff line number Diff line
@@ -21,4 +21,6 @@ interface ICircleDelegate {
    boolean isVisible();
	boolean equalsRemote(ICircleDelegate other);
	int hashCodeRemote();
	void setClickable(boolean clickable);
	boolean isClickable();
}
+22 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ public class CircleOptions extends AutoSafeParcelable {
    private float zIndex = 0;
    @SafeParceled(8)
    private boolean visible = true;
    @SafeParceled(9)
    private boolean clickable = false;

    /**
     * Creates circle options.
@@ -144,6 +146,15 @@ public class CircleOptions extends AutoSafeParcelable {
        return visible;
    }

    /**
     * Gets the clickability setting for the circle.
     *
     * @return {@code true} if the circle is clickable; {@code false} if it is not.
     */
    public boolean isClickable() {
        return clickable;
    }

    /**
     * Sets the radius in meters.
     * <p/>
@@ -217,5 +228,16 @@ public class CircleOptions extends AutoSafeParcelable {
        return this;
    }

    /**
     * Specifies whether this circle is clickable. The default setting is {@code false}.
     *
     * @param clickable
     * @return this {@code CircleOptions} object with a new clickability setting.
     */
    public CircleOptions clickable(boolean clickable) {
        this.clickable = clickable;
        return this;
    }

    public static Creator<CircleOptions> CREATOR = new AutoCreator<CircleOptions>(CircleOptions.class);
}
+22 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions)
    private var mapLongClickListener: IOnMapLongClickListener? = null
    private var markerClickListener: IOnMarkerClickListener? = null
    private var markerDragListener: IOnMarkerDragListener? = null
    private var circleClickListener: IOnCircleClickListener? = null

    var lineManager: LineManager? = null
    val pendingLines = mutableSetOf<Markup<Line, LineOptions>>()
@@ -103,6 +104,7 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions)

    var fillManager: FillManager? = null
    val pendingFills = mutableSetOf<Markup<Fill, FillOptions>>()
    val circles = mutableMapOf<Long, CircleImpl>()
    var fillId = 0L

    var symbolManager: SymbolManager? = null
@@ -454,6 +456,10 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions)
        markerDragListener = listener
    }

    override fun setCircleClickListener(listener: IOnCircleClickListener?) {
        circleClickListener = listener
    }

    override fun setOnInfoWindowClickListener(listener: IOnInfoWindowClickListener?) {
        Log.d(TAG, "unimplemented Method: setOnInfoWindowClickListener")

@@ -696,6 +702,21 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions)
                        }
                    }
                })
                fillManager.addClickListener { fill ->
                    try {
                        circles[fill.id]?.let { circle ->
                            if (circle.isClickable) {
                                circleClickListener?.let {
                                    it.onCircleClick(circle)
                                    return@addClickListener true
                                }
                            }
                        }
                    } catch (e: Exception) {
                        Log.w(TAG, e)
                    }
                    false
                }
                pendingFills.forEach { it.update(fillManager) }
                pendingFills.clear()
                pendingLines.forEach { it.update(lineManager) }
@@ -745,6 +766,7 @@ class GoogleMapImpl(private val context: Context, var options: GoogleMapOptions)

        fillManager?.onDestroy()
        fillManager = null
        circles.clear()

        symbolManager?.onDestroy()
        symbolManager = null
Loading