From 0bcba769ba0cc1022733ce568c6d40670f441493 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 06:34:55 +0100 Subject: [PATCH 1/8] [android] - avoid null map from trackballevent --- .../com/mapbox/mapboxsdk/maps/Transform.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java index 0366e506273..16c45ebea23 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java @@ -238,16 +238,18 @@ void setZoom(double zoom, @NonNull PointF focalPoint) { } void setZoom(double zoom, @NonNull PointF focalPoint, long duration) { - mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { - @Override - public void onMapChanged(int change) { - if (change == MapView.REGION_DID_CHANGE_ANIMATED) { - cameraChangeDispatcher.onCameraIdle(); - mapView.removeOnMapChangedListener(this); + if (mapView != null) { + mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { + @Override + public void onMapChanged(int change) { + if (change == MapView.REGION_DID_CHANGE_ANIMATED) { + cameraChangeDispatcher.onCameraIdle(); + mapView.removeOnMapChangedListener(this); + } } - } - }); - mapView.setZoom(zoom, focalPoint, duration); + }); + mapView.setZoom(zoom, focalPoint, duration); + } } // Direction From 5fe55ecac2c9c55b34017670cbf16fcf2a3cb7a1 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 06:49:08 +0100 Subject: [PATCH 2/8] [android] - fixup animated marker test activity from monkey runs --- .../annotation/AnimatedMarkerActivity.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java index 52181cee0ce..d8752bbea2f 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AnimatedMarkerActivity.java @@ -236,12 +236,14 @@ protected void onStop() { stopped = true; - // Stop ongoing animations, prevent memory lekas - MarkerViewManager markerViewManager = mapboxMap.getMarkerViewManager(); - for (MarkerView markerView : markerViews) { - View view = markerViewManager.getView(markerView); - if (view != null) { - view.animate().cancel(); + // Stop ongoing animations, prevent memory leaks + if (mapboxMap != null) { + MarkerViewManager markerViewManager = mapboxMap.getMarkerViewManager(); + for (MarkerView markerView : markerViews) { + View view = markerViewManager.getView(markerView); + if (view != null) { + view.animate().cancel(); + } } } From 8e6e0467e7682e4fd1f97d93c7f81453ab756681 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 07:02:43 +0100 Subject: [PATCH 3/8] [android] - harden NativeMapView OnMapChangeListener --- .../main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index 8b6bce69e2f..e8eb7e87186 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -1082,7 +1082,9 @@ int getHeight() { // void addOnMapChangedListener(@NonNull MapView.OnMapChangedListener listener) { - mapView.addOnMapChangedListener(listener); + if (mapView != null) { + mapView.addOnMapChangedListener(listener); + } } void removeOnMapChangedListener(@NonNull MapView.OnMapChangedListener listener) { From bc29c57229755cdcdf40bc3aab8b9296cc105028 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 07:27:27 +0100 Subject: [PATCH 4/8] [android] - harden against destroyed wrapper activity while moving touch pointers --- .../mapboxsdk/maps/MapGestureDetector.java | 6 ++++-- .../mapboxsdk/testapp/MapboxApplication.java | 16 ++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) 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 4120e164a4b..fddc1b29bde 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 @@ -235,8 +235,10 @@ boolean onTouchEvent(MotionEvent event) { velocityTracker = null; break; case MotionEvent.ACTION_MOVE: - velocityTracker.addMovement(event); - velocityTracker.computeCurrentVelocity(1000); + if (velocityTracker != null) { + velocityTracker.addMovement(event); + velocityTracker.computeCurrentVelocity(1000); + } break; } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java index fba33bb3806..fc15038c075 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java @@ -30,14 +30,14 @@ public class MapboxApplication extends Application { public void onCreate() { super.onCreate(); - if (LeakCanary.isInAnalyzerProcess(this)) { - // This process is dedicated to LeakCanary for heap analysis. - // You should not init your app in this process. - return; - } - LeakCanary.install(this); - - initializeLogger(); +// if (LeakCanary.isInAnalyzerProcess(this)) { +// // This process is dedicated to LeakCanary for heap analysis. +// // You should not init your app in this process. +// return; +// } +// LeakCanary.install(this); +// +// initializeLogger(); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() From 51544804b86df6d33bea3f01a0e9acbed92c8b44 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 07:36:01 +0100 Subject: [PATCH 5/8] [android] - harden bulk marker activity for monkey runner --- .../testapp/activity/annotation/BulkMarkerActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java index 50adeb2d74f..88a924298ef 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java @@ -102,6 +102,10 @@ private void onLatLngListLoaded(List latLngs, int amount) { private void showMarkers(int amount) { mapboxMap.clear(); + if (locations == null) { + return; + } + if (locations.size() < amount) { amount = locations.size(); } From c2f9fbb3a1cf72cbaf0c914d5a258ac8695c9c29 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 07:49:07 +0100 Subject: [PATCH 6/8] [android] - harden scale end gesture event for null velocity tracker --- .../java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java | 5 +++++ 1 file changed, 5 insertions(+) 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 fddc1b29bde..9d7d980ae3e 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 @@ -553,6 +553,11 @@ public boolean onScale(ScaleGestureDetector detector) { // Called when fingers leave screen @Override public void onScaleEnd(final ScaleGestureDetector detector) { + if (velocityTracker == null) { + return; + } + + if (rotateGestureOccurred || quickZoom) { reset(); return; From b31245f1d7503cac00bf79163fd87f152f752213 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 10:01:15 +0100 Subject: [PATCH 7/8] [android] - invalid mapboxMap invocation --- .../testapp/activity/annotation/BulkMarkerActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java index 88a924298ef..666fd2eee6d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java @@ -100,12 +100,12 @@ private void onLatLngListLoaded(List latLngs, int amount) { } private void showMarkers(int amount) { - mapboxMap.clear(); - - if (locations == null) { + if (mapboxMap == null || locations == null) { return; } + mapboxMap.clear(); + if (locations.size() < amount) { amount = locations.size(); } From 2718db9f026cddccbfd3d8b7af016dd9eb690704 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Fri, 10 Nov 2017 10:33:16 +0100 Subject: [PATCH 8/8] [android] - reset test setup --- .../mapboxsdk/testapp/MapboxApplication.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java index fc15038c075..fba33bb3806 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java @@ -30,14 +30,14 @@ public class MapboxApplication extends Application { public void onCreate() { super.onCreate(); -// if (LeakCanary.isInAnalyzerProcess(this)) { -// // This process is dedicated to LeakCanary for heap analysis. -// // You should not init your app in this process. -// return; -// } -// LeakCanary.install(this); -// -// initializeLogger(); + if (LeakCanary.isInAnalyzerProcess(this)) { + // This process is dedicated to LeakCanary for heap analysis. + // You should not init your app in this process. + return; + } + LeakCanary.install(this); + + initializeLogger(); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads()