diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk')
7 files changed, 70 insertions, 74 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java deleted file mode 100644 index d590582f09..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.ViewGroup; -import android.widget.FrameLayout; - -/** - * ViewGroup that dispatches TouchEvents to the parent ViewGroup. - * <p> - * This allows to dispatch touch events that occur on MarkerView to MapView. - * https://github.com/mapbox/mapbox-gl-native/issues/5388 - * </p> - */ -public class MarkerViewContainer extends FrameLayout { - - public MarkerViewContainer(Context context, AttributeSet attrs) { - super(context, attrs); - setTag(false); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - super.dispatchTouchEvent(ev); - boolean actionUp = (boolean) getTag(); - if (!actionUp) { - ((ViewGroup) getParent()).onTouchEvent(ev); - } else { - setTag(false); - } - return true; - } -} 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 3b77bc8a1d..bb51f3bfc2 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 @@ -8,7 +8,6 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.LongSparseArray; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -505,26 +504,6 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { } } - adaptedView.setOnTouchListener(new View.OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_UP) { - boolean clickHandled = false; - if (onMarkerViewClickListener != null) { - clickHandled = onMarkerViewClickListener.onMarkerClick(marker, v, adapter); - markerViewContainer.setTag(true); - } - - if (!clickHandled) { - ensureInfoWindowOffset(marker); - select(marker, v, adapter); - } - } - return true; - } - }); - marker.setMapboxMap(mapboxMap); markerViewMap.put(marker, adaptedView); if (convertView == null) { @@ -553,6 +532,34 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { } /** + * When the provided {@link MarkerView} is clicked on by a user, we check if a custom click + * event has been created and if not, display a {@link InfoWindow}. + * + * @param markerView that the click event occurred. + */ + 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 true; + } + + if (onMarkerViewClickListener != null) { + clickHandled = onMarkerViewClickListener.onMarkerClick(markerView, view, adapter); + } + + if (!clickHandled) { + ensureInfoWindowOffset(markerView); + select(markerView, view, adapter); + } + + return clickHandled; + } + + /** * Handles the {@link MarkerView}'s info window offset. * * @param marker that we are ensuring info window offset. diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java index 74170bb72b..a8fc58d51c 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java @@ -293,7 +293,7 @@ public final class CameraPosition implements Parcelable { * Set the tilt in degrees * <p> * value is clamped to 0 and 60. - * <p/> + * </p> * * @param tilt Tilt value * @return Builder diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java index f41a022fa2..dd6e43d06a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java @@ -18,11 +18,10 @@ import java.lang.ref.WeakReference; /** * Manages locational updates. Contains methods to register and unregister location listeners. * <ul> - * <li>You can register a {@link LocationEngineListener} with - * {@link #addLocationEngineListener(LocationEngineListener)} to receive - * location updates.</li> - * <li> You can unregister a {@link LocationEngineListener} with - * {@link #removeLocationEngineListener(LocationEngineListener)} to stop receiving location updates.</li> + * <li>You can register a LocationEngineListener with LocationSource#addLocationEngineListener(LocationEngineListener) + * to receive location updates.</li> + * <li> You can unregister a LocationEngineListener with + * LocationEngine#removeLocationEngineListener(LocationEngineListener)} to stop receiving location updates.</li> * </ul> * <p> * Note: If registering a listener in your Activity.onStart() implementation, you should unregister it in 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 e91779dfd1..0c77723354 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 @@ -10,7 +10,6 @@ import com.mapbox.mapboxsdk.annotations.Annotation; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; import com.mapbox.mapboxsdk.annotations.BaseMarkerViewOptions; import com.mapbox.mapboxsdk.annotations.Icon; -import com.mapbox.mapboxsdk.annotations.IconFactory; import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerView; import com.mapbox.mapboxsdk.annotations.MarkerViewManager; @@ -257,11 +256,7 @@ class AnnotationManager { private MarkerView prepareViewMarker(BaseMarkerViewOptions markerViewOptions) { MarkerView marker = markerViewOptions.getMarker(); - Icon icon = markerViewOptions.getIcon(); - if (icon == null) { - icon = IconFactory.getInstance(mapView.getContext()).defaultMarkerView(); - } - marker.setIcon(icon); + iconManager.loadIconForMarkerView(marker); return marker; } @@ -665,16 +660,24 @@ class AnnotationManager { if (annotation.getId() == newSelectedMarkerId) { Marker marker = (Marker) annotation; - if (!(marker instanceof MarkerView)) { + 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; } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java index c152630278..c9d81a88bc 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java @@ -71,6 +71,27 @@ class IconManager { return icon; } + Icon loadIconForMarkerView(MarkerView marker) { + Icon icon = marker.getIcon(); + int iconSize = icons.size() + 1; + if (icon == null) { + icon = IconFactory.getInstance(nativeMapView.getContext()).defaultMarkerView(); + marker.setIcon(icon); + } + Bitmap bitmap = icon.getBitmap(); + averageIconHeight = averageIconHeight + (bitmap.getHeight() - averageIconHeight) / iconSize; + averageIconWidth = averageIconWidth + (bitmap.getWidth() - averageIconWidth) / iconSize; + if (!icons.contains(icon)) { + icons.add(icon); + } else { + Icon oldIcon = icons.get(icons.indexOf(icon)); + if (!oldIcon.getBitmap().sameAs(icon.getBitmap())) { + throw new IconBitmapChangedException(); + } + } + return icon; + } + int getTopOffsetPixelsForIcon(Icon icon) { return (int) (nativeMapView.getTopOffsetPixelsForAnnotationSymbol(icon.getId()) * nativeMapView.getPixelRatio()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java index 718b790df2..ec80186761 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonSource.java @@ -42,7 +42,7 @@ public class GeoJsonSource extends Source { } /** - * Create an empty GeoJsonSource with non-default {@link GeoJsonOptions} + * Create an empty GeoJsonSource with non-default GeoJsonOptions. * * @param id the source id * @param options options @@ -67,7 +67,7 @@ public class GeoJsonSource extends Source { } /** - * Create a GeoJsonSource from a raw json string and non-default {@link GeoJsonOptions} + * Create a GeoJsonSource from a raw json string and non-default GeoJsonOptions * * @param id the source id * @param geoJson raw Json body @@ -93,7 +93,7 @@ public class GeoJsonSource extends Source { } /** - * Create a GeoJsonSource from a remote geo json file and non-default {@link GeoJsonOptions} + * Create a GeoJsonSource from a remote geo json file and non-default GeoJsonOptions * * @param id the source id * @param url remote json file @@ -105,7 +105,7 @@ public class GeoJsonSource extends Source { } /** - * Create a GeoJsonSource from a {@link FeatureCollection} + * Create a GeoJsonSource from a FeatureCollection. * * @param id the source id * @param features the features @@ -116,7 +116,7 @@ public class GeoJsonSource extends Source { } /** - * Create a GeoJsonSource from a {@link FeatureCollection} and non-default {@link GeoJsonOptions} + * Create a GeoJsonSource from a FeatureCollection and non-default GeoJsonOptions. * * @param id the source id * @param features the features @@ -194,7 +194,7 @@ public class GeoJsonSource extends Source { /** * Updates the GeoJson * - * @param features the GeoJSON {@link FeatureCollection} + * @param features the GeoJSON FeatureCollection */ public void setGeoJson(FeatureCollection features) { nativeSetFeatureCollection(features); |