From 034cb1cf178d750f270416ef4114db420dd0113f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Wed, 19 Dec 2018 16:03:10 +0100 Subject: [android] cancel camera transitions only when set CameraMode is not None --- .../location/LocationCameraController.java | 6 ++- .../location/LocationCameraControllerTest.java | 54 +++++++++++++++++++--- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java index e426a587d0..5e972c51d6 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java @@ -89,7 +89,11 @@ final class LocationCameraController implements MapboxAnimator.OnCameraAnimation @Nullable OnLocationCameraTransitionListener internalTransitionListener) { final boolean wasTracking = isLocationTracking(); this.cameraMode = cameraMode; - mapboxMap.cancelTransitions(); + + if (cameraMode != CameraMode.NONE) { + mapboxMap.cancelTransitions(); + } + adjustGesturesThresholds(); notifyCameraTrackingChangeListener(wasTracking); transitionToCurrentLocation(wasTracking, lastLocation, internalTransitionListener); diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java index 475426f77c..1b56cfac52 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -123,6 +124,45 @@ public class LocationCameraControllerTest { verify(internalTrackingChangedListener).onCameraTrackingChanged(cameraMode); } + @Test + public void setCameraMode_cancelTransitionsWhenSet() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class)); + when(mapboxMap.getProjection()).thenReturn(mock(Projection.class)); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + + camera.setCameraMode(CameraMode.NONE_COMPASS); + verify(mapboxMap, times(1)).cancelTransitions(); + + camera.setCameraMode(CameraMode.NONE_GPS); + verify(mapboxMap, times(2)).cancelTransitions(); + + camera.setCameraMode(CameraMode.TRACKING); + verify(mapboxMap, times(3)).cancelTransitions(); + + camera.setCameraMode(CameraMode.TRACKING_COMPASS); + verify(mapboxMap, times(4)).cancelTransitions(); + + camera.setCameraMode(CameraMode.TRACKING_GPS); + verify(mapboxMap, times(5)).cancelTransitions(); + + camera.setCameraMode(CameraMode.TRACKING_GPS_NORTH); + verify(mapboxMap, times(6)).cancelTransitions(); + } + + @Test + public void setCameraMode_dontCancelTransitionsWhenNoneSet() { + MapboxMap mapboxMap = mock(MapboxMap.class); + when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class)); + when(mapboxMap.getProjection()).thenReturn(mock(Projection.class)); + LocationCameraController camera = buildCamera(mapboxMap); + camera.initializeOptions(mock(LocationComponentOptions.class)); + + camera.setCameraMode(CameraMode.NONE); + verify(mapboxMap, never()).cancelTransitions(); + } + @Test public void onNewLatLngValue_cameraModeTrackingUpdatesLatLng() { MapboxMap mapboxMap = mock(MapboxMap.class); @@ -367,7 +407,7 @@ public class LocationCameraControllerTest { } @Test - public void onMove_cancellingTransitionWhileNone() { + public void onMove_notCancellingTransitionWhileNone() { MapboxMap mapboxMap = mock(MapboxMap.class); when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class)); MoveGestureDetector moveGestureDetector = mock(MoveGestureDetector.class); @@ -376,12 +416,12 @@ public class LocationCameraControllerTest { camera.setCameraMode(CameraMode.NONE); camera.onMoveListener.onMove(moveGestureDetector); - verify(mapboxMap, times(1)).cancelTransitions(); + verify(mapboxMap, times(0)).cancelTransitions(); verify(moveGestureDetector, times(0)).interrupt(); // testing subsequent calls camera.onMoveListener.onMove(moveGestureDetector); - verify(mapboxMap, times(1)).cancelTransitions(); + verify(mapboxMap, times(0)).cancelTransitions(); verify(moveGestureDetector, times(0)).interrupt(); } @@ -395,12 +435,12 @@ public class LocationCameraControllerTest { camera.setCameraMode(CameraMode.TRACKING); camera.onMoveListener.onMove(moveGestureDetector); - verify(mapboxMap, times(2)).cancelTransitions(); + verify(mapboxMap, times(1)).cancelTransitions(); verify(moveGestureDetector, times(1)).interrupt(); // testing subsequent calls camera.onMoveListener.onMove(moveGestureDetector); - verify(mapboxMap, times(2)).cancelTransitions(); + verify(mapboxMap, times(1)).cancelTransitions(); verify(moveGestureDetector, times(1)).interrupt(); } @@ -413,12 +453,12 @@ public class LocationCameraControllerTest { camera.setCameraMode(CameraMode.NONE_COMPASS); camera.onMoveListener.onMove(moveGestureDetector); - verify(mapboxMap, times(2)).cancelTransitions(); + verify(mapboxMap, times(1)).cancelTransitions(); verify(moveGestureDetector, times(1)).interrupt(); // testing subsequent calls camera.onMoveListener.onMove(moveGestureDetector); - verify(mapboxMap, times(2)).cancelTransitions(); + verify(mapboxMap, times(1)).cancelTransitions(); verify(moveGestureDetector, times(1)).interrupt(); } -- cgit v1.2.1