From a691db5343c07c434bba44558c207d9900a04192 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 4 Sep 2019 18:13:31 +0300 Subject: [PATCH] [android] Call callback.onFinish() when camera is already at the correct position [android] Call callback.onFinish() when camera is already at the correct position --- .../com/mapbox/mapboxsdk/maps/Transform.java | 6 ++ .../mapbox/mapboxsdk/maps/TransformTest.kt | 97 +++++++++++++++++++ 2 files changed, 103 insertions(+) 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 02cd05545..f785aacf3 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 @@ -120,6 +120,8 @@ public final class Transform implements MapView.OnCameraDidChangeListener { } } }); + } else if (callback != null) { + callback.onFinish(); } } @@ -137,6 +139,8 @@ public final class Transform implements MapView.OnCameraDidChangeListener { mapView.addOnCameraDidChangeListener(this); nativeMap.easeTo(cameraPosition.target, cameraPosition.zoom, cameraPosition.bearing, cameraPosition.tilt, cameraPosition.padding, durationMs, easingInterpolator); + } else if (callback != null) { + callback.onFinish(); } } @@ -157,6 +161,8 @@ public final class Transform implements MapView.OnCameraDidChangeListener { mapView.addOnCameraDidChangeListener(this); nativeMap.flyTo(cameraPosition.target, cameraPosition.zoom, cameraPosition.bearing, cameraPosition.tilt, cameraPosition.padding, durationMs); + } else if (callback != null) { + callback.onFinish(); } } diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/TransformTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/TransformTest.kt index 511101ecb..fddf7eeaf 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/TransformTest.kt +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/TransformTest.kt @@ -26,6 +26,7 @@ class TransformTest { every { nativeMapView.cameraPosition } returns CameraPosition.DEFAULT every { nativeMapView.cancelTransitions() } answers {} every { nativeMapView.jumpTo(any(), any(), any(), any(), any()) } answers {} + every { nativeMapView.easeTo(any(), any(), any(), any(), any(), any(), any()) } answers {} every { nativeMapView.flyTo(any(), any(), any(), any(), any(), any()) } answers {} every { nativeMapView.minZoom = any() } answers {} every { nativeMapView.maxZoom = any() } answers {} @@ -48,6 +49,102 @@ class TransformTest { verify { callback.onFinish() } } + @Test + fun testMoveCameraToSamePosition() { + val mapboxMap = mockk() + every { mapboxMap.cameraPosition } answers { CameraPosition.DEFAULT } + + val callback = mockk() + every { callback.onFinish() } answers {} + + val expected = CameraPosition.DEFAULT + val update = CameraUpdateFactory.newCameraPosition(expected) + + transform.moveCamera(mapboxMap, update, null) // Initialize camera position + transform.moveCamera(mapboxMap, update, callback) + + verify(exactly = 1, verifyBlock = { nativeMapView.jumpTo(any(), any(), any(), any(), any()) }) + verify { callback.onFinish() } + } + + @Test + fun testEaseCamera() { + val mapboxMap = mockk() + every { mapboxMap.cameraPosition } answers { CameraPosition.DEFAULT } + + every { mapView.addOnCameraDidChangeListener(any()) } answers { transform.onCameraDidChange(true) } + every { mapView.removeOnCameraDidChangeListener(any()) } answers {} + + val callback = mockk() + every { callback.onFinish() } answers {} + + val target = LatLng(1.0, 2.0) + val expected = CameraPosition.Builder().target(target).build() + val update = CameraUpdateFactory.newCameraPosition(expected) + + transform.easeCamera(mapboxMap, update, 100, false, callback) + + verify { nativeMapView.easeTo(target, -1.0, -1.0, -1.0, null, 100, false) } + verify { callback.onFinish() } + } + + @Test + fun testEaseCameraToSamePosition() { + val mapboxMap = mockk() + every { mapboxMap.cameraPosition } answers { CameraPosition.DEFAULT } + + val callback = mockk() + every { callback.onFinish() } answers {} + + val expected = CameraPosition.DEFAULT + val update = CameraUpdateFactory.newCameraPosition(expected) + transform.moveCamera(mapboxMap, update, null) + + transform.easeCamera(mapboxMap, update, 100, false, callback) + + verify(exactly = 0, verifyBlock = { nativeMapView.easeTo(any(), any(), any(), any(), any(), any(), any()) }) + verify { callback.onFinish() } + } + + @Test + fun testAnimateCamera() { + val mapboxMap = mockk() + every { mapboxMap.cameraPosition } answers { CameraPosition.DEFAULT } + + every { mapView.addOnCameraDidChangeListener(any()) } answers { transform.onCameraDidChange(true) } + every { mapView.removeOnCameraDidChangeListener(any()) } answers {} + + val callback = mockk() + every { callback.onFinish() } answers {} + + val target = LatLng(1.0, 2.0) + val expected = CameraPosition.Builder().target(target).build() + val update = CameraUpdateFactory.newCameraPosition(expected) + + transform.animateCamera(mapboxMap, update, 100, callback) + + verify { nativeMapView.flyTo(target, -1.0, -1.0, -1.0, null, 100) } + verify { callback.onFinish() } + } + + @Test + fun testAnimateCameraToSamePosition() { + val mapboxMap = mockk() + every { mapboxMap.cameraPosition } answers { CameraPosition.DEFAULT } + + val callback = mockk() + every { callback.onFinish() } answers {} + + val expected = CameraPosition.DEFAULT + val update = CameraUpdateFactory.newCameraPosition(expected) + transform.moveCamera(mapboxMap, update, null) + + transform.animateCamera(mapboxMap, update, 100, callback) + + verify(exactly = 0, verifyBlock = { nativeMapView.flyTo(any(), any(), any(), any(), any(), any()) }) + verify { callback.onFinish() } + } + @Test fun testMinZoom() { transform.minZoom = 10.0