From eb7926d20572c19363568f53c117cf8eb1b373d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 5 Jul 2017 17:32:23 +0200 Subject: [android] - invible marker views performance fix #9419 (#9420) --- .../main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (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 6d42842b7d..dce6f6b277 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 @@ -198,7 +198,7 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { // ensure view is measured first // #6805 invalidate marker views to ensure convertView width and height // values are properly measured and up to date - if (marker.getWidth() == 0) { + if (marker.getWidth() == 0 && marker.isVisible()) { convertView.getViewTreeObserver().addOnPreDrawListener(markerViewPreDrawObserver); } } -- cgit v1.2.1 From e7f45e0b19eaa86b587e5269f85ecd0eb8a55de7 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Thu, 13 Jul 2017 12:38:48 +0300 Subject: [android] remove manual ref counting on activation/deactivation --- platform/android/src/native_map_view.cpp | 7 ------- platform/android/src/native_map_view.hpp | 2 -- 2 files changed, 9 deletions(-) (limited to 'platform/android') diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index 0a57d3e6b4..5b0825fa09 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -120,9 +120,6 @@ gl::ProcAddress NativeMapView::initializeExtension(const char* name) { } void NativeMapView::activate() { - if (active++) { - return; - } oldDisplay = eglGetCurrentDisplay(); oldReadSurface = eglGetCurrentSurface(EGL_READ); @@ -151,10 +148,6 @@ void NativeMapView::activate() { * From mbgl::Backend. */ void NativeMapView::deactivate() { - if (--active) { - return; - } - assert(vm != nullptr); if (oldContext != context && oldContext != EGL_NO_CONTEXT) { diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index df43ad08b7..c638de44fb 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -334,8 +334,6 @@ private: std::shared_ptr threadPool; std::unique_ptr map; mbgl::EdgeInsets insets; - - unsigned active = 0; }; } // namespace android -- cgit v1.2.1 From f94d81c305230a1f54ac5e024c98cfeb1b87739f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguye=CC=82=CC=83n?= Date: Wed, 19 Jul 2017 00:51:13 -0700 Subject: [android, ios, macos] Updated French localization Updated French localization on iOS and macOS and added French localization on Android. --- platform/android/CHANGELOG.md | 4 ++++ .../MapboxGLAndroidSDK/src/main/res/values-fr/strings.xml | 15 +++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 platform/android/MapboxGLAndroidSDK/src/main/res/values-fr/strings.xml (limited to 'platform/android') diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index 6d4bb46357..0a3615d805 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -2,6 +2,10 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to do so please see the [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) first to get started. +## 5.1.1 - TBA + +* Add French localization [#9545](https://github.com/mapbox/mapbox-gl-native/pull/9545) + ## 5.1.0 - June 30, 2017 * Update to MAS 2.1.3 [#9402](https://github.com/mapbox/mapbox-gl-native/pull/9402) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values-fr/strings.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values-fr/strings.xml new file mode 100644 index 0000000000..48d90c3324 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values-fr/strings.xml @@ -0,0 +1,15 @@ + + + Boussole. Activer pour rétablir l\'orientation de la carte vers le nord. + Icone d\'attribution. Activer pour montrer le dialogue d\'attribution. + Vue de géolocalisation. Ceci affiche votre localisation sur la carte. + Affichage d\'une carte créée avec Mapbox. Faites la glisser en traînant deux doigts. Zoomez ou dézoomez en écartant ou rapprochant deux doigts. + SDK Mapbox pour Android + Faire de meilleures cartes Mapbox + Vous aidez à améliorer les cartes OpenStreetMap et Mapbox en contribuant des données d\'utilisation anonymes. + D\'accord + Pas d\'accord + Plus d\'informations + Le cadre OfflineRegionDefinition pour définir la région de navigation ne tient pas dans les limites du monde : %s + + -- cgit v1.2.1 From af76efac22905be06d23567465e67da97d381a7e Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 6 Jul 2017 21:04:30 +0200 Subject: [android] - validate if platform implementation doesn't return a null motion event (#9434) --- .../main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java index 3607703ab1..17eb506b97 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java @@ -3,7 +3,6 @@ package com.mapbox.mapboxsdk.maps; import android.content.Context; import android.graphics.PointF; import android.location.Location; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.GestureDetectorCompat; import android.support.v4.view.ScaleGestureDetectorCompat; @@ -134,7 +133,12 @@ final class MapGestureDetector { * @param event the MotionEvent * @return True if touch event is handled */ - boolean onTouchEvent(@NonNull MotionEvent event) { + boolean onTouchEvent(MotionEvent event) { + // framework can return null motion events in edge cases #9432 + if (event == null) { + return false; + } + // Check and ignore non touch or left clicks if ((event.getButtonState() != 0) && (event.getButtonState() != MotionEvent.BUTTON_PRIMARY)) { return false; -- cgit v1.2.1 From 79f0cc3d812c95a02029749cb13900f31c6eb6b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 6 Jul 2017 21:05:04 +0200 Subject: [android] - map's visible region fix #9427 (#9428) --- .../src/main/java/com/mapbox/mapboxsdk/maps/Projection.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java index ff466c436c..e0a634521b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Projection.java @@ -80,10 +80,10 @@ public class Projection { public VisibleRegion getVisibleRegion() { LatLngBounds.Builder builder = new LatLngBounds.Builder(); - float left = contentPadding[0]; - float right = nativeMapView.getWidth() - contentPadding[2]; - float top = contentPadding[1]; - float bottom = nativeMapView.getHeight() - contentPadding[3]; + float left = 0; + float right = nativeMapView.getWidth(); + float top = 0; + float bottom = nativeMapView.getHeight(); LatLng topLeft = fromScreenLocation(new PointF(left, top)); LatLng topRight = fromScreenLocation(new PointF(right, top)); -- cgit v1.2.1 From 0ce62a20c45b3a43629306b7728d474343520025 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Thu, 6 Jul 2017 11:26:03 +0200 Subject: [android] Fix my location drawable getting tinted (#9410) * fix my location drawable tinted when setting mapbox_myLocationTintColor in xml issue (linking my location foreground drawables with my location foreground tint color and adding the possibility of setting an undefined my location foreground tint color) * link my location background drawable with my location background tint color and add the possibility of setting an undefined my location background tint color --- .../mapbox/mapboxsdk/maps/MapboxMapOptions.java | 21 ++++++++------- .../mapboxsdk/maps/widgets/MyLocationView.java | 31 +++++++++++++++++----- .../maps/widgets/MyLocationViewSettings.java | 10 +++++-- 3 files changed, 44 insertions(+), 18 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java index 2efed1b322..80b25bf0de 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Parcel; @@ -37,6 +36,7 @@ public class MapboxMapOptions implements Parcelable { private static final float FOUR_DP = 4f; private static final float NINETY_TWO_DP = 92f; + private static final int UNDEFINED_COLOR = -1; private CameraPosition cameraPosition; @@ -53,7 +53,7 @@ public class MapboxMapOptions implements Parcelable { private int[] logoMargins; @ColorInt - private int attributionTintColor = -1; + private int attributionTintColor = UNDEFINED_COLOR; private boolean attributionEnabled = true; private int attributionGravity = Gravity.BOTTOM; private int[] attributionMargins; @@ -72,8 +72,10 @@ public class MapboxMapOptions implements Parcelable { private Drawable myLocationForegroundDrawable; private Drawable myLocationForegroundBearingDrawable; private Drawable myLocationBackgroundDrawable; - private int myLocationForegroundTintColor; - private int myLocationBackgroundTintColor; + @ColorInt + private int myLocationForegroundTintColor = UNDEFINED_COLOR; + @ColorInt + private int myLocationBackgroundTintColor = UNDEFINED_COLOR; private int[] myLocationBackgroundPadding; private int myLocationAccuracyTintColor; private int myLocationAccuracyAlpha; @@ -234,7 +236,7 @@ public class MapboxMapOptions implements Parcelable { FOUR_DP * pxlRatio))}); mapboxMapOptions.attributionTintColor(typedArray.getColor( - R.styleable.mapbox_MapView_mapbox_uiAttributionTintColor, -1)); + R.styleable.mapbox_MapView_mapbox_uiAttributionTintColor, UNDEFINED_COLOR)); mapboxMapOptions.attributionEnabled(typedArray.getBoolean( R.styleable.mapbox_MapView_mapbox_uiAttribution, true)); mapboxMapOptions.attributionGravity(typedArray.getInt( @@ -251,10 +253,9 @@ public class MapboxMapOptions implements Parcelable { mapboxMapOptions.locationEnabled(typedArray.getBoolean(R.styleable.mapbox_MapView_mapbox_myLocation, false)); mapboxMapOptions.myLocationForegroundTintColor( - typedArray.getColor(R.styleable.mapbox_MapView_mapbox_myLocationTintColor, - ColorUtils.getPrimaryColor(context))); + typedArray.getColor(R.styleable.mapbox_MapView_mapbox_myLocationTintColor, UNDEFINED_COLOR)); mapboxMapOptions.myLocationBackgroundTintColor( - typedArray.getColor(R.styleable.mapbox_MapView_mapbox_myLocationBackgroundTintColor, Color.WHITE)); + typedArray.getColor(R.styleable.mapbox_MapView_mapbox_myLocationBackgroundTintColor, UNDEFINED_COLOR)); Drawable foregroundDrawable = typedArray.getDrawable(R.styleable.mapbox_MapView_mapbox_myLocationDrawable); if (foregroundDrawable == null) { @@ -638,7 +639,7 @@ public class MapboxMapOptions implements Parcelable { /** * Set the background tint color of MyLocationView. * - * @param myLocationBackgroundTintColor the color to tint the background + * @param myLocationBackgroundTintColor the color to tint the background drawable * @return This */ public MapboxMapOptions myLocationBackgroundTintColor(@ColorInt int myLocationBackgroundTintColor) { @@ -944,6 +945,7 @@ public class MapboxMapOptions implements Parcelable { * * @return the tint color */ + @ColorInt public int getMyLocationForegroundTintColor() { return myLocationForegroundTintColor; } @@ -953,6 +955,7 @@ public class MapboxMapOptions implements Parcelable { * * @return the tint color */ + @ColorInt public int getMyLocationBackgroundTintColor() { return myLocationBackgroundTintColor; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 8b6b93e03a..24da59bb7e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -51,6 +51,7 @@ import timber.log.Timber; */ public class MyLocationView extends View { + private static final int UNDEFINED_TINT_COLOR = -1; private MyLocationBehavior myLocationBehavior; private MapboxMap mapboxMap; @@ -198,12 +199,8 @@ public class MyLocationView extends View { * @param color The color to tint the drawable with */ public final void setForegroundDrawableTint(@ColorInt int color) { - if (foregroundDrawable != null) { - foregroundDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); - } - if (foregroundBearingDrawable != null) { - foregroundBearingDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); - } + applyDrawableTint(foregroundDrawable, color); + applyDrawableTint(foregroundBearingDrawable, color); invalidate(); } @@ -247,7 +244,7 @@ public class MyLocationView extends View { if (backgroundDrawable == null) { return; } - backgroundDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); + applyDrawableTint(backgroundDrawable, color); invalidate(); } @@ -737,6 +734,26 @@ public class MyLocationView extends View { setEnabled(isEnabled(), locationSource != null); } + private void applyDrawableTint(Drawable drawable, @ColorInt int color) { + if (color == UNDEFINED_TINT_COLOR) { + removeTintColorFilter(drawable); + } else { + applyTintColorFilter(drawable, color); + } + } + + private void removeTintColorFilter(Drawable drawable) { + if (drawable != null) { + drawable.mutate().setColorFilter(null); + } + } + + private void applyTintColorFilter(Drawable drawable, @ColorInt int color) { + if (drawable != null) { + drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); + } + } + private static class GpsLocationListener implements LocationEngineListener { private WeakReference userLocationView; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java index 2ad1bf7ebc..fe2f18e4dd 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java @@ -119,6 +119,7 @@ public class MyLocationViewSettings { *

* The foreground drawable is the image visible on screen *

+ * It's linked with the foreground tint color * * @param foregroundDrawable the drawable to show as foreground without bearing * @param foregroundBearingDrawable the drawable to show as foreground when bearing is enabled @@ -127,6 +128,7 @@ public class MyLocationViewSettings { this.foregroundDrawable = foregroundDrawable; this.foregroundBearingDrawable = foregroundBearingDrawable; myLocationView.setForegroundDrawables(foregroundDrawable, foregroundBearingDrawable); + myLocationView.setForegroundDrawableTint(foregroundTintColor); } /** @@ -153,7 +155,8 @@ public class MyLocationViewSettings { * The color will tint both the foreground and the bearing foreground drawable. *

* - * @param foregroundTintColor the color to tint the foreground drawable + * @param foregroundTintColor the color to tint the foreground drawable or -1 (undefined color) to remove the + * existing foreground tint color */ public void setForegroundTintColor(@ColorInt int foregroundTintColor) { this.foregroundTintColor = foregroundTintColor; @@ -174,6 +177,7 @@ public class MyLocationViewSettings { *

* Padding can be added to provide an offset to the background *

+ * It's linked with the background tint color * * @param backgroundDrawable the drawable to show as background * @param padding the padding added to the background @@ -186,6 +190,7 @@ public class MyLocationViewSettings { } else { myLocationView.setShadowDrawable(backgroundDrawable); } + myLocationView.setShadowDrawableTint(backgroundTintColor); } /** @@ -200,7 +205,8 @@ public class MyLocationViewSettings { /** * Set the background tint color. * - * @param backgroundTintColor the color to tint the background + * @param backgroundTintColor the color to tint the background drawable or -1 (undefined color) to remove the + * existing background tint color */ public void setBackgroundTintColor(@ColorInt int backgroundTintColor) { this.backgroundTintColor = backgroundTintColor; -- cgit v1.2.1 From 23210cb15c39c3742defe11338d85edbcc2c8220 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 18 Jul 2017 15:34:36 +0200 Subject: [android] - bump OkHttp dependency to avoid null pointer exceptions on Android 7.0 (#9522) --- platform/android/dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle index 500b99def6..3d8f48b46b 100644 --- a/platform/android/dependencies.gradle +++ b/platform/android/dependencies.gradle @@ -47,7 +47,7 @@ ext { // square crew timber : 'com.jakewharton.timber:timber:4.5.1', - okhttp3 : 'com.squareup.okhttp3:okhttp:3.7.0', + okhttp3 : 'com.squareup.okhttp3:okhttp:3.8.0', leakCanaryDebug : "com.squareup.leakcanary:leakcanary-android:${leakCanaryVersion}", leakCanaryRelease : "com.squareup.leakcanary:leakcanary-android-no-op:${leakCanaryVersion}", leakCanaryTest : "com.squareup.leakcanary:leakcanary-android-no-op:${leakCanaryVersion}" -- cgit v1.2.1 From 655e23269542c63b2ca32692aea9f8782c09cf59 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 18 Jul 2017 12:32:40 +0200 Subject: [android] - fine tune fling gesture (#9532) --- .../src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java | 2 +- platform/android/src/native_map_view.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java index 17eb506b97..c1e997c3a1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java @@ -370,7 +370,7 @@ final class MapGestureDetector { // tilt results in a bigger translation, limiting input for #5281 double tilt = transform.getTilt(); - double tiltFactor = 1 + ((tilt != 0) ? (tilt / 10) : 0); /* 1 -> 7 */ + double tiltFactor = 1.5 + ((tilt != 0) ? (tilt / 10) : 0); double offsetX = velocityX / tiltFactor / screenDensity; double offsetY = velocityY / tiltFactor / screenDensity; diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index 5b0825fa09..159ba70508 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -371,7 +371,7 @@ void NativeMapView::moveBy(jni::JNIEnv&, jni::jdouble dx, jni::jdouble dy, jni:: mbgl::AnimationOptions animationOptions; if (duration > 0) { animationOptions.duration.emplace(mbgl::Milliseconds(duration)); - animationOptions.easing.emplace(mbgl::util::UnitBezier { 0, 0.3, 0.6, 1.0 }); + animationOptions.easing.emplace(mbgl::util::UnitBezier {0.25, 0.46, 0.45, 0.94}); } map->moveBy({dx, dy}, animationOptions); } -- cgit v1.2.1 From 9c73d3458dfe70187209562c60a73081648e1015 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 7 Jul 2017 12:28:19 +0200 Subject: Hit test Marker and MarkerViews (#9424) * [android] - hit test Marker and MarkerViews * fixup --- .../mapbox/mapboxsdk/maps/AnnotationManager.java | 199 +++++++++++++-------- .../com/mapbox/mapboxsdk/maps/IconManager.java | 4 + .../mapbox/mapboxsdk/maps/MapGestureDetector.java | 2 +- .../src/main/res/drawable/ic_check_box.xml | 9 + 4 files changed, 140 insertions(+), 74 deletions(-) create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_check_box.xml (limited to 'platform/android') 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 3694668a7e..392eededdc 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 @@ -1,10 +1,13 @@ package com.mapbox.mapboxsdk.maps; +import android.graphics.Bitmap; import android.graphics.PointF; +import android.graphics.Rect; import android.graphics.RectF; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.LongSparseArray; +import android.view.View; import com.mapbox.mapboxsdk.annotations.Annotation; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; @@ -19,7 +22,6 @@ import com.mapbox.mapboxsdk.annotations.Polyline; import com.mapbox.mapboxsdk.annotations.PolylineOptions; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import timber.log.Timber; @@ -55,7 +57,7 @@ class AnnotationManager { this.markerViewManager = markerViewManager; if (view != null) { // null checking needed for unit tests - nativeMapView.addOnMapChangedListener(markerViewManager); + view.addOnMapChangedListener(markerViewManager); } } @@ -616,84 +618,135 @@ class AnnotationManager { // Click event // - boolean onTap(PointF tapPoint, float screenDensity) { - float toleranceSides = 4 * screenDensity; - float toleranceTopBottom = 10 * screenDensity; - boolean handledDefaultClick = false; - - RectF tapRect = new RectF(tapPoint.x - iconManager.getAverageIconWidth() / 2 - toleranceSides, - tapPoint.y - iconManager.getAverageIconHeight() / 2 - toleranceTopBottom, - tapPoint.x + iconManager.getAverageIconWidth() / 2 + toleranceSides, - tapPoint.y + iconManager.getAverageIconHeight() / 2 + toleranceTopBottom); - - List nearbyMarkers = getMarkersInRect(tapRect); - long newSelectedMarkerId = -1; - - // find a Marker that isn't selected yet - if (nearbyMarkers.size() > 0) { - Collections.sort(nearbyMarkers); - for (Marker nearbyMarker : nearbyMarkers) { - boolean found = false; - for (Marker selectedMarker : selectedMarkers) { - if (selectedMarker.equals(nearbyMarker)) { - found = true; - } - } - if (!found) { - newSelectedMarkerId = nearbyMarker.getId(); - break; + boolean onTap(PointF tapPoint) { + MarkerHit markerHit = getMarkerHitFromTouchArea(tapPoint); + long markerId = new MarkerHitResolver(markerViewManager, mapboxMap.getProjection()).execute(markerHit); + return markerId >= 0 && isClickHandledForMarker(markerId); + } + + private MarkerHit getMarkerHitFromTouchArea(PointF tapPoint) { + int averageIconWidthOffset = iconManager.getAverageIconWidth() / 2; + int averageIconHeightOffset = iconManager.getAverageIconHeight() / 2; + final RectF tapRect = new RectF(tapPoint.x - averageIconWidthOffset, + tapPoint.y - averageIconHeightOffset, + tapPoint.x + averageIconWidthOffset, + tapPoint.y + averageIconHeightOffset + ); + return new MarkerHit(tapRect, getMarkersInRect(tapRect)); + } + + private boolean isClickHandledForMarker(long markerId) { + boolean handledDefaultClick; + Marker marker = (Marker) getAnnotation(markerId); + if (marker instanceof MarkerView) { + handledDefaultClick = markerViewManager.onClickMarkerView((MarkerView) marker); + } else { + handledDefaultClick = onClickMarker(marker); + } + + if (!handledDefaultClick) { + setMarkerSelectionState(marker); + } + return true; + } + + private boolean onClickMarker(Marker marker) { + return onMarkerClickListener != null && onMarkerClickListener.onMarkerClick(marker); + } + + private void setMarkerSelectionState(Marker marker) { + if (!selectedMarkers.contains(marker)) { + selectMarker(marker); + } else { + deselectMarker(marker); + } + } + + private static class MarkerHitResolver { + + private final MarkerViewManager markerViewManager; + private final Projection projection; + + private View view; + private Bitmap bitmap; + private PointF markerLocation; + + private Rect hitRectView = new Rect(); + private RectF hitRectMarker = new RectF(); + private RectF highestSurfaceIntersection = new RectF(); + + private long closestMarkerId = -1; + + MarkerHitResolver(@NonNull MarkerViewManager markerViewManager, @NonNull Projection projection) { + this.markerViewManager = markerViewManager; + this.projection = projection; + } + + public long execute(MarkerHit markerHit) { + resolveForMarkers(markerHit); + return closestMarkerId; + } + + private void resolveForMarkers(MarkerHit markerHit) { + for (Marker marker : markerHit.markers) { + if (marker instanceof MarkerView) { + resolveForMarkerView(markerHit, (MarkerView) marker); + } else { + resolveForMarker(markerHit, marker); } } } - // if unselected marker found - if (newSelectedMarkerId >= 0) { - List annotations = getAnnotations(); - int count = annotations.size(); - for (int i = 0; i < count; i++) { - Annotation annotation = annotations.get(i); - if (annotation instanceof Marker) { - if (annotation.getId() == newSelectedMarkerId) { - Marker marker = (Marker) annotation; - - 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 (!handledDefaultClick) { - // only select marker if user didn't handle the click event themselves - selectMarker(marker); - } - - return true; - } - } + private void resolveForMarkerView(MarkerHit markerHit, MarkerView markerView) { + view = markerViewManager.getView(markerView); + if (view != null) { + view.getHitRect(hitRectView); + hitRectMarker = new RectF(hitRectView); + hitTestMarker(markerHit, markerView, hitRectMarker); } - } else if (nearbyMarkers.size() > 0) { - // we didn't find an unselected marker, check if we can close an already open markers - for (Marker nearbyMarker : nearbyMarkers) { - for (Marker selectedMarker : selectedMarkers) { - if (nearbyMarker.equals(selectedMarker)) { - if (nearbyMarker instanceof MarkerView) { - handledDefaultClick = markerViewManager.onClickMarkerView((MarkerView) nearbyMarker); - } else if (onMarkerClickListener != null) { - handledDefaultClick = onMarkerClickListener.onMarkerClick(nearbyMarker); - } - - if (!handledDefaultClick) { - // only deselect marker if user didn't handle the click event themselves - deselectMarker(nearbyMarker); - } - return true; - } + } + + private void resolveForMarker(MarkerHit markerHit, Marker marker) { + markerLocation = projection.toScreenLocation(marker.getPosition()); + bitmap = marker.getIcon().getBitmap(); + hitRectMarker.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); + hitRectMarker.offsetTo( + markerLocation.x - bitmap.getWidth() / 2, + markerLocation.y - bitmap.getHeight() / 2 + ); + hitTestMarker(markerHit, marker, hitRectMarker); + } + + private void hitTestMarker(MarkerHit markerHit, Marker marker, RectF hitRectMarker) { + if (hitRectMarker.contains(markerHit.getTapPointX(), markerHit.getTapPointY())) { + hitRectMarker.intersect(markerHit.tapRect); + if (isRectangleHighestSurfaceIntersection(hitRectMarker)) { + highestSurfaceIntersection = new RectF(hitRectMarker); + closestMarkerId = marker.getId(); } } } - return false; + + private boolean isRectangleHighestSurfaceIntersection(RectF rectF) { + return rectF.width() * rectF.height() > highestSurfaceIntersection.width() * highestSurfaceIntersection.height(); + } + } + + private static class MarkerHit { + private final RectF tapRect; + private final List markers; + + MarkerHit(RectF tapRect, List markers) { + this.tapRect = tapRect; + this.markers = markers; + } + + float getTapPointX() { + return tapRect.centerX(); + } + + float getTapPointY() { + return tapRect.centerY(); + } } } 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 9f4171aee8..b5da5f59aa 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 @@ -12,6 +12,8 @@ import com.mapbox.mapboxsdk.exceptions.IconBitmapChangedException; import java.util.ArrayList; import java.util.List; +import timber.log.Timber; + /** * Responsible for managing icons added to the Map. *

@@ -105,6 +107,8 @@ class IconManager { int iconSize = icons.size() + 1; averageIconHeight = averageIconHeight + (height - averageIconHeight) / iconSize; averageIconWidth = averageIconWidth + (width - averageIconWidth) / iconSize; + Timber.e("OnUpdateAverageSizeIcon with: %s %s", width, height); + Timber.e("OnUpdateAverageSizeIcon now: %s %s", averageIconWidth, averageIconHeight); } private void loadIcon(Icon icon) { diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java index c1e997c3a1..d2973bf558 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java @@ -315,7 +315,7 @@ final class MapGestureDetector { @Override public boolean onSingleTapConfirmed(MotionEvent motionEvent) { PointF tapPoint = new PointF(motionEvent.getX(), motionEvent.getY()); - boolean tapHandled = annotationManager.onTap(tapPoint, uiSettings.getPixelRatio()); + boolean tapHandled = annotationManager.onTap(tapPoint); if (!tapHandled) { if (uiSettings.isDeselectMarkersOnTap()) { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_check_box.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_check_box.xml new file mode 100644 index 0000000000..cf8bfa24b5 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_check_box.xml @@ -0,0 +1,9 @@ + + + -- cgit v1.2.1 From d7401f9e219e4607146cf1c34af23edb474348eb Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 18 Jul 2017 15:34:55 +0200 Subject: [android] - add OnPolygonClickListener and OnPolylineClickListener (#9443) --- .../mapbox/mapboxsdk/maps/AnnotationManager.java | 96 ++++++++++++++++++++-- .../java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 50 +++++++++++ .../activity/annotation/PolygonActivity.java | 14 ++++ .../activity/annotation/PolylineActivity.java | 14 +++- 4 files changed, 164 insertions(+), 10 deletions(-) (limited to 'platform/android') 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 392eededdc..404cc5f3bd 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 @@ -9,6 +9,8 @@ import android.support.annotation.Nullable; import android.support.v4.util.LongSparseArray; import android.view.View; +import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.annotations.Annotation; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; import com.mapbox.mapboxsdk.annotations.BaseMarkerViewOptions; @@ -20,6 +22,7 @@ import com.mapbox.mapboxsdk.annotations.Polygon; import com.mapbox.mapboxsdk.annotations.PolygonOptions; import com.mapbox.mapboxsdk.annotations.Polyline; import com.mapbox.mapboxsdk.annotations.PolylineOptions; +import com.mapbox.services.commons.geojson.Feature; import java.util.ArrayList; import java.util.List; @@ -39,6 +42,8 @@ import timber.log.Timber; */ class AnnotationManager { + private static final String LAYER_ID_SHAPE_ANNOTATIONS = "com.mapbox.annotations.shape."; + private final NativeMapView nativeMapView; private final MapView mapView; private final IconManager iconManager; @@ -46,9 +51,12 @@ class AnnotationManager { private final MarkerViewManager markerViewManager; private final LongSparseArray annotations = new LongSparseArray<>(); private final List selectedMarkers = new ArrayList<>(); + private final List shapeAnnotationIds = new ArrayList<>(); private MapboxMap mapboxMap; private MapboxMap.OnMarkerClickListener onMarkerClickListener; + private MapboxMap.OnPolygonClickListener onPolygonClickListener; + private MapboxMap.OnPolylineClickListener onPolylineClickListener; AnnotationManager(NativeMapView view, MapView mapView, MarkerViewManager markerViewManager) { this.nativeMapView = view; @@ -101,6 +109,9 @@ class AnnotationManager { if (marker instanceof MarkerView) { markerViewManager.removeMarkerView((MarkerView) marker); } + } else { + // instanceOf Polygon/Polyline + shapeAnnotationIds.remove(annotation.getId()); } long id = annotation.getId(); if (nativeMapView != null) { @@ -131,6 +142,9 @@ class AnnotationManager { if (marker instanceof MarkerView) { markerViewManager.removeMarkerView((MarkerView) marker); } + } else { + // instanceOf Polygon/Polyline + shapeAnnotationIds.remove(annotation.getId()); } ids[i] = annotationList.get(i).getId(); } @@ -158,6 +172,9 @@ class AnnotationManager { if (marker instanceof MarkerView) { markerViewManager.removeMarkerView((MarkerView) marker); } + } else { + // instanceOf Polygon/Polyline + shapeAnnotationIds.remove(annotation.getId()); } } @@ -244,7 +261,6 @@ class AnnotationManager { return marker; } - List addMarkerViews(@NonNull List markerViewOptions, @NonNull MapboxMap mapboxMap) { List markers = new ArrayList<>(); @@ -278,7 +294,6 @@ class AnnotationManager { Timber.w("Attempting to update non-added Marker with value %s", updatedMarker); return; } - ensureIconLoaded(updatedMarker); nativeMapView.updateMarker(updatedMarker); annotations.setValueAt(annotations.indexOfKey(updatedMarker.getId()), updatedMarker); @@ -310,6 +325,14 @@ class AnnotationManager { onMarkerClickListener = listener; } + void setOnPolygonClickListener(@Nullable MapboxMap.OnPolygonClickListener listener) { + onPolygonClickListener = listener; + } + + void setOnPolylineClickListener(@Nullable MapboxMap.OnPolylineClickListener listener) { + onPolylineClickListener = listener; + } + void selectMarker(@NonNull Marker marker) { if (selectedMarkers.contains(marker)) { return; @@ -374,7 +397,7 @@ class AnnotationManager { @NonNull List getMarkersInRect(@NonNull RectF rectangle) { - // convert Rectangle to be density depedent + // convert Rectangle to be density dependent float pixelRatio = nativeMapView.getPixelRatio(); RectF rect = new RectF(rectangle.left / pixelRatio, rectangle.top / pixelRatio, @@ -438,6 +461,7 @@ class AnnotationManager { long id = nativeMapView != null ? nativeMapView.addPolygon(polygon) : 0; polygon.setId(id); polygon.setMapboxMap(mapboxMap); + shapeAnnotationIds.add(LAYER_ID_SHAPE_ANNOTATIONS + id); annotations.put(id, polygon); } return polygon; @@ -472,6 +496,7 @@ class AnnotationManager { id++; } polygon.setId(id); + shapeAnnotationIds.add(LAYER_ID_SHAPE_ANNOTATIONS + id); annotations.put(id, polygon); } } @@ -510,6 +535,7 @@ class AnnotationManager { long id = nativeMapView != null ? nativeMapView.addPolyline(polyline) : 0; polyline.setMapboxMap(mapboxMap); polyline.setId(id); + shapeAnnotationIds.add(LAYER_ID_SHAPE_ANNOTATIONS + id); annotations.put(id, polyline); } return polyline; @@ -546,6 +572,7 @@ class AnnotationManager { id++; } p.setId(id); + shapeAnnotationIds.add(LAYER_ID_SHAPE_ANNOTATIONS + id); annotations.put(id, p); } } @@ -555,6 +582,7 @@ class AnnotationManager { void updatePolyline(@NonNull Polyline polyline) { if (!isAddedToMap(polyline)) { Timber.w("Attempting to update non-added Polyline with value %s", polyline); + return; } nativeMapView.updatePolyline(polyline); @@ -619,11 +647,37 @@ class AnnotationManager { // boolean onTap(PointF tapPoint) { + ShapeAnnotationHit shapeAnnotationHit = getShapeAnnotationHitFromTap(tapPoint); + long shapeAnnotationId = new ShapeAnnotationHitResolver(mapboxMap).execute(shapeAnnotationHit); + if (shapeAnnotationId >= 0) { + handleClickForShapeAnnotation(shapeAnnotationId); + } + MarkerHit markerHit = getMarkerHitFromTouchArea(tapPoint); - long markerId = new MarkerHitResolver(markerViewManager, mapboxMap.getProjection()).execute(markerHit); + long markerId = new MarkerHitResolver(mapboxMap).execute(markerHit); return markerId >= 0 && isClickHandledForMarker(markerId); } + private ShapeAnnotationHit getShapeAnnotationHitFromTap(PointF tapPoint) { + float touchTargetSide = Mapbox.getApplicationContext().getResources().getDimension(R.dimen.mapbox_eight_dp); + RectF tapRect = new RectF( + tapPoint.x - touchTargetSide, + tapPoint.y - touchTargetSide, + tapPoint.x + touchTargetSide, + tapPoint.y + touchTargetSide + ); + return new ShapeAnnotationHit(tapRect, shapeAnnotationIds.toArray(new String[shapeAnnotationIds.size()])); + } + + private void handleClickForShapeAnnotation(long shapeAnnotationId) { + Annotation annotation = getAnnotation(shapeAnnotationId); + if (annotation instanceof Polygon && onPolygonClickListener != null) { + onPolygonClickListener.onPolygonClick((Polygon) annotation); + } else if (annotation instanceof Polyline && onPolylineClickListener != null) { + onPolylineClickListener.onPolylineClick((Polyline) annotation); + } + } + private MarkerHit getMarkerHitFromTouchArea(PointF tapPoint) { int averageIconWidthOffset = iconManager.getAverageIconWidth() / 2; int averageIconHeightOffset = iconManager.getAverageIconHeight() / 2; @@ -645,7 +699,7 @@ class AnnotationManager { } if (!handledDefaultClick) { - setMarkerSelectionState(marker); + toggleMarkerSelectionState(marker); } return true; } @@ -654,7 +708,7 @@ class AnnotationManager { return onMarkerClickListener != null && onMarkerClickListener.onMarkerClick(marker); } - private void setMarkerSelectionState(Marker marker) { + private void toggleMarkerSelectionState(Marker marker) { if (!selectedMarkers.contains(marker)) { selectMarker(marker); } else { @@ -662,6 +716,20 @@ class AnnotationManager { } } + private static class ShapeAnnotationHitResolver { + + private MapboxMap mapboxMap; + + ShapeAnnotationHitResolver(MapboxMap mapboxMap) { + this.mapboxMap = mapboxMap; + } + + public long execute(ShapeAnnotationHit shapeHit) { + List features = mapboxMap.queryRenderedFeatures(shapeHit.tapPoint, shapeHit.layerIds); + return features.isEmpty() ? -1 : Long.valueOf(features.get(0).getId()); + } + } + private static class MarkerHitResolver { private final MarkerViewManager markerViewManager; @@ -677,9 +745,9 @@ class AnnotationManager { private long closestMarkerId = -1; - MarkerHitResolver(@NonNull MarkerViewManager markerViewManager, @NonNull Projection projection) { - this.markerViewManager = markerViewManager; - this.projection = projection; + MarkerHitResolver(@NonNull MapboxMap mapboxMap) { + this.markerViewManager = mapboxMap.getMarkerViewManager(); + this.projection = mapboxMap.getProjection(); } public long execute(MarkerHit markerHit) { @@ -732,6 +800,16 @@ class AnnotationManager { } } + private static class ShapeAnnotationHit { + private final RectF tapPoint; + private final String[] layerIds; + + ShapeAnnotationHit(RectF tapRect, String[] layerIds) { + this.tapPoint = tapRect; + this.layerIds = layerIds; + } + } + private static class MarkerHit { private final RectF tapRect; private final List markers; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index d672ab37c3..c8725d8d8d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -1459,6 +1459,28 @@ public final class MapboxMap { annotationManager.setOnMarkerClickListener(listener); } + /** + * Sets a callback that's invoked when the user clicks on a polygon. + * + * @param listener The callback that's invoked when the user clicks on a polygon. + * To unset the callback, use null. + */ + @UiThread + public void setOnPolygonClickListener(@Nullable OnPolygonClickListener listener) { + annotationManager.setOnPolygonClickListener(listener); + } + + /** + * Sets a callback that's invoked when the user clicks on a polyline. + * + * @param listener The callback that's invoked when the user clicks on a polyline. + * To unset the callback, use null. + */ + @UiThread + public void setOnPolylineClickListener(@Nullable OnPolylineClickListener listener) { + annotationManager.setOnPolylineClickListener(listener); + } + /** *

* Selects a marker. The selected marker will have it's info window opened. @@ -2150,6 +2172,34 @@ public final class MapboxMap { boolean onMarkerClick(@NonNull Marker marker); } + /** + * Interface definition for a callback to be invoked when the user clicks on a polygon. + * + * @see MapboxMap#setOnPolygonClickListener(OnPolygonClickListener) + */ + public interface OnPolygonClickListener { + /** + * Called when the user clicks on a polygon. + * + * @param polygon The polygon the user clicked on. + */ + void onPolygonClick(@NonNull Polygon polygon); + } + + /** + * Interface definition for a callback to be invoked when the user clicks on a polyline. + * + * @see MapboxMap#setOnPolylineClickListener(OnPolylineClickListener) + */ + public interface OnPolylineClickListener { + /** + * Called when the user clicks on a polyline. + * + * @param polyline The polyline the user clicked on. + */ + void onPolylineClick(@NonNull Polyline polyline); + } + /** * Interface definition for a callback to be invoked when the user clicks on an info window. * diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java index b51d717f33..fecfe2a842 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java @@ -2,9 +2,11 @@ package com.mapbox.mapboxsdk.testapp.activity.annotation; import android.graphics.Color; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; +import android.widget.Toast; import com.mapbox.mapboxsdk.annotations.Polygon; import com.mapbox.mapboxsdk.annotations.PolygonOptions; @@ -77,6 +79,18 @@ public class PolygonActivity extends AppCompatActivity implements OnMapReadyCall @Override public void onMapReady(MapboxMap map) { mapboxMap = map; + + map.setOnPolygonClickListener(new MapboxMap.OnPolygonClickListener() { + @Override + public void onPolygonClick(@NonNull Polygon polygon) { + Toast.makeText( + PolygonActivity.this, + "You clicked on polygon with id = " + polygon.getId(), + Toast.LENGTH_SHORT + ).show(); + } + }); + polygon = mapboxMap.addPolygon(new PolygonOptions() .addAll(STAR_SHAPE_POINTS) .fillColor(BLUE_COLOR)); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolylineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolylineActivity.java index 0aaa6127f4..b9dc39e5d4 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolylineActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolylineActivity.java @@ -67,8 +67,20 @@ public class PolylineActivity extends AppCompatActivity { mapView.onCreate(savedInstanceState); mapView.getMapAsync(new OnMapReadyCallback() { @Override - public void onMapReady(@NonNull MapboxMap mapboxMap) { + public void onMapReady(@NonNull final MapboxMap mapboxMap) { PolylineActivity.this.mapboxMap = mapboxMap; + + mapboxMap.setOnPolylineClickListener(new MapboxMap.OnPolylineClickListener() { + @Override + public void onPolylineClick(@NonNull Polyline polyline) { + Toast.makeText( + PolylineActivity.this, + "You clicked on polygon with id = " + polyline.getId(), + Toast.LENGTH_SHORT + ).show(); + } + }); + polylines = mapboxMap.addPolylines(polylineOptions); } }); -- cgit v1.2.1 From 108cbc7ba58b3597b779029323e56b54f29546f0 Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Thu, 20 Jul 2017 11:44:53 +0200 Subject: [android] - update changelog for 5.1.1 --- platform/android/CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'platform/android') diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index 0a3615d805..33ac486964 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -4,6 +4,16 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to ## 5.1.1 - TBA +* Rework attribution binding [#9433](https://github.com/mapbox/mapbox-gl-native/pull/9433) +* BackendScope changes [#9538](https://github.com/mapbox/mapbox-gl-native/pull/9538) +* Invisible MarkerView performance fix [#9420](https://github.com/mapbox/mapbox-gl-native/pull/9420) +* Polyline/Polygon click listeners [#9443](https://github.com/mapbox/mapbox-gl-native/pull/9443) +* Hit test Marker/MarkerViews [#9424](https://github.com/mapbox/mapbox-gl-native/pull/9424) +* Fine tune fling gesture [#9532](https://github.com/mapbox/mapbox-gl-native/pull/9532) +* Bump OkHttp 3.8.0, Android 7.x crashes [#9522](https://github.com/mapbox/mapbox-gl-native/pull/9522) +* MyLocationView tint fix [#9410](https://github.com/mapbox/mapbox-gl-native/pull/9410) +* VisibleRegion logic [#9428](https://github.com/mapbox/mapbox-gl-native/pull/9428) +* Validate motion event [#9434](https://github.com/mapbox/mapbox-gl-native/pull/9434) * Add French localization [#9545](https://github.com/mapbox/mapbox-gl-native/pull/9545) ## 5.1.0 - June 30, 2017 -- cgit v1.2.1 From a39b4cfb00c567d93bb83390d9bbdccef12b1c65 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 20 Jul 2017 17:26:28 +0200 Subject: [android] - manage InfoWindow selection in AnnotationManager (#9567) --- .../java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java | 5 ----- 1 file changed, 5 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 dce6f6b277..8704e882ea 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 @@ -570,11 +570,6 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { clickHandled = onMarkerViewClickListener.onMarkerClick(markerView, view, adapter); } - if (!clickHandled) { - ensureInfoWindowOffset(markerView); - select(markerView, view, adapter); - } - return clickHandled; } -- cgit v1.2.1 From 820c04efbfa5c7e30bf5ff055538ccdd6e11b14d Mon Sep 17 00:00:00 2001 From: Tobrun Date: Thu, 20 Jul 2017 16:51:27 +0200 Subject: [android] - increase touch target to match largest Marker icon (#9565) --- .../mapbox/mapboxsdk/maps/AnnotationManager.java | 12 +++---- .../com/mapbox/mapboxsdk/maps/IconManager.java | 42 +++++++++++----------- 2 files changed, 27 insertions(+), 27 deletions(-) (limited to 'platform/android') 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 404cc5f3bd..f35eb9b4f0 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 @@ -679,12 +679,12 @@ class AnnotationManager { } private MarkerHit getMarkerHitFromTouchArea(PointF tapPoint) { - int averageIconWidthOffset = iconManager.getAverageIconWidth() / 2; - int averageIconHeightOffset = iconManager.getAverageIconHeight() / 2; - final RectF tapRect = new RectF(tapPoint.x - averageIconWidthOffset, - tapPoint.y - averageIconHeightOffset, - tapPoint.x + averageIconWidthOffset, - tapPoint.y + averageIconHeightOffset + int touchSurfaceWidth = (int) (iconManager.getHighestIconHeight() * 1.5); + int touchSurfaceHeight = (int) (iconManager.getHighestIconWidth() * 1.5); + final RectF tapRect = new RectF(tapPoint.x - touchSurfaceWidth, + tapPoint.y - touchSurfaceHeight, + tapPoint.x + touchSurfaceWidth, + tapPoint.y + touchSurfaceHeight ); return new MarkerHit(tapRect, getMarkersInRect(tapRect)); } 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 b5da5f59aa..18eecfd9c3 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 @@ -12,8 +12,6 @@ import com.mapbox.mapboxsdk.exceptions.IconBitmapChangedException; import java.util.ArrayList; import java.util.List; -import timber.log.Timber; - /** * Responsible for managing icons added to the Map. *

@@ -30,8 +28,8 @@ class IconManager { private NativeMapView nativeMapView; private List icons; - private int averageIconHeight; - private int averageIconWidth; + private int highestIconWidth; + private int highestIconHeight; IconManager(NativeMapView nativeMapView) { this.nativeMapView = nativeMapView; @@ -47,7 +45,7 @@ class IconManager { // TODO we can move this code afterwards to getIcon as with MarkerView.getIcon icon = loadDefaultIconForMarker(marker); } else { - updateAverageIconSize(icon); + updateHighestIconSize(icon); } addIcon(icon); return icon; @@ -56,7 +54,7 @@ class IconManager { void loadIconForMarkerView(MarkerView marker) { Icon icon = marker.getIcon(); Bitmap bitmap = icon.getBitmap(); - updateAverageIconSize(bitmap); + updateHighestIconSize(bitmap); addIcon(icon, false); } @@ -64,18 +62,18 @@ class IconManager { return (int) (nativeMapView.getTopOffsetPixelsForAnnotationSymbol(icon.getId()) * nativeMapView.getPixelRatio()); } - int getAverageIconHeight() { - return averageIconHeight; + int getHighestIconWidth() { + return highestIconWidth; } - int getAverageIconWidth() { - return averageIconWidth; + int getHighestIconHeight() { + return highestIconHeight; } private Icon loadDefaultIconForMarker(Marker marker) { Icon icon = IconFactory.getInstance(Mapbox.getApplicationContext()).defaultMarker(); Bitmap bitmap = icon.getBitmap(); - updateAverageIconSize(bitmap.getWidth(), bitmap.getHeight() / 2); + updateHighestIconSize(bitmap.getWidth(), bitmap.getHeight() / 2); marker.setIcon(icon); return icon; } @@ -95,20 +93,22 @@ class IconManager { } } - private void updateAverageIconSize(Icon icon) { - updateAverageIconSize(icon.getBitmap()); + private void updateHighestIconSize(Icon icon) { + updateHighestIconSize(icon.getBitmap()); } - private void updateAverageIconSize(Bitmap bitmap) { - updateAverageIconSize(bitmap.getWidth(), bitmap.getHeight()); + private void updateHighestIconSize(Bitmap bitmap) { + updateHighestIconSize(bitmap.getWidth(), bitmap.getHeight()); } - private void updateAverageIconSize(int width, int height) { - int iconSize = icons.size() + 1; - averageIconHeight = averageIconHeight + (height - averageIconHeight) / iconSize; - averageIconWidth = averageIconWidth + (width - averageIconWidth) / iconSize; - Timber.e("OnUpdateAverageSizeIcon with: %s %s", width, height); - Timber.e("OnUpdateAverageSizeIcon now: %s %s", averageIconWidth, averageIconHeight); + private void updateHighestIconSize(int width, int height) { + if (width > highestIconWidth) { + highestIconWidth = width; + } + + if (height > highestIconHeight) { + highestIconHeight = height; + } } private void loadIcon(Icon icon) { -- cgit v1.2.1 From b34a5ab276145dd5499133738caf0e8d6d30ddb7 Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Thu, 20 Jul 2017 17:32:23 +0200 Subject: [android] - update change log, fix typo public xml --- platform/android/CHANGELOG.md | 4 ++++ .../android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index 33ac486964..b2eaaa2a9c 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -15,6 +15,10 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to * VisibleRegion logic [#9428](https://github.com/mapbox/mapbox-gl-native/pull/9428) * Validate motion event [#9434](https://github.com/mapbox/mapbox-gl-native/pull/9434) * Add French localization [#9545](https://github.com/mapbox/mapbox-gl-native/pull/9545) +* Fix public.xml [#9525](https://github.com/mapbox/mapbox-gl-native/pull/9525/files) +* Manage InfoWindow selection in AnnotationManager [#9567](https://github.com/mapbox/mapbox-gl-native/pull/9567) +* Increase touch target size [#9565](https://github.com/mapbox/mapbox-gl-native/pull/9565) +* Work around Adreno 2xx GPU bugs [#9573](https://github.com/mapbox/mapbox-gl-native/pull/9573) ## 5.1.0 - June 30, 2017 diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml b/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml index 7294f43c02..f30cb7c27a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml +++ b/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml @@ -20,7 +20,7 @@ - + -- cgit v1.2.1 From 7aad3613c3549ae5f4388fcbeef969e13274892b Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Fri, 21 Jul 2017 11:18:26 +0200 Subject: update release config --- .../resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties b/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties index 029d25e046..a02b5d63ac 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties +++ b/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties @@ -1,3 +1,3 @@ fabric-identifier=com.mapbox.mapboxsdk.mapbox-android-sdk -fabric-version=5.1.0 +fabric-version=5.1.1 fabric-build-type=binary -- cgit v1.2.1 From 5e6ca3ada217c84fa2f198e5de6bc89bc2c5874d Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Mon, 24 Jul 2017 12:08:20 +0200 Subject: [android] fix geojson source proguard issue (#9569) (#9577) --- platform/android/MapboxGLAndroidSDK/proguard-rules.pro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/proguard-rules.pro b/platform/android/MapboxGLAndroidSDK/proguard-rules.pro index 8e47815451..68edc12f35 100644 --- a/platform/android/MapboxGLAndroidSDK/proguard-rules.pro +++ b/platform/android/MapboxGLAndroidSDK/proguard-rules.pro @@ -6,4 +6,5 @@ -keep class com.mapbox.mapboxsdk.** { *; } -keep interface com.mapbox.mapboxsdk.** { *; } -keep class com.mapbox.services.android.telemetry.** { *; } --keep class com.mapbox.services.commons.** { *;} \ No newline at end of file +-keep class com.mapbox.services.commons.** { *;} +-keep class com.google.gson.** { *; } \ No newline at end of file -- cgit v1.2.1 From 0eee31e212a9936bcfe0c61a3bf3635a8778a434 Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Mon, 24 Jul 2017 10:45:35 +0200 Subject: [android] - harden click handling of shape annotations --- .../mapbox/mapboxsdk/maps/AnnotationManager.java | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'platform/android') 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 f35eb9b4f0..ef794c8482 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 @@ -43,6 +43,7 @@ import timber.log.Timber; class AnnotationManager { private static final String LAYER_ID_SHAPE_ANNOTATIONS = "com.mapbox.annotations.shape."; + private static final long NO_ANNOTATION_ID = -1; private final NativeMapView nativeMapView; private final MapView mapView; @@ -649,13 +650,13 @@ class AnnotationManager { boolean onTap(PointF tapPoint) { ShapeAnnotationHit shapeAnnotationHit = getShapeAnnotationHitFromTap(tapPoint); long shapeAnnotationId = new ShapeAnnotationHitResolver(mapboxMap).execute(shapeAnnotationHit); - if (shapeAnnotationId >= 0) { + if (shapeAnnotationId != NO_ANNOTATION_ID) { handleClickForShapeAnnotation(shapeAnnotationId); } MarkerHit markerHit = getMarkerHitFromTouchArea(tapPoint); long markerId = new MarkerHitResolver(mapboxMap).execute(markerHit); - return markerId >= 0 && isClickHandledForMarker(markerId); + return markerId != NO_ANNOTATION_ID && isClickHandledForMarker(markerId); } private ShapeAnnotationHit getShapeAnnotationHitFromTap(PointF tapPoint) { @@ -725,8 +726,21 @@ class AnnotationManager { } public long execute(ShapeAnnotationHit shapeHit) { + long foundAnnotationId = NO_ANNOTATION_ID; List features = mapboxMap.queryRenderedFeatures(shapeHit.tapPoint, shapeHit.layerIds); - return features.isEmpty() ? -1 : Long.valueOf(features.get(0).getId()); + if (!features.isEmpty()) { + foundAnnotationId = getIdFromFeature(features.get(0)); + } + return foundAnnotationId; + } + + private long getIdFromFeature(Feature feature) { + try { + return Long.valueOf(feature.getId()); + } catch (NumberFormatException exception) { + Timber.e(exception, "Couldn't parse feature id to a long, with id: %s", feature.getId()); + return NO_ANNOTATION_ID; + } } } @@ -743,7 +757,7 @@ class AnnotationManager { private RectF hitRectMarker = new RectF(); private RectF highestSurfaceIntersection = new RectF(); - private long closestMarkerId = -1; + private long closestMarkerId = NO_ANNOTATION_ID; MarkerHitResolver(@NonNull MapboxMap mapboxMap) { this.markerViewManager = mapboxMap.getMarkerViewManager(); -- cgit v1.2.1 From beaee9349f0608246547d9092b6690a80d633e6e Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Mon, 24 Jul 2017 11:05:29 +0200 Subject: [android] - validate Marker before opening InfoWindow --- .../main/java/com/mapbox/mapboxsdk/maps/InfoWindowManager.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/InfoWindowManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/InfoWindowManager.java index 7599b6afa6..11100d6f17 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/InfoWindowManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/InfoWindowManager.java @@ -1,6 +1,5 @@ package com.mapbox.mapboxsdk.maps; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; @@ -56,12 +55,8 @@ class InfoWindowManager { return allowConcurrentMultipleInfoWindows; } - List getInfoWindows() { - return infoWindows; - } - - boolean isInfoWindowValidForMarker(@NonNull Marker marker) { - return !TextUtils.isEmpty(marker.getTitle()) || !TextUtils.isEmpty(marker.getSnippet()); + boolean isInfoWindowValidForMarker(Marker marker) { + return marker != null && (!TextUtils.isEmpty(marker.getTitle()) || !TextUtils.isEmpty(marker.getSnippet())); } void setOnInfoWindowClickListener(@Nullable MapboxMap.OnInfoWindowClickListener listener) { -- cgit v1.2.1 From 635a3f21a0373335d4a334f5bb487251f027f47c Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Tue, 25 Jul 2017 13:01:31 +0200 Subject: [android] fix added to map checks because LongSparseArray#indexOfKey could return a negative number when the specified key is not mapped (#9602) --- .../src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'platform/android') 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 ef794c8482..251e5afabe 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 @@ -301,7 +301,7 @@ class AnnotationManager { } private boolean isAddedToMap(Annotation annotation) { - return annotation != null && annotation.getId() != -1 && annotations.indexOfKey(annotation.getId()) != -1; + return annotation != null && annotation.getId() != -1 && annotations.indexOfKey(annotation.getId()) > -1; } private void ensureIconLoaded(Marker marker) { -- cgit v1.2.1 From 009da507fa780d111bb574154840a061ab284c8f Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Tue, 25 Jul 2017 12:50:36 +0200 Subject: [android] - don't query for shape annotations if none were added --- .../main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'platform/android') 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 251e5afabe..712ab67de0 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 @@ -648,10 +648,12 @@ class AnnotationManager { // boolean onTap(PointF tapPoint) { - ShapeAnnotationHit shapeAnnotationHit = getShapeAnnotationHitFromTap(tapPoint); - long shapeAnnotationId = new ShapeAnnotationHitResolver(mapboxMap).execute(shapeAnnotationHit); - if (shapeAnnotationId != NO_ANNOTATION_ID) { - handleClickForShapeAnnotation(shapeAnnotationId); + if (!shapeAnnotationIds.isEmpty()) { + ShapeAnnotationHit shapeAnnotationHit = getShapeAnnotationHitFromTap(tapPoint); + long shapeAnnotationId = new ShapeAnnotationHitResolver(mapboxMap).execute(shapeAnnotationHit); + if (shapeAnnotationId != NO_ANNOTATION_ID) { + handleClickForShapeAnnotation(shapeAnnotationId); + } } MarkerHit markerHit = getMarkerHitFromTouchArea(tapPoint); -- cgit v1.2.1 From 9b770f382ef7f1251f0f770175514345899101a8 Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Wed, 26 Jul 2017 16:45:49 +0200 Subject: [android] - build snapshots from release branch for v5.1.2 --- platform/android/MapboxGLAndroidSDK/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/gradle.properties b/platform/android/MapboxGLAndroidSDK/gradle.properties index 078fdbc801..a8646e3270 100644 --- a/platform/android/MapboxGLAndroidSDK/gradle.properties +++ b/platform/android/MapboxGLAndroidSDK/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.mapbox.mapboxsdk -VERSION_NAME=5.2.0-SNAPSHOT +VERSION_NAME=5.1.2-SNAPSHOT POM_DESCRIPTION=Mapbox GL Android SDK POM_URL=https://github.com/mapbox/mapbox-gl-native -- cgit v1.2.1 From caba393c0ec3042a3e8e7f1a782e0283d131a996 Mon Sep 17 00:00:00 2001 From: Pablo Guardiola Date: Thu, 27 Jul 2017 15:38:53 +0200 Subject: [android] fix compass direction (Transform::getCameraOptions returns counterclockwise angle after transform.invalidateCameraPosition() which needs to be transformed to a clockwise bearing) (#9632) --- .../src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java index 7f8ba21e3e..3f43c23a7f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java @@ -421,7 +421,8 @@ public final class UiSettings { return; } - compassView.update(cameraPosition.bearing); + double clockwiseBearing = -cameraPosition.bearing; + compassView.update(clockwiseBearing); } /** -- cgit v1.2.1 From 21bbf5a9e0e82e60250f5b05dd5430052a7b2469 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 1 Aug 2017 16:33:52 +0200 Subject: [android] - fix OnCameraMoveStartedListener typo (#9664) --- .../src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 2 +- .../mapboxsdk/testapp/activity/camera/CameraPositionActivity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index c8725d8d8d..e074d938fd 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -1708,7 +1708,7 @@ public final class MapboxMap { * @param listener the listener to notify */ @UiThread - public void setOnCameraMoveStartedistener(@Nullable OnCameraMoveStartedListener listener) { + public void setOnCameraMoveStartedListener(@Nullable OnCameraMoveStartedListener listener) { cameraChangeDispatcher.setOnCameraMoveStartedListener(listener); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java index cb2f57d860..10464b087a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java @@ -67,7 +67,7 @@ public class CameraPositionActivity extends AppCompatActivity implements OnMapRe } }); - mapboxMap.setOnCameraMoveStartedistener(new MapboxMap.OnCameraMoveStartedListener() { + mapboxMap.setOnCameraMoveStartedListener(new MapboxMap.OnCameraMoveStartedListener() { private final String[] REASONS = {"REASON_API_GESTURE", "REASON_DEVELOPER_ANIMATION", "REASON_API_ANIMATION"}; -- cgit v1.2.1 From e4a61426bf1893637617159ebea5b61b37114d12 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 1 Aug 2017 15:25:24 +0200 Subject: [android] - try/catch initalisation of Telemetry (#9658) --- .../src/main/java/com/mapbox/mapboxsdk/Mapbox.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java index 6722000be7..eadc3fdcf5 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java @@ -15,6 +15,8 @@ import com.mapbox.services.android.telemetry.MapboxTelemetry; import com.mapbox.services.android.telemetry.location.LocationEngine; import com.mapbox.services.android.telemetry.location.LocationEnginePriority; +import timber.log.Timber; + /** * The entry point to initialize the Mapbox Android SDK. *

@@ -48,8 +50,14 @@ public final class Mapbox { INSTANCE = new Mapbox(appContext, accessToken, new LocationSource(appContext)); LocationEngine locationEngine = new LocationSource(appContext); locationEngine.setPriority(LocationEnginePriority.NO_POWER); - MapboxTelemetry.getInstance().initialize( - appContext, accessToken, BuildConfig.MAPBOX_EVENTS_USER_AGENT, locationEngine); + + try { + MapboxTelemetry.getInstance().initialize( + appContext, accessToken, BuildConfig.MAPBOX_EVENTS_USER_AGENT, locationEngine); + } catch (Exception exception) { + Timber.e(exception, "Unable to instantiate Mapbox telemetry"); + } + ConnectivityReceiver.instance(appContext); } return INSTANCE; -- cgit v1.2.1 From f5b48a5d06be88bfb373c8dab4d9576d122c8937 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 1 Aug 2017 15:25:07 +0200 Subject: [android] - remove preview image integration (#9657) --- .../java/com/mapbox/mapboxsdk/maps/MapView.java | 3 +- .../drawable-v21/mapbox_default_bg_selector.xml | 9 ---- .../res/drawable-xxhdpi/mapbox_mapview_preview.jpg | Bin 166053 -> 0 bytes .../res/drawable/mapbox_default_bg_selector.xml | 6 --- .../src/main/res/layout/mapbox_mapview_preview.xml | 52 --------------------- .../src/main/res/values/colors.xml | 1 - 6 files changed, 1 insertion(+), 70 deletions(-) delete mode 100644 platform/android/MapboxGLAndroidSDK/src/main/res/drawable-v21/mapbox_default_bg_selector.xml delete mode 100644 platform/android/MapboxGLAndroidSDK/src/main/res/drawable-xxhdpi/mapbox_mapview_preview.jpg delete mode 100644 platform/android/MapboxGLAndroidSDK/src/main/res/drawable/mapbox_default_bg_selector.xml delete mode 100644 platform/android/MapboxGLAndroidSDK/src/main/res/layout/mapbox_mapview_preview.xml (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index c51d9327d2..32c4952aa1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -95,8 +95,7 @@ public class MapView extends FrameLayout { private void initialise(@NonNull final Context context, @NonNull final MapboxMapOptions options) { if (isInEditMode()) { - // in IDE, show preview map - LayoutInflater.from(context).inflate(R.layout.mapbox_mapview_preview, this); + // in IDE layout editor, just return return; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-v21/mapbox_default_bg_selector.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-v21/mapbox_default_bg_selector.xml deleted file mode 100644 index 2fd6815c23..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-v21/mapbox_default_bg_selector.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-xxhdpi/mapbox_mapview_preview.jpg b/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-xxhdpi/mapbox_mapview_preview.jpg deleted file mode 100644 index 3a21fc08bc..0000000000 Binary files a/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-xxhdpi/mapbox_mapview_preview.jpg and /dev/null differ diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/drawable/mapbox_default_bg_selector.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/drawable/mapbox_default_bg_selector.xml deleted file mode 100644 index 3efe48615b..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/res/drawable/mapbox_default_bg_selector.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/layout/mapbox_mapview_preview.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/layout/mapbox_mapview_preview.xml deleted file mode 100644 index 1c1ab0e71b..0000000000 --- a/platform/android/MapboxGLAndroidSDK/src/main/res/layout/mapbox_mapview_preview.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml index 63ef42c2c3..69ab7568bb 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml +++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml @@ -1,7 +1,6 @@ #7D7F80 - #EEEEEE #1E8CAB @color/mapbox_blue -- cgit v1.2.1 From f8c418e2b1cf7229908dd322e1442fda1a05605e Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 1 Aug 2017 21:31:35 +0200 Subject: [android] - bump MAS dependency (#9671) --- platform/android/dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle index 3d8f48b46b..5fd2ec3716 100644 --- a/platform/android/dependencies.gradle +++ b/platform/android/dependencies.gradle @@ -7,7 +7,7 @@ ext { versionCode = 11 versionName = "5.0.0" - mapboxServicesVersion = "2.1.3" + mapboxServicesVersion = "2.2.0" supportLibVersion = "25.3.1" wearableVersion = '2.0.0' espressoVersion = '2.2.2' -- cgit v1.2.1 From a523b710aceccc992c5aa193acbcd4bf4c93a62d Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Tue, 1 Aug 2017 21:33:31 +0200 Subject: [android] - update changelog for release v5.1.2 --- platform/android/CHANGELOG.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index b2eaaa2a9c..485ceaab8a 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -2,7 +2,21 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to do so please see the [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) first to get started. -## 5.1.1 - TBA +## 5.1.2 - August 2, 20017 + +* Disable program caching on Ardreno GPU 3xx, 4xx and 5xx [#9625](https://github.com/mapbox/mapbox-gl-native/pull/9625) +* GeoJSON proguard issue [#9577](https://github.com/mapbox/mapbox-gl-native/pull/9577) +* Harden click events of shape annotations [#9585](https://github.com/mapbox/mapbox-gl-native/pull/9585) +* Validate Marker before opening InfoWindow [#9586](https://github.com/mapbox/mapbox-gl-native/pull/9586) +* Fix added to map check [#9602](https://github.com/mapbox/mapbox-gl-native/pull/9602) +* Don't query shape annotations if none were added [#9606](https://github.com/mapbox/mapbox-gl-native/pull/9606) +* Fix compass direction [#9632](https://github.com/mapbox/mapbox-gl-native/pull/9632) +* Remove preview image integration [#9657](https://github.com/mapbox/mapbox-gl-native/pull/9657) +* Try/catch initialization of telemetry [#9658](https://github.com/mapbox/mapbox-gl-native/pull/9658) +* Fix typo OnCameraMoveStartedListener [#9664](https://github.com/mapbox/mapbox-gl-native/pull/9664) +* Bump MAS dependency to 5.2.0 [#9671](https://github.com/mapbox/mapbox-gl-native/pull/9671) + +## 5.1.1 - July 21, 2017 * Rework attribution binding [#9433](https://github.com/mapbox/mapbox-gl-native/pull/9433) * BackendScope changes [#9538](https://github.com/mapbox/mapbox-gl-native/pull/9538) -- cgit v1.2.1 From ebab0c1a1bb6e8e76cefff72b262e33f9ac0555c Mon Sep 17 00:00:00 2001 From: Tobrun Van Nuland Date: Wed, 2 Aug 2017 12:29:10 +0200 Subject: [android] - release android v5.1.2, update config --- platform/android/MapboxGLAndroidSDK/gradle.properties | 2 +- .../fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties | 2 +- platform/android/dependencies.gradle | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/gradle.properties b/platform/android/MapboxGLAndroidSDK/gradle.properties index a8646e3270..af1d04ab97 100644 --- a/platform/android/MapboxGLAndroidSDK/gradle.properties +++ b/platform/android/MapboxGLAndroidSDK/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.mapbox.mapboxsdk -VERSION_NAME=5.1.2-SNAPSHOT +VERSION_NAME=5.1.3-SNAPSHOT POM_DESCRIPTION=Mapbox GL Android SDK POM_URL=https://github.com/mapbox/mapbox-gl-native diff --git a/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties b/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties index a02b5d63ac..3cfc7d5fdc 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties +++ b/platform/android/MapboxGLAndroidSDK/src/main/resources/fabric/com.mapbox.mapboxsdk.mapbox-android-sdk.properties @@ -1,3 +1,3 @@ fabric-identifier=com.mapbox.mapboxsdk.mapbox-android-sdk -fabric-version=5.1.1 +fabric-version=5.1.2 fabric-build-type=binary diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle index 5fd2ec3716..a4b202086a 100644 --- a/platform/android/dependencies.gradle +++ b/platform/android/dependencies.gradle @@ -4,8 +4,8 @@ ext { compileSdkVersion = 25 buildToolsVersion = "25.0.2" - versionCode = 11 - versionName = "5.0.0" + versionCode = 12 + versionName = "5.1.3" mapboxServicesVersion = "2.2.0" supportLibVersion = "25.3.1" -- cgit v1.2.1 From 8c020591de0f5129b9c9d6a99fcf47fdd61a2b0f Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Mon, 28 Aug 2017 15:18:20 -0400 Subject: [android] Diable lint check for MissingTranslation --- platform/android/MapboxGLAndroidSDK/build.gradle | 3 ++- platform/android/MapboxGLAndroidSDKTestApp/build.gradle | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index 025097e756..c96587fce6 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -119,9 +119,10 @@ android { } lintOptions { + disable 'MissingTranslation', 'TypographyQuotes' baseline file("lint-baseline-local.xml") checkAllWarnings true - warningsAsErrors true + warningsAsErrors false } testOptions { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle index 360cb36067..d7b71beefd 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle @@ -28,7 +28,8 @@ android { baseline file("lint-baseline-local.xml") checkAllWarnings true warningsAsErrors true - disable 'MissingTranslation', 'GoogleAppIndexingWarning', 'UnpackedNativeCode', 'IconDipSize' + disable 'MissingTranslation', 'GoogleAppIndexingWarning', 'UnpackedNativeCode', 'IconDipSize', 'TypographyQuotes' + abortOnError false } buildTypes { -- cgit v1.2.1 From dd18e1af1e8366bc3126cc897ae4b6d5890acd0b Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Mon, 28 Aug 2017 17:11:40 -0400 Subject: [android] Update sdk version. --- platform/android/MapboxGLAndroidSDK/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'platform/android') diff --git a/platform/android/MapboxGLAndroidSDK/gradle.properties b/platform/android/MapboxGLAndroidSDK/gradle.properties index 389fcf275a..ff6e2f61df 100644 --- a/platform/android/MapboxGLAndroidSDK/gradle.properties +++ b/platform/android/MapboxGLAndroidSDK/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.mapbox.mapboxsdk -VERSION_NAME=5.1.3-SNAPSHOT +VERSION_NAME=5.2.0-SNAPSHOT POM_DESCRIPTION=Mapbox GL Android SDK POM_URL=https://github.com/mapbox/mapbox-gl-native -- cgit v1.2.1