summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java437
1 files changed, 0 insertions, 437 deletions
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
deleted file mode 100644
index 79d2e02bf1..0000000000
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationCameraController.java
+++ /dev/null
@@ -1,437 +0,0 @@
-package com.mapbox.mapboxsdk.location;
-
-import android.content.Context;
-import android.graphics.PointF;
-import android.location.Location;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.view.MotionEvent;
-
-import com.mapbox.android.gestures.AndroidGesturesManager;
-import com.mapbox.android.gestures.MoveGestureDetector;
-import com.mapbox.android.gestures.RotateGestureDetector;
-import com.mapbox.mapboxsdk.camera.CameraPosition;
-import com.mapbox.mapboxsdk.camera.CameraUpdate;
-import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
-import com.mapbox.mapboxsdk.geometry.LatLng;
-import com.mapbox.mapboxsdk.location.modes.CameraMode;
-import com.mapbox.mapboxsdk.maps.MapboxMap;
-import com.mapbox.mapboxsdk.maps.Transform;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static com.mapbox.mapboxsdk.location.LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS;
-
-final class LocationCameraController {
-
- @CameraMode.Mode
- private int cameraMode;
-
- private final MapboxMap mapboxMap;
- private final Transform transform;
- private final OnCameraTrackingChangedListener internalCameraTrackingChangedListener;
- private LocationComponentOptions options;
- private boolean adjustFocalPoint;
-
- private final MoveGestureDetector moveGestureDetector;
- private final OnCameraMoveInvalidateListener onCameraMoveInvalidateListener;
-
- private final AndroidGesturesManager initialGesturesManager;
- private final AndroidGesturesManager internalGesturesManager;
-
- private boolean isTransitioning;
-
- LocationCameraController(
- Context context,
- MapboxMap mapboxMap,
- Transform transform,
- OnCameraTrackingChangedListener internalCameraTrackingChangedListener,
- @NonNull LocationComponentOptions options,
- OnCameraMoveInvalidateListener onCameraMoveInvalidateListener) {
- this.mapboxMap = mapboxMap;
- this.transform = transform;
-
- initialGesturesManager = mapboxMap.getGesturesManager();
- internalGesturesManager = new LocationGesturesManager(context);
- moveGestureDetector = internalGesturesManager.getMoveGestureDetector();
- mapboxMap.addOnRotateListener(onRotateListener);
- mapboxMap.addOnFlingListener(onFlingListener);
- mapboxMap.addOnMoveListener(onMoveListener);
-
- this.internalCameraTrackingChangedListener = internalCameraTrackingChangedListener;
- this.onCameraMoveInvalidateListener = onCameraMoveInvalidateListener;
- initializeOptions(options);
- }
-
- // Package private for testing purposes
- LocationCameraController(MapboxMap mapboxMap,
- Transform transform,
- MoveGestureDetector moveGestureDetector,
- OnCameraTrackingChangedListener internalCameraTrackingChangedListener,
- OnCameraMoveInvalidateListener onCameraMoveInvalidateListener,
- AndroidGesturesManager initialGesturesManager,
- AndroidGesturesManager internalGesturesManager) {
- this.mapboxMap = mapboxMap;
- this.transform = transform;
- this.moveGestureDetector = moveGestureDetector;
- this.internalCameraTrackingChangedListener = internalCameraTrackingChangedListener;
- this.onCameraMoveInvalidateListener = onCameraMoveInvalidateListener;
- this.internalGesturesManager = internalGesturesManager;
- this.initialGesturesManager = initialGesturesManager;
- }
-
- void initializeOptions(LocationComponentOptions options) {
- this.options = options;
- if (options.trackingGesturesManagement()) {
- if (mapboxMap.getGesturesManager() != internalGesturesManager) {
- mapboxMap.setGesturesManager(internalGesturesManager, true, true);
- }
- adjustGesturesThresholds();
- } else if (mapboxMap.getGesturesManager() != initialGesturesManager) {
- mapboxMap.setGesturesManager(initialGesturesManager, true, true);
- }
- }
-
- void setCameraMode(@CameraMode.Mode int cameraMode) {
- setCameraMode(cameraMode, null, TRANSITION_ANIMATION_DURATION_MS, null, null, null, null);
- }
-
- void setCameraMode(@CameraMode.Mode final int cameraMode, @Nullable Location lastLocation,
- long transitionDuration,
- @Nullable Double zoom, @Nullable Double bearing, @Nullable Double tilt,
- @Nullable OnLocationCameraTransitionListener internalTransitionListener) {
- if (this.cameraMode == cameraMode) {
- return;
- }
-
- final boolean wasTracking = isLocationTracking();
- this.cameraMode = cameraMode;
-
- if (cameraMode != CameraMode.NONE) {
- mapboxMap.cancelTransitions();
- }
-
- adjustGesturesThresholds();
- notifyCameraTrackingChangeListener(wasTracking);
- transitionToCurrentLocation(
- wasTracking, lastLocation, transitionDuration, zoom, bearing, tilt, internalTransitionListener);
- }
-
- /**
- * Initiates a camera animation to the current location if location tracking was engaged.
- * Notifies an internal listener when the transition's finished to invalidate animators and notify external listeners.
- */
- private void transitionToCurrentLocation(boolean wasTracking, Location lastLocation,
- long transitionDuration,
- Double zoom, Double bearing, Double tilt,
- final OnLocationCameraTransitionListener internalTransitionListener) {
- if (!wasTracking && isLocationTracking() && lastLocation != null) {
- isTransitioning = true;
- LatLng target = new LatLng(lastLocation);
-
- CameraPosition.Builder builder = new CameraPosition.Builder().target(target);
- if (zoom != null) {
- builder.zoom(zoom);
- }
- if (tilt != null) {
- builder.tilt(tilt);
- }
- if (bearing != null) {
- builder.bearing(bearing);
- } else {
- if (isLocationBearingTracking()) {
- builder.bearing(cameraMode == CameraMode.TRACKING_GPS_NORTH ? 0 : lastLocation.getBearing());
- }
- }
-
- CameraUpdate update = CameraUpdateFactory.newCameraPosition(builder.build());
- MapboxMap.CancelableCallback callback = new MapboxMap.CancelableCallback() {
- @Override
- public void onCancel() {
- isTransitioning = false;
- if (internalTransitionListener != null) {
- internalTransitionListener.onLocationCameraTransitionCanceled(cameraMode);
- }
- }
-
- @Override
- public void onFinish() {
- isTransitioning = false;
- if (internalTransitionListener != null) {
- internalTransitionListener.onLocationCameraTransitionFinished(cameraMode);
- }
- }
- };
-
- CameraPosition currentPosition = mapboxMap.getCameraPosition();
- if (Utils.immediateAnimation(mapboxMap.getProjection(), currentPosition.target, target)) {
- transform.moveCamera(
- mapboxMap,
- update,
- callback);
- } else {
- transform.animateCamera(
- mapboxMap,
- update,
- (int) transitionDuration,
- callback);
- }
- } else {
- if (internalTransitionListener != null) {
- internalTransitionListener.onLocationCameraTransitionFinished(cameraMode);
- }
- }
- }
-
- int getCameraMode() {
- return cameraMode;
- }
-
- private void setBearing(float bearing) {
- if (isTransitioning) {
- return;
- }
-
- transform.moveCamera(mapboxMap, CameraUpdateFactory.bearingTo(bearing), null);
- onCameraMoveInvalidateListener.onInvalidateCameraMove();
- }
-
- private void setLatLng(@NonNull LatLng latLng) {
- if (isTransitioning) {
- return;
- }
-
- transform.moveCamera(mapboxMap, CameraUpdateFactory.newLatLng(latLng), null);
- onCameraMoveInvalidateListener.onInvalidateCameraMove();
-
- if (adjustFocalPoint) {
- PointF focalPoint = mapboxMap.getProjection().toScreenLocation(latLng);
- mapboxMap.getUiSettings().setFocalPoint(focalPoint);
- adjustFocalPoint = false;
- }
- }
-
- private void setZoom(float zoom) {
- if (isTransitioning) {
- return;
- }
-
- transform.moveCamera(mapboxMap, CameraUpdateFactory.zoomTo(zoom), null);
- onCameraMoveInvalidateListener.onInvalidateCameraMove();
- }
-
- private void setTilt(float tilt) {
- if (isTransitioning) {
- return;
- }
-
- transform.moveCamera(mapboxMap, CameraUpdateFactory.tiltTo(tilt), null);
- onCameraMoveInvalidateListener.onInvalidateCameraMove();
- }
-
- private final MapboxAnimator.AnimationsValueChangeListener<LatLng> latLngValueListener =
- new MapboxAnimator.AnimationsValueChangeListener<LatLng>() {
- @Override
- public void onNewAnimationValue(LatLng value) {
- setLatLng(value);
- }
- };
-
- private final MapboxAnimator.AnimationsValueChangeListener<Float> gpsBearingValueListener =
- new MapboxAnimator.AnimationsValueChangeListener<Float>() {
- @Override
- public void onNewAnimationValue(Float value) {
- boolean trackingNorth = cameraMode == CameraMode.TRACKING_GPS_NORTH
- && mapboxMap.getCameraPosition().bearing == 0;
-
- if (!trackingNorth) {
- setBearing(value);
- }
- }
- };
-
- private final MapboxAnimator.AnimationsValueChangeListener<Float> compassBearingValueListener =
- new MapboxAnimator.AnimationsValueChangeListener<Float>() {
- @Override
- public void onNewAnimationValue(Float value) {
- if (cameraMode == CameraMode.TRACKING_COMPASS
- || cameraMode == CameraMode.NONE_COMPASS) {
- setBearing(value);
- }
- }
- };
-
- private final MapboxAnimator.AnimationsValueChangeListener<Float> zoomValueListener =
- new MapboxAnimator.AnimationsValueChangeListener<Float>() {
- @Override
- public void onNewAnimationValue(Float value) {
- setZoom(value);
- }
- };
-
- private final MapboxAnimator.AnimationsValueChangeListener<Float> tiltValueListener =
- new MapboxAnimator.AnimationsValueChangeListener<Float>() {
- @Override
- public void onNewAnimationValue(Float value) {
- setTilt(value);
- }
- };
-
- Set<AnimatorListenerHolder> getAnimationListeners() {
- Set<AnimatorListenerHolder> holders = new HashSet<>();
- if (isLocationTracking()) {
- holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_CAMERA_LATLNG, latLngValueListener));
- }
-
- if (isLocationBearingTracking()) {
- holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_CAMERA_GPS_BEARING, gpsBearingValueListener));
- }
-
- if (isConsumingCompass()) {
- holders.add(new AnimatorListenerHolder(
- MapboxAnimator.ANIMATOR_CAMERA_COMPASS_BEARING,
- compassBearingValueListener));
- }
-
- holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_ZOOM, zoomValueListener));
- holders.add(new AnimatorListenerHolder(MapboxAnimator.ANIMATOR_TILT, tiltValueListener));
- return holders;
- }
-
- boolean isTransitioning() {
- return isTransitioning;
- }
-
- private void adjustGesturesThresholds() {
- if (options.trackingGesturesManagement()) {
- if (isLocationTracking()) {
- adjustFocalPoint = true;
- moveGestureDetector.setMoveThreshold(options.trackingInitialMoveThreshold());
- } else {
- moveGestureDetector.setMoveThreshold(0f);
- }
- }
- }
-
- boolean isConsumingCompass() {
- return cameraMode == CameraMode.TRACKING_COMPASS
- || cameraMode == CameraMode.NONE_COMPASS;
- }
-
- private boolean isLocationTracking() {
- return cameraMode == CameraMode.TRACKING
- || cameraMode == CameraMode.TRACKING_COMPASS
- || cameraMode == CameraMode.TRACKING_GPS
- || cameraMode == CameraMode.TRACKING_GPS_NORTH;
- }
-
- private boolean isBearingTracking() {
- return cameraMode == CameraMode.NONE_COMPASS
- || cameraMode == CameraMode.TRACKING_COMPASS
- || cameraMode == CameraMode.NONE_GPS
- || cameraMode == CameraMode.TRACKING_GPS
- || cameraMode == CameraMode.TRACKING_GPS_NORTH;
- }
-
- private boolean isLocationBearingTracking() {
- return cameraMode == CameraMode.TRACKING_GPS
- || cameraMode == CameraMode.TRACKING_GPS_NORTH
- || cameraMode == CameraMode.NONE_GPS;
- }
-
- private void notifyCameraTrackingChangeListener(boolean wasTracking) {
- internalCameraTrackingChangedListener.onCameraTrackingChanged(cameraMode);
- if (wasTracking && !isLocationTracking()) {
- mapboxMap.getUiSettings().setFocalPoint(null);
- internalCameraTrackingChangedListener.onCameraTrackingDismissed();
- }
- }
-
- @NonNull
- @VisibleForTesting
- MapboxMap.OnMoveListener onMoveListener = new MapboxMap.OnMoveListener() {
- private boolean interrupt;
-
- @Override
- public void onMoveBegin(@NonNull MoveGestureDetector detector) {
- if (options.trackingGesturesManagement()
- && detector.getPointersCount() > 1
- && detector.getMoveThreshold() != options.trackingMultiFingerMoveThreshold()
- && isLocationTracking()) {
- detector.setMoveThreshold(options.trackingMultiFingerMoveThreshold());
- interrupt = true;
- } else {
- setCameraMode(CameraMode.NONE);
- }
- }
-
- @Override
- public void onMove(@NonNull MoveGestureDetector detector) {
- if (interrupt) {
- detector.interrupt();
- return;
- }
-
- if (isLocationTracking() || isBearingTracking()) {
- setCameraMode(CameraMode.NONE);
- detector.interrupt();
- }
- }
-
- @Override
- public void onMoveEnd(@NonNull MoveGestureDetector detector) {
- if (options.trackingGesturesManagement() && !interrupt && isLocationTracking()) {
- detector.setMoveThreshold(options.trackingInitialMoveThreshold());
- }
- interrupt = false;
- }
- };
-
- @NonNull
- private MapboxMap.OnRotateListener onRotateListener = new MapboxMap.OnRotateListener() {
- @Override
- public void onRotateBegin(@NonNull RotateGestureDetector detector) {
- if (isBearingTracking()) {
- setCameraMode(CameraMode.NONE);
- }
- }
-
- @Override
- public void onRotate(@NonNull RotateGestureDetector detector) {
- // no implementation
- }
-
- @Override
- public void onRotateEnd(@NonNull RotateGestureDetector detector) {
- // no implementation
- }
- };
-
- @NonNull
- private MapboxMap.OnFlingListener onFlingListener = new MapboxMap.OnFlingListener() {
- @Override
- public void onFling() {
- setCameraMode(CameraMode.NONE);
- }
- };
-
- private class LocationGesturesManager extends AndroidGesturesManager {
-
- LocationGesturesManager(Context context) {
- super(context);
- }
-
- @Override
- public boolean onTouchEvent(@Nullable MotionEvent motionEvent) {
- if (motionEvent != null) {
- int action = motionEvent.getActionMasked();
- if (action == MotionEvent.ACTION_UP) {
- adjustGesturesThresholds();
- }
- }
- return super.onTouchEvent(motionEvent);
- }
- }
-} \ No newline at end of file