summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukasz.paczos@mapbox.com>2018-10-03 11:11:44 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2018-10-03 12:51:27 +0200
commit7b572c4e1ac1ae7fdf7f58e5b116e9c9085ac3b5 (patch)
tree03f68f0bcac8efc3aef52bfbd4de0efe58b71f07
parent7b243392e366907b35f819ac2d416475287d74ea (diff)
downloadqtlocation-mapboxgl-upstream/backport-13011.tar.gz
- add configuration to change the animation duration multiplier when tracking locationupstream/backport-13011
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java9
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java3
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java57
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml3
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml3
5 files changed, 69 insertions, 6 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java
index b8baa0d497..789adbbaea 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java
@@ -41,6 +41,7 @@ final class LocationAnimatorCoordinator {
private float previousAccuracyRadius = -1;
private float previousCompassBearing = -1;
private long locationUpdateTimestamp = -1;
+ private float durationMultiplier;
void addLayerListener(MapboxAnimator.OnLayerAnimationsValuesChangeListener listener) {
layerListeners.add(listener);
@@ -222,8 +223,8 @@ final class LocationAnimatorCoordinator {
if (previousUpdateTimeStamp == 0) {
animationDuration = 0;
} else {
- animationDuration = (long) ((locationUpdateTimestamp - previousUpdateTimeStamp) * 1.1f)
- /*make animation slightly longer*/;
+ animationDuration = (long) ((locationUpdateTimestamp - previousUpdateTimeStamp) * durationMultiplier)
+ /* make animation slightly longer with durationMultiplier, defaults to 1.1f */;
}
animationDuration = Math.min(animationDuration, MAX_ANIMATION_DURATION_MS);
@@ -370,4 +371,8 @@ final class LocationAnimatorCoordinator {
animatorArray.put(animatorType, null);
}
}
+
+ void setTrackingAnimationDurationMultiplier(float trackingAnimationDurationMultiplier) {
+ this.durationMultiplier = trackingAnimationDurationMultiplier;
+ }
}
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 01ef314bf4..af48b5c4d4 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
@@ -345,6 +345,7 @@ public final class LocationComponent {
locationCameraController.initializeOptions(options);
staleStateManager.setEnabled(options.enableStaleState());
staleStateManager.setDelayTime(options.staleStateTimeout());
+ locationAnimatorCoordinator.setTrackingAnimationDurationMultiplier(options.trackingAnimationDurationMultiplier());
updateMapWithOptions(options);
}
@@ -769,9 +770,11 @@ public final class LocationComponent {
options);
locationCameraController = new LocationCameraController(
context, mapboxMap, cameraTrackingChangedListener, options, onCameraMoveInvalidateListener);
+
locationAnimatorCoordinator = new LocationAnimatorCoordinator();
locationAnimatorCoordinator.addLayerListener(locationLayerController);
locationAnimatorCoordinator.addCameraListener(locationCameraController);
+ locationAnimatorCoordinator.setTrackingAnimationDurationMultiplier(options.trackingAnimationDurationMultiplier());
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java
index 584d214f6e..10dfff8694 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java
@@ -74,6 +74,11 @@ public class LocationComponentOptions implements Parcelable {
*/
private static final long STALE_STATE_DELAY_MS = 30_000L;
+ /**
+ * Default animation duration multiplier
+ */
+ private static final float TRACKING_ANIMATION_DURATION_MULTIPLIER_DEFAULT = 1.1f;
+
private float accuracyAlpha;
private int accuracyColor;
private int backgroundDrawableStale;
@@ -105,6 +110,7 @@ public class LocationComponentOptions implements Parcelable {
private float trackingInitialMoveThreshold;
private float trackingMultiFingerMoveThreshold;
private String layerBelow;
+ private float trackingAnimationDurationMultiplier;
public LocationComponentOptions(
float accuracyAlpha,
@@ -137,7 +143,8 @@ public class LocationComponentOptions implements Parcelable {
boolean trackingGesturesManagement,
float trackingInitialMoveThreshold,
float trackingMultiFingerMoveThreshold,
- String layerBelow) {
+ String layerBelow,
+ float trackingAnimationDurationMultiplier) {
this.accuracyAlpha = accuracyAlpha;
this.accuracyColor = accuracyColor;
this.backgroundDrawableStale = backgroundDrawableStale;
@@ -172,6 +179,7 @@ public class LocationComponentOptions implements Parcelable {
this.trackingInitialMoveThreshold = trackingInitialMoveThreshold;
this.trackingMultiFingerMoveThreshold = trackingMultiFingerMoveThreshold;
this.layerBelow = layerBelow;
+ this.trackingAnimationDurationMultiplier = trackingAnimationDurationMultiplier;
}
/**
@@ -290,6 +298,12 @@ public class LocationComponentOptions implements Parcelable {
builder.minZoomIconScale(minScale);
builder.maxZoomIconScale(maxScale);
+ float trackingAnimationDurationMultiplier = typedArray.getFloat(
+ R.styleable.mapbox_LocationComponent_mapbox_trackingAnimationDurationMultiplier,
+ TRACKING_ANIMATION_DURATION_MULTIPLIER_DEFAULT
+ );
+ builder.trackingAnimationDurationMultiplier(trackingAnimationDurationMultiplier);
+
typedArray.recycle();
return builder.build();
@@ -699,6 +713,16 @@ public class LocationComponentOptions implements Parcelable {
return layerBelow;
}
+ /**
+ * Get the tracking animation duration multiplier.
+ *
+ * @return tracking animation duration multiplier
+ * @since 0.9.0
+ */
+ public float trackingAnimationDurationMultiplier() {
+ return trackingAnimationDurationMultiplier;
+ }
+
@Override
public String toString() {
return "LocationComponentOptions{"
@@ -733,6 +757,7 @@ public class LocationComponentOptions implements Parcelable {
+ "trackingInitialMoveThreshold=" + trackingInitialMoveThreshold + ", "
+ "trackingMultiFingerMoveThreshold=" + trackingMultiFingerMoveThreshold + ", "
+ "layerBelow=" + layerBelow
+ + "trackingAnimationDurationMultiplier=" + trackingAnimationDurationMultiplier
+ "}";
}
@@ -785,7 +810,9 @@ public class LocationComponentOptions implements Parcelable {
== Float.floatToIntBits(that.trackingInitialMoveThreshold()))
&& (Float.floatToIntBits(this.trackingMultiFingerMoveThreshold)
== Float.floatToIntBits(that.trackingMultiFingerMoveThreshold()))
- && layerBelow.equals(that.layerBelow));
+ && layerBelow.equals(that.layerBelow))
+ && (Float.floatToIntBits(this.trackingAnimationDurationMultiplier)
+ == Float.floatToIntBits(that.trackingAnimationDurationMultiplier()));
}
return false;
}
@@ -853,6 +880,8 @@ public class LocationComponentOptions implements Parcelable {
h$ ^= Float.floatToIntBits(trackingInitialMoveThreshold);
h$ *= 1000003;
h$ ^= Float.floatToIntBits(trackingMultiFingerMoveThreshold);
+ h$ *= 1000003;
+ h$ ^= Float.floatToIntBits(trackingAnimationDurationMultiplier);
return h$;
}
@@ -891,7 +920,8 @@ public class LocationComponentOptions implements Parcelable {
in.readInt() == 1,
in.readFloat(),
in.readFloat(),
- in.readString()
+ in.readString(),
+ in.readFloat()
);
}
@@ -989,6 +1019,7 @@ public class LocationComponentOptions implements Parcelable {
dest.writeFloat(trackingInitialMoveThreshold());
dest.writeFloat(trackingMultiFingerMoveThreshold());
dest.writeString(layerBelow());
+ dest.writeFloat(trackingAnimationDurationMultiplier);
}
@Override
@@ -1052,6 +1083,7 @@ public class LocationComponentOptions implements Parcelable {
private Float trackingInitialMoveThreshold;
private Float trackingMultiFingerMoveThreshold;
private String layerBelow;
+ private Float trackingAnimationDurationMultiplier;
Builder() {
}
@@ -1088,6 +1120,7 @@ public class LocationComponentOptions implements Parcelable {
this.trackingInitialMoveThreshold = source.trackingInitialMoveThreshold();
this.trackingMultiFingerMoveThreshold = source.trackingMultiFingerMoveThreshold();
this.layerBelow = source.layerBelow();
+ this.trackingAnimationDurationMultiplier = source.trackingAnimationDurationMultiplier();
}
/**
@@ -1511,6 +1544,18 @@ public class LocationComponentOptions implements Parcelable {
return this;
}
+ /**
+ * Sets the tracking animation duration multiplier.
+ *
+ * @param trackingAnimationDurationMultiplier the tracking animation duration multiplier
+ * @since 0.9.0
+ */
+ public LocationComponentOptions.Builder trackingAnimationDurationMultiplier(
+ float trackingAnimationDurationMultiplier) {
+ this.trackingAnimationDurationMultiplier = trackingAnimationDurationMultiplier;
+ return this;
+ }
+
LocationComponentOptions autoBuild() {
String missing = "";
if (this.accuracyAlpha == null) {
@@ -1570,6 +1615,9 @@ public class LocationComponentOptions implements Parcelable {
if (this.trackingMultiFingerMoveThreshold == null) {
missing += " trackingMultiFingerMoveThreshold";
}
+ if (this.trackingAnimationDurationMultiplier == null) {
+ missing += " trackingAnimationDurationMultiplier";
+ }
if (!missing.isEmpty()) {
throw new IllegalStateException("Missing required properties:" + missing);
}
@@ -1604,7 +1652,8 @@ public class LocationComponentOptions implements Parcelable {
trackingGesturesManagement,
this.trackingInitialMoveThreshold,
this.trackingMultiFingerMoveThreshold,
- this.layerBelow);
+ this.layerBelow,
+ this.trackingAnimationDurationMultiplier);
}
}
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml b/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
index b466ba02a3..730ab580d0 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
@@ -149,4 +149,7 @@
<!-- Camera tracking settings -->
<public name="mapbox_trackingInitialMoveThreshold" format="float" type="attr"/>
<public name="mapbox_trackingMultiFingerMoveThreshold" format="float" type="attr"/>
+
+ <!-- Animation duration multiplier -->
+ <public name="mapbox_trackingAnimationDurationMultiplier" format="float" type="attr" />
</resources>
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
index 83ee97519c..9f0ca86a86 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
@@ -175,5 +175,8 @@
<attr name="mapbox_trackingInitialMoveThreshold" format="dimension"/>
<attr name="mapbox_trackingMultiFingerMoveThreshold" format="dimension"/>
+ <!-- Animation duration multiplier -->
+ <attr name="mapbox_trackingAnimationDurationMultiplier" format="float" />
+
</declare-styleable>
</resources>