summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-11-14 10:37:34 +0100
committerGitHub <noreply@github.com>2016-11-14 10:37:34 +0100
commitfa6d5864177bfb68e99f8732068a3402cc5aadfd (patch)
treec1e498a0858795e2eb2c7c7cf5d3c46c54503ebc
parenta7fa97e8a36bec7c5d6ec5ae43203012e3357cd9 (diff)
downloadqtlocation-mapboxgl-fa6d5864177bfb68e99f8732068a3402cc5aadfd.tar.gz
[android] - allow using rotate gesture when not tracking user location, correctly update bearing during rotation gesture (#6978)
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java21
2 files changed, 14 insertions, 9 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
index 474af19853..c32d4a8906 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
@@ -199,7 +199,7 @@ public class TrackingSettings {
// The user settings are enabled AND;
// EITHER bearing tracking is dismissed on gesture OR there is no bearing tracking
return uiSettings.isRotateGesturesEnabled() &&
- (dismissBearingTrackingOnGesture || myBearingTrackingMode == MyBearingTracking.NONE);
+ (dismissBearingTrackingOnGesture || myBearingTrackingMode == MyBearingTracking.NONE || (myLocationTrackingMode == MyLocationTracking.TRACKING_NONE));
}
/**
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
index 15733eb93c..9d3c21c6e6 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
@@ -92,8 +92,9 @@ public class MyLocationView extends View {
private PointF screenLocation;
// camera vars
- private double bearing;
private double tilt;
+ private double bearing;
+ private float magneticHeading;
// Controls the compass update rate in milliseconds
private static final int COMPASS_UPDATE_RATE_MS = 500;
@@ -314,6 +315,13 @@ public class MyLocationView extends View {
public void setBearing(double bearing) {
this.bearing = bearing;
+ if (myLocationTrackingMode == MyLocationTracking.TRACKING_NONE) {
+ if (myBearingTrackingMode == MyBearingTracking.GPS) {
+ setCompass(location.getBearing() - bearing);
+ } else if (myBearingTrackingMode == MyBearingTracking.COMPASS) {
+ setCompass(magneticHeading - bearing);
+ }
+ }
}
public void setCameraPosition(CameraPosition position) {
@@ -451,6 +459,8 @@ public class MyLocationView extends View {
if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) {
// always face north
setCompass(0);
+ } else {
+ myLocationBehavior.invalidate();
}
}
invalidate();
@@ -572,14 +582,14 @@ public class MyLocationView extends View {
SensorManager.getRotationMatrixFromVector(matrix, event.values);
SensorManager.getOrientation(matrix, orientation);
- float magneticHeading = (float) Math.toDegrees(SensorManager.getOrientation(matrix, orientation)[0]);
+ magneticHeading = (float) Math.toDegrees(SensorManager.getOrientation(matrix, orientation)[0]);
if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) {
// Change the user location view orientation to reflect the device orientation
rotateCamera(magneticHeading);
setCompass(0);
} else {
// Change compass direction
- setCompass(magneticHeading);
+ setCompass(magneticHeading - bearing);
}
compassUpdateNextTimestamp = currentTime + COMPASS_UPDATE_RATE_MS;
@@ -730,11 +740,6 @@ public class MyLocationView extends View {
// update LatLng location
LatLng newLocation = new LatLng(location);
- // update LatLng direction
- if (myBearingTrackingMode == MyBearingTracking.GPS && location.hasBearing()) {
- setCompass(location.getBearing() + bearing);
- }
-
// update LatLng accuracy
updateAccuracy(location);