diff options
author | Tobrun <tobrun@mapbox.com> | 2017-11-10 16:33:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-10 16:33:51 +0100 |
commit | a47f8245dacffad2b7f8f71a38b7eb41ee28b0b5 (patch) | |
tree | 86ad036c2c5c82961238a1e4b6d648decf9b7eec /platform | |
parent | 225fba8a0aad5ea52ff878443f58d65bb2221d74 (diff) | |
download | qtlocation-mapboxgl-a47f8245dacffad2b7f8f71a38b7eb41ee28b0b5.tar.gz |
Monkey crashes (#10440)
* [android] - avoid null map from trackballevent
* [android] - fixup animated marker test activity from monkey runs
* [android] - harden NativeMapView OnMapChangeListener
* [android] - harden against destroyed wrapper activity while moving touch pointers
* [android] - harden bulk marker activity for monkey runner
* [android] - harden scale end gesture event for null velocity tracker
* [android] - invalid mapboxMap invocation
* [android] - reset test setup
Diffstat (limited to 'platform')
5 files changed, 35 insertions, 18 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 4120e164a4..9d7d980ae3 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 @@ final class MapGestureDetector { velocityTracker = null; break; case MotionEvent.ACTION_MOVE: - velocityTracker.addMovement(event); - velocityTracker.computeCurrentVelocity(1000); + if (velocityTracker != null) { + velocityTracker.addMovement(event); + velocityTracker.computeCurrentVelocity(1000); + } break; } @@ -551,6 +553,11 @@ final class MapGestureDetector { // Called when fingers leave screen @Override public void onScaleEnd(final ScaleGestureDetector detector) { + if (velocityTracker == null) { + return; + } + + if (rotateGestureOccurred || quickZoom) { reset(); return; 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 8b6bce69e2..e8eb7e8718 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 @@ final class NativeMapView { // void addOnMapChangedListener(@NonNull MapView.OnMapChangedListener listener) { - mapView.addOnMapChangedListener(listener); + if (mapView != null) { + mapView.addOnMapChangedListener(listener); + } } void removeOnMapChangedListener(@NonNull MapView.OnMapChangedListener listener) { 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 0366e50627..16c45ebea2 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 @@ final class Transform implements MapView.OnMapChangedListener { } 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 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 52181cee0c..d8752bbea2 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 @@ public class AnimatedMarkerActivity extends AppCompatActivity { 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(); + } } } 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 50adeb2d74..666fd2eee6 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,6 +100,10 @@ public class BulkMarkerActivity extends AppCompatActivity implements AdapterView } private void showMarkers(int amount) { + if (mapboxMap == null || locations == null) { + return; + } + mapboxMap.clear(); if (locations.size() < amount) { |