From 1d93ffc5ebc79b6e3a77baf96830631bf43a24d0 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 8 Dec 2016 14:37:15 +0100 Subject: [android] - refactor marker selection and listener invocation, reformatted code (#7304) --- .../mapboxsdk/annotations/MarkerViewManager.java | 12 +++--- .../mapbox/mapboxsdk/maps/AnnotationManager.java | 44 ++++++++++++---------- 2 files changed, 31 insertions(+), 25 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java index ce2d3d1577..f462c00f98 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java @@ -9,12 +9,10 @@ import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.FrameLayout; import android.widget.ImageView; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.constants.MapboxConstants; -import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.utils.AnimatorUtils; @@ -34,7 +32,7 @@ public class MarkerViewManager { private final ViewGroup markerViewContainer; private final Map markerViewMap = new HashMap<>(); - private final List markerViewAdapters = new ArrayList<>(); + private final List markerViewAdapters = new ArrayList<>(); // TODO refactor MapboxMap out for Projection and Transform // Requires removing MapboxMap from Annotations by using Peer model from #6912 @@ -55,7 +53,7 @@ public class MarkerViewManager { // TODO refactor MapboxMap out for Projection and Transform // Requires removing MapboxMap from Annotations by using Peer model from #6912 - public void bind(MapboxMap mapboxMap){ + public void bind(MapboxMap mapboxMap) { this.mapboxMap = mapboxMap; } @@ -487,14 +485,14 @@ public class MarkerViewManager { * * @param markerView that the click event occurred. */ - public void onClickMarkerView(MarkerView markerView) { + public boolean onClickMarkerView(MarkerView markerView) { boolean clickHandled = false; MapboxMap.MarkerViewAdapter adapter = getViewAdapter(markerView); View view = getView(markerView); if (adapter == null || view == null) { // not a valid state - return; + return true; } if (onMarkerViewClickListener != null) { @@ -505,6 +503,8 @@ public class MarkerViewManager { ensureInfoWindowOffset(markerView); select(markerView, view, adapter); } + + return clickHandled; } /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java index c1cf966eed..40f4ff118e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java @@ -5,7 +5,6 @@ import android.graphics.RectF; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.LongSparseArray; -import android.view.ViewGroup; import com.mapbox.mapboxsdk.annotations.Annotation; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; @@ -301,23 +300,16 @@ class AnnotationManager implements MapView.OnMapChangedListener { deselectMarkers(); } - boolean handledDefaultClick = false; - if (onMarkerClickListener != null) { - // end developer has provided a custom click listener - handledDefaultClick = onMarkerClickListener.onMarkerClick(marker); + if (marker instanceof MarkerView) { + markerViewManager.select((MarkerView) marker, false); + markerViewManager.ensureInfoWindowOffset((MarkerView) marker); } - if (!handledDefaultClick) { - if (marker instanceof MarkerView) { - markerViewManager.select((MarkerView) marker, false); - markerViewManager.ensureInfoWindowOffset((MarkerView) marker); - } - - if (infoWindowManager.isInfoWindowValidForMarker(marker) || infoWindowManager.getInfoWindowAdapter() != null) { - infoWindowManager.add(marker.showInfoWindow(mapboxMap, mapView)); - } + if (infoWindowManager.isInfoWindowValidForMarker(marker) || infoWindowManager.getInfoWindowAdapter() != null) { + infoWindowManager.add(marker.showInfoWindow(mapboxMap, mapView)); } + // only add to selected markers if user didn't handle the click event themselves #3176 selectedMarkers.add(marker); } @@ -655,13 +647,27 @@ class AnnotationManager implements MapView.OnMapChangedListener { Annotation annotation = annotations.get(i); if (annotation instanceof Marker) { if (annotation.getId() == newSelectedMarkerId) { - if (selectedMarkers.isEmpty() || !selectedMarkers.contains(annotation)) { - if (!(annotation instanceof MarkerView)) { - selectMarker((Marker) annotation); - } else { - markerViewManager.onClickMarkerView((MarkerView) annotation); + Marker marker = (Marker) annotation; + boolean handledDefaultClick = false; + + if (marker instanceof MarkerView) { + handledDefaultClick = markerViewManager.onClickMarkerView((MarkerView) marker); + } else { + if (onMarkerClickListener != null) { + // end developer has provided a custom click listener + handledDefaultClick = onMarkerClickListener.onMarkerClick(marker); } } + + if (annotation instanceof MarkerView) { + markerViewManager.onClickMarkerView((MarkerView) annotation); + } else { + if (!handledDefaultClick) { + // only select marker if user didn't handle the click event themselves + selectMarker(marker); + } + } + return true; } } -- cgit v1.2.1