From 4bde987fb91865ae70be03cbaa78a227b3185b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Tue, 3 Dec 2019 11:03:43 +0100 Subject: [PATCH] invoke location camera transition finish callback when equal mode is set --- .../location/LocationCameraController.java | 3 ++ .../LocationCameraControllerTest.java | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java index 79d2e02bf..47d4fe0ae 100644 --- a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java +++ b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java @@ -103,6 +103,9 @@ final class LocationCameraController { @Nullable Double zoom, @Nullable Double bearing, @Nullable Double tilt, @Nullable OnLocationCameraTransitionListener internalTransitionListener) { if (this.cameraMode == cameraMode) { + if (internalTransitionListener != null) { + internalTransitionListener.onLocationCameraTransitionFinished(cameraMode); + } return; } diff --git a/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java b/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java index d1b8642c3..f068c94ce 100644 --- a/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java +++ b/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationCameraControllerTest.java @@ -643,6 +643,36 @@ public class LocationCameraControllerTest { any(MapboxMap.CancelableCallback.class)); } + @Test + public void transition_duplicateMode() { + MapboxMap mapboxMap = mock(MapboxMap.class); + Transform transform = mock(Transform.class); + when(mapboxMap.getCameraPosition()).thenReturn(CameraPosition.DEFAULT); + Projection projection = mock(Projection.class); + when(mapboxMap.getProjection()).thenReturn(projection); + when(projection.getMetersPerPixelAtLatitude(any(Double.class))).thenReturn(Double.valueOf(1000)); + LocationCameraController camera = buildCamera(mapboxMap, transform); + camera.initializeOptions(mock(LocationComponentOptions.class)); + final OnLocationCameraTransitionListener listener = mock(OnLocationCameraTransitionListener.class); + Location location = mock(Location.class); + + camera.setCameraMode(TRACKING, location, TRANSITION_ANIMATION_DURATION_MS, null, null, null, listener); + + doAnswer(new Answer() { + @Override + public Void answer(InvocationOnMock invocation) throws Throwable { + listener.onLocationCameraTransitionFinished(TRACKING); + return null; + } + }).when(transform).animateCamera(eq(mapboxMap), any(CameraUpdate.class), any(Integer.class), + any(MapboxMap.CancelableCallback.class)); + camera.setCameraMode(TRACKING, location, TRANSITION_ANIMATION_DURATION_MS, null, null, null, listener); + verify(listener, times(1)).onLocationCameraTransitionFinished(TRACKING); + verify(transform, times(1)) + .animateCamera(eq(mapboxMap), any(CameraUpdate.class), any(Integer.class), + any(MapboxMap.CancelableCallback.class)); + } + @Test public void transition_canceled() { MapboxMap mapboxMap = mock(MapboxMap.class);