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 c4c27a5e8..a7e98a593 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 @@ -44,6 +44,7 @@ final class LocationCameraController { private boolean isTransitioning; private LatLng lastLocation; + private boolean isEnabled; LocationCameraController( Context context, @@ -133,7 +134,8 @@ final class LocationCameraController { long transitionDuration, Double zoom, Double bearing, Double tilt, final OnLocationCameraTransitionListener internalTransitionListener) { - if (!wasTracking && isLocationTracking() && lastLocation != null) { + if (!wasTracking && isLocationTracking() && lastLocation != null && isEnabled) + { isTransitioning = true; LatLng target = new LatLng(lastLocation); @@ -320,6 +322,10 @@ final class LocationCameraController { || cameraMode == CameraMode.NONE_COMPASS; } + void setEnabled(boolean enabled) { + isEnabled = enabled; + } + private boolean isLocationTracking() { return cameraMode == CameraMode.TRACKING || cameraMode == CameraMode.TRACKING_COMPASS diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java index 81efc0675..90727acd0 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java @@ -517,6 +517,7 @@ public final class LocationComponent { } else { disableLocationComponent(); } + locationCameraController.setEnabled(isEnabled); } /** 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 fb67df099..a0f166d40 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 @@ -57,7 +57,7 @@ public class LocationCameraControllerTest { MapboxMap mapboxMap = mock(MapboxMap.class); LocationCameraController camera = buildCamera(mapboxMap); camera.initializeOptions(mock(LocationComponentOptions.class)); - + camera.setEnabled(true); camera.setCameraMode(TRACKING_GPS); verify(mapboxMap).cancelTransitions(); @@ -1142,6 +1142,32 @@ public class LocationCameraControllerTest { .animateCamera(eq(mapboxMap), eq(cameraUpdate), eq(1200), any(MapboxMap.CancelableCallback.class)); } + @Test + public void transition_customAnimationDisabled() { + 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)); + Location location = mock(Location.class); + CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition( + new CameraPosition.Builder() + .target(new LatLng(location)) + .zoom(14.0) + .bearing(13.0) + .tilt(45.0) + .build() + ); + + camera.setEnabled(false); + camera.setCameraMode(TRACKING, location, 1200, 14.0, 13.0, 45.0, null); + verify(transform, times(0)) + .animateCamera(eq(mapboxMap), eq(cameraUpdate), eq(1200), any(MapboxMap.CancelableCallback.class)); + } + private LocationCameraController buildCamera(OnCameraTrackingChangedListener onCameraTrackingChangedListener) { MapboxMap mapboxMap = mock(MapboxMap.class); when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class)); @@ -1206,8 +1232,10 @@ public class LocationCameraControllerTest { OnCameraMoveInvalidateListener onCameraMoveInvalidateListener = mock(OnCameraMoveInvalidateListener.class); AndroidGesturesManager initialGesturesManager = mock(AndroidGesturesManager.class); AndroidGesturesManager internalGesturesManager = mock(AndroidGesturesManager.class); - return new LocationCameraController(mapboxMap, transform, moveGestureDetector, + LocationCameraController locationCameraController = new LocationCameraController(mapboxMap, transform, moveGestureDetector, onCameraTrackingChangedListener, onCameraMoveInvalidateListener, initialGesturesManager, internalGesturesManager); + locationCameraController.setEnabled(true); + return locationCameraController; } private LocationCameraController buildCamera(MapboxMap mapboxMap, AndroidGesturesManager initialGesturesManager,