Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Invalidate camera mode in LocationComponent for gestures initiated changes only if necessary #12932

Merged
merged 1 commit into from
Sep 25, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.content.Context;
import android.graphics.PointF;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.view.MotionEvent;

import com.mapbox.android.gestures.AndroidGesturesManager;
Expand Down Expand Up @@ -186,7 +187,8 @@ private void notifyCameraTrackingChangeListener(boolean wasTracking) {
}
}

private MapboxMap.OnMoveListener onMoveListener = new MapboxMap.OnMoveListener() {
@VisibleForTesting
MapboxMap.OnMoveListener onMoveListener = new MapboxMap.OnMoveListener() {
private boolean interrupt;

@Override
Expand All @@ -208,7 +210,11 @@ public void onMove(@NonNull MoveGestureDetector detector) {
detector.interrupt();
return;
}
setCameraMode(CameraMode.NONE);

if (isLocationTracking() || isBearingTracking()) {
setCameraMode(CameraMode.NONE);
detector.interrupt();
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,62 @@ public void gesturesManagement_disabled() {
verify(mapboxMap).setGesturesManager(initialGesturesManager, true, true);
}

@Test
public void onMove_cancellingTransitionWhileNone() {
MapboxMap mapboxMap = mock(MapboxMap.class);
when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class));
MoveGestureDetector moveGestureDetector = mock(MoveGestureDetector.class);
LocationCameraController camera = buildCamera(mapboxMap);
camera.initializeOptions(mock(LocationComponentOptions.class));

camera.setCameraMode(CameraMode.NONE);
camera.onMoveListener.onMove(moveGestureDetector);
verify(mapboxMap, times(1)).cancelTransitions();
verify(moveGestureDetector, times(0)).interrupt();

// testing subsequent calls
camera.onMoveListener.onMove(moveGestureDetector);
verify(mapboxMap, times(1)).cancelTransitions();
verify(moveGestureDetector, times(0)).interrupt();
}

@Test
public void onMove_cancellingTransitionWhileGps() {
MapboxMap mapboxMap = mock(MapboxMap.class);
when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class));
MoveGestureDetector moveGestureDetector = mock(MoveGestureDetector.class);
LocationCameraController camera = buildCamera(mapboxMap);
camera.initializeOptions(mock(LocationComponentOptions.class));

camera.setCameraMode(CameraMode.TRACKING);
camera.onMoveListener.onMove(moveGestureDetector);
verify(mapboxMap, times(2)).cancelTransitions();
verify(moveGestureDetector, times(1)).interrupt();

// testing subsequent calls
camera.onMoveListener.onMove(moveGestureDetector);
verify(mapboxMap, times(2)).cancelTransitions();
verify(moveGestureDetector, times(1)).interrupt();
}

@Test
public void onMove_cancellingTransitionWhileBearing() {
MapboxMap mapboxMap = mock(MapboxMap.class);
MoveGestureDetector moveGestureDetector = mock(MoveGestureDetector.class);
LocationCameraController camera = buildCamera(mapboxMap);
camera.initializeOptions(mock(LocationComponentOptions.class));

camera.setCameraMode(CameraMode.NONE_COMPASS);
camera.onMoveListener.onMove(moveGestureDetector);
verify(mapboxMap, times(2)).cancelTransitions();
verify(moveGestureDetector, times(1)).interrupt();

// testing subsequent calls
camera.onMoveListener.onMove(moveGestureDetector);
verify(mapboxMap, times(2)).cancelTransitions();
verify(moveGestureDetector, times(1)).interrupt();
}

private LocationCameraController buildCamera(OnCameraTrackingChangedListener onCameraTrackingChangedListener) {
MapboxMap mapboxMap = mock(MapboxMap.class);
when(mapboxMap.getUiSettings()).thenReturn(mock(UiSettings.class));
Expand Down