This commit is contained in:
Petr Pokorny
2021-02-25 19:30:23 +01:00
parent cc2ea9fe0d
commit 36e1f40c5e
3 changed files with 38 additions and 3 deletions

View File

@@ -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

View File

@@ -517,6 +517,7 @@ public final class LocationComponent {
} else {
disableLocationComponent();
}
locationCameraController.setEnabled(isEnabled);
}
/**

View File

@@ -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,