summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukasz.paczos@mapbox.com>2018-12-13 16:26:25 +0100
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2018-12-19 15:15:01 +0100
commit284701c294746e0540536a45cc3a5538549e0191 (patch)
tree1d4bf865ce217a7acaa2bd74cea618edde2c01a6
parent35c738e18d58271254200f5af28edb2c2fd43673 (diff)
downloadqtlocation-mapboxgl-284701c294746e0540536a45cc3a5538549e0191.tar.gz
[android] option to disable smooth animation of compass and accuracy values
(cherry picked from commit 9064c8e)
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java43
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java7
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentConstants.java2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentOptions.java76
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimatorSetProvider.java32
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml6
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml6
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt62
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/styles.xml2
9 files changed, 202 insertions, 34 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 326c258e80..4ac124ef24 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
@@ -1,7 +1,6 @@
package com.mapbox.mapboxsdk.location;
import android.animation.Animator;
-import android.animation.AnimatorSet;
import android.location.Location;
import android.os.SystemClock;
import android.support.annotation.NonNull;
@@ -20,7 +19,6 @@ import java.util.List;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.ACCURACY_RADIUS_ANIMATION_DURATION;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.COMPASS_UPDATE_RATE_MS;
-import static com.mapbox.mapboxsdk.location.LocationComponentConstants.INSTANT_LOCATION_TRANSITION_THRESHOLD;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.MAX_ANIMATION_DURATION_MS;
import static com.mapbox.mapboxsdk.location.LocationComponentConstants.TRANSITION_ANIMATION_DURATION_MS;
import static com.mapbox.mapboxsdk.location.MapboxAnimator.ANIMATOR_CAMERA_COMPASS_BEARING;
@@ -47,9 +45,13 @@ final class LocationAnimatorCoordinator {
private float previousCompassBearing = -1;
private long locationUpdateTimestamp = -1;
private float durationMultiplier;
+ private final MapboxAnimatorSetProvider animatorSetProvider;
+ private boolean compassAnimationEnabled;
+ private boolean accuracyAnimationEnabled;
- LocationAnimatorCoordinator(Projection projection) {
+ LocationAnimatorCoordinator(@NonNull Projection projection, @NonNull MapboxAnimatorSetProvider animatorSetProvider) {
this.projection = projection;
+ this.animatorSetProvider = animatorSetProvider;
}
void addLayerListener(MapboxAnimator.OnLayerAnimationsValuesChangeListener listener) {
@@ -104,7 +106,7 @@ final class LocationAnimatorCoordinator {
float previousCameraBearing = (float) currentCameraPosition.bearing;
updateCompassAnimators(targetCompassBearing, previousLayerBearing, previousCameraBearing);
- playCompassAnimators(COMPASS_UPDATE_RATE_MS);
+ playCompassAnimators(compassAnimationEnabled ? COMPASS_UPDATE_RATE_MS : 0);
previousCompassBearing = targetCompassBearing;
}
@@ -116,7 +118,7 @@ final class LocationAnimatorCoordinator {
float previousAccuracyRadius = getPreviousAccuracyRadius();
updateAccuracyAnimators(targetAccuracyRadius, previousAccuracyRadius);
- playAccuracyAnimator(noAnimation ? 0 : ACCURACY_RADIUS_ANIMATION_DURATION);
+ playAccuracyAnimator(noAnimation || !accuracyAnimationEnabled ? 0 : ACCURACY_RADIUS_ANIMATION_DURATION);
this.previousAccuracyRadius = targetAccuracyRadius;
}
@@ -256,27 +258,20 @@ final class LocationAnimatorCoordinator {
locationAnimators.add(animatorArray.get(ANIMATOR_LAYER_GPS_BEARING));
locationAnimators.add(animatorArray.get(ANIMATOR_CAMERA_LATLNG));
locationAnimators.add(animatorArray.get(ANIMATOR_CAMERA_GPS_BEARING));
- AnimatorSet locationAnimatorSet = new AnimatorSet();
- locationAnimatorSet.playTogether(locationAnimators);
- locationAnimatorSet.setInterpolator(new LinearInterpolator());
- locationAnimatorSet.setDuration(duration);
- locationAnimatorSet.start();
+ animatorSetProvider.startAnimation(locationAnimators, new LinearInterpolator(), duration);
}
private void playCompassAnimators(long duration) {
List<Animator> compassAnimators = new ArrayList<>();
compassAnimators.add(animatorArray.get(ANIMATOR_LAYER_COMPASS_BEARING));
compassAnimators.add(animatorArray.get(ANIMATOR_CAMERA_COMPASS_BEARING));
- AnimatorSet compassAnimatorSet = new AnimatorSet();
- compassAnimatorSet.playTogether(compassAnimators);
- compassAnimatorSet.setDuration(duration);
- compassAnimatorSet.start();
+ animatorSetProvider.startAnimation(compassAnimators, new LinearInterpolator(), duration);
}
private void playAccuracyAnimator(long duration) {
- MapboxAnimator animator = animatorArray.get(ANIMATOR_LAYER_ACCURACY);
- animator.setDuration(duration);
- animator.start();
+ List<Animator> accuracyAnimators = new ArrayList<>();
+ accuracyAnimators.add(animatorArray.get(ANIMATOR_LAYER_ACCURACY));
+ animatorSetProvider.startAnimation(accuracyAnimators, new LinearInterpolator(), duration);
}
private void playZoomAnimator(long duration) {
@@ -295,11 +290,7 @@ final class LocationAnimatorCoordinator {
List<Animator> locationAnimators = new ArrayList<>();
locationAnimators.add(animatorArray.get(ANIMATOR_CAMERA_LATLNG));
locationAnimators.add(animatorArray.get(ANIMATOR_CAMERA_GPS_BEARING));
- AnimatorSet locationAnimatorSet = new AnimatorSet();
- locationAnimatorSet.playTogether(locationAnimators);
- locationAnimatorSet.setInterpolator(new FastOutSlowInInterpolator());
- locationAnimatorSet.setDuration(duration);
- locationAnimatorSet.start();
+ animatorSetProvider.startAnimation(locationAnimators, new FastOutSlowInInterpolator(), duration);
}
void resetAllCameraAnimations(CameraPosition currentCameraPosition, boolean isGpsNorth) {
@@ -388,4 +379,12 @@ final class LocationAnimatorCoordinator {
void setTrackingAnimationDurationMultiplier(float trackingAnimationDurationMultiplier) {
this.durationMultiplier = trackingAnimationDurationMultiplier;
}
+
+ void setCompassAnimationEnabled(boolean compassAnimationEnabled) {
+ this.compassAnimationEnabled = compassAnimationEnabled;
+ }
+
+ void setAccuracyAnimationEnabled(boolean accuracyAnimationEnabled) {
+ this.accuracyAnimationEnabled = accuracyAnimationEnabled;
+ }
}
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 6f465cc777..e624378487 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
@@ -369,6 +369,8 @@ public final class LocationComponent {
staleStateManager.setEnabled(options.enableStaleState());
staleStateManager.setDelayTime(options.staleStateTimeout());
locationAnimatorCoordinator.setTrackingAnimationDurationMultiplier(options.trackingAnimationDurationMultiplier());
+ locationAnimatorCoordinator.setCompassAnimationEnabled(options.compassAnimationEnabled());
+ locationAnimatorCoordinator.setAccuracyAnimationEnabled(options.accuracyAnimationEnabled());
updateMapWithOptions(options);
}
@@ -806,7 +808,10 @@ public final class LocationComponent {
locationCameraController = new LocationCameraController(
context, mapboxMap, cameraTrackingChangedListener, options, onCameraMoveInvalidateListener);
- locationAnimatorCoordinator = new LocationAnimatorCoordinator(mapboxMap.getProjection());
+ locationAnimatorCoordinator = new LocationAnimatorCoordinator(
+ mapboxMap.getProjection(),
+ MapboxAnimatorSetProvider.getInstance()
+ );
locationAnimatorCoordinator.addLayerListener(locationLayerController);
locationAnimatorCoordinator.addCameraListener(locationCameraController);
locationAnimatorCoordinator.setTrackingAnimationDurationMultiplier(options.trackingAnimationDurationMultiplier());
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentConstants.java
index 6ea246f311..135534460a 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentConstants.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponentConstants.java
@@ -6,7 +6,7 @@ package com.mapbox.mapboxsdk.location;
final class LocationComponentConstants {
// Controls the compass update rate in milliseconds
- static final int COMPASS_UPDATE_RATE_MS = 500;
+ static final long COMPASS_UPDATE_RATE_MS = 500;
// Sets the transition animation duration when switching camera modes.
static final long TRANSITION_ANIMATION_DURATION_MS = 750;
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 10dfff8694..58b86c7b3a 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
@@ -111,6 +111,8 @@ public class LocationComponentOptions implements Parcelable {
private float trackingMultiFingerMoveThreshold;
private String layerBelow;
private float trackingAnimationDurationMultiplier;
+ private boolean compassAnimationEnabled;
+ private boolean accuracyAnimationEnabled;
public LocationComponentOptions(
float accuracyAlpha,
@@ -144,7 +146,9 @@ public class LocationComponentOptions implements Parcelable {
float trackingInitialMoveThreshold,
float trackingMultiFingerMoveThreshold,
String layerBelow,
- float trackingAnimationDurationMultiplier) {
+ float trackingAnimationDurationMultiplier,
+ boolean compassAnimationEnabled,
+ boolean accuracyAnimationEnabled) {
this.accuracyAlpha = accuracyAlpha;
this.accuracyColor = accuracyColor;
this.backgroundDrawableStale = backgroundDrawableStale;
@@ -180,6 +184,8 @@ public class LocationComponentOptions implements Parcelable {
this.trackingMultiFingerMoveThreshold = trackingMultiFingerMoveThreshold;
this.layerBelow = layerBelow;
this.trackingAnimationDurationMultiplier = trackingAnimationDurationMultiplier;
+ this.compassAnimationEnabled = compassAnimationEnabled;
+ this.accuracyAnimationEnabled = accuracyAnimationEnabled;
}
/**
@@ -304,6 +310,14 @@ public class LocationComponentOptions implements Parcelable {
);
builder.trackingAnimationDurationMultiplier(trackingAnimationDurationMultiplier);
+ builder.compassAnimationEnabled = typedArray.getBoolean(
+ R.styleable.mapbox_LocationComponent_mapbox_compassAnimationEnabled, true
+ );
+
+ builder.accuracyAnimationEnabled = typedArray.getBoolean(
+ R.styleable.mapbox_LocationComponent_mapbox_accuracyAnimationEnabled, true
+ );
+
typedArray.recycle();
return builder.build();
@@ -723,6 +737,26 @@ public class LocationComponentOptions implements Parcelable {
return trackingAnimationDurationMultiplier;
}
+ /**
+ * Enable or disable smooth animation of compass values for {@link com.mapbox.mapboxsdk.location.modes.CameraMode}
+ * and {@link com.mapbox.mapboxsdk.location.modes.RenderMode}.
+ *
+ * @return whether smooth compass animation is enabled
+ */
+ public boolean compassAnimationEnabled() {
+ return compassAnimationEnabled;
+ }
+
+ /**
+ * Enable or disable smooth animation of the accuracy circle around the user's position.
+ *
+ * @return whether smooth animation of the accuracy circle is enabled
+ */
+ public boolean accuracyAnimationEnabled() {
+ return accuracyAnimationEnabled;
+ }
+
+ @NonNull
@Override
public String toString() {
return "LocationComponentOptions{"
@@ -882,6 +916,10 @@ public class LocationComponentOptions implements Parcelable {
h$ ^= Float.floatToIntBits(trackingMultiFingerMoveThreshold);
h$ *= 1000003;
h$ ^= Float.floatToIntBits(trackingAnimationDurationMultiplier);
+ h$ *= 1000003;
+ h$ ^= compassAnimationEnabled ? 1231 : 1237;
+ h$ *= 1000003;
+ h$ ^= accuracyAnimationEnabled ? 1231 : 1237;
return h$;
}
@@ -921,7 +959,9 @@ public class LocationComponentOptions implements Parcelable {
in.readFloat(),
in.readFloat(),
in.readString(),
- in.readFloat()
+ in.readFloat(),
+ in.readInt() == 1,
+ in.readInt() == 1
);
}
@@ -1020,6 +1060,8 @@ public class LocationComponentOptions implements Parcelable {
dest.writeFloat(trackingMultiFingerMoveThreshold());
dest.writeString(layerBelow());
dest.writeFloat(trackingAnimationDurationMultiplier);
+ dest.writeInt(compassAnimationEnabled() ? 1 : 0);
+ dest.writeInt(accuracyAnimationEnabled() ? 1 : 0);
}
@Override
@@ -1084,6 +1126,8 @@ public class LocationComponentOptions implements Parcelable {
private Float trackingMultiFingerMoveThreshold;
private String layerBelow;
private Float trackingAnimationDurationMultiplier;
+ private Boolean compassAnimationEnabled;
+ private Boolean accuracyAnimationEnabled;
Builder() {
}
@@ -1121,6 +1165,8 @@ public class LocationComponentOptions implements Parcelable {
this.trackingMultiFingerMoveThreshold = source.trackingMultiFingerMoveThreshold();
this.layerBelow = source.layerBelow();
this.trackingAnimationDurationMultiplier = source.trackingAnimationDurationMultiplier();
+ this.compassAnimationEnabled = source.compassAnimationEnabled();
+ this.accuracyAnimationEnabled = source.accuracyAnimationEnabled();
}
/**
@@ -1556,6 +1602,28 @@ public class LocationComponentOptions implements Parcelable {
return this;
}
+ /**
+ * Enable or disable smooth animation of compass values for {@link com.mapbox.mapboxsdk.location.modes.CameraMode}
+ * and {@link com.mapbox.mapboxsdk.location.modes.RenderMode}.
+ *
+ * @return whether smooth compass animation is enabled
+ */
+ public LocationComponentOptions.Builder compassAnimationEnabled(Boolean compassAnimationEnabled) {
+ this.compassAnimationEnabled = compassAnimationEnabled;
+ return this;
+ }
+
+ /**
+ * Enable or disable smooth animation of the accuracy circle around the user's position.
+ *
+ * @return whether smooth animation of the accuracy circle is enabled
+ */
+ public Builder accuracyAnimationEnabled(Boolean accuracyAnimationEnabled) {
+ this.accuracyAnimationEnabled = accuracyAnimationEnabled;
+ return this;
+ }
+
+ @Nullable
LocationComponentOptions autoBuild() {
String missing = "";
if (this.accuracyAlpha == null) {
@@ -1653,7 +1721,9 @@ public class LocationComponentOptions implements Parcelable {
this.trackingInitialMoveThreshold,
this.trackingMultiFingerMoveThreshold,
this.layerBelow,
- this.trackingAnimationDurationMultiplier);
+ this.trackingAnimationDurationMultiplier,
+ this.compassAnimationEnabled,
+ this.accuracyAnimationEnabled);
}
}
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimatorSetProvider.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimatorSetProvider.java
new file mode 100644
index 0000000000..1d09f8ae71
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimatorSetProvider.java
@@ -0,0 +1,32 @@
+package com.mapbox.mapboxsdk.location;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+import android.support.annotation.NonNull;
+import android.view.animation.Interpolator;
+
+import java.util.List;
+
+class MapboxAnimatorSetProvider {
+ private static MapboxAnimatorSetProvider instance;
+
+ private MapboxAnimatorSetProvider() {
+ // private constructor
+ }
+
+ static MapboxAnimatorSetProvider getInstance() {
+ if (instance == null) {
+ instance = new MapboxAnimatorSetProvider();
+ }
+ return instance;
+ }
+
+ void startAnimation(@NonNull List<Animator> animators, @NonNull Interpolator interpolator,
+ long duration) {
+ AnimatorSet locationAnimatorSet = new AnimatorSet();
+ locationAnimatorSet.playTogether(animators);
+ locationAnimatorSet.setInterpolator(interpolator);
+ locationAnimatorSet.setDuration(duration);
+ locationAnimatorSet.start();
+ }
+}
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 730ab580d0..4e9d1c5d8d 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
@@ -152,4 +152,10 @@
<!-- Animation duration multiplier -->
<public name="mapbox_trackingAnimationDurationMultiplier" format="float" type="attr" />
+
+ <!-- Compass animation -->
+ <public name="mapbox_compassAnimationEnabled" format="boolean" type="attr" />
+
+ <!-- Accuracy animation-->
+ <public name="mapbox_accuracyAnimationEnabled" format="boolean" 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 9f0ca86a86..ed2dbe01df 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
@@ -178,5 +178,11 @@
<!-- Animation duration multiplier -->
<attr name="mapbox_trackingAnimationDurationMultiplier" format="float" />
+ <!-- Compass animation -->
+ <attr name="mapbox_compassAnimationEnabled" format="boolean" />
+
+ <!-- Accuracy animation-->
+ <attr name="mapbox_accuracyAnimationEnabled" format="boolean" />
+
</declare-styleable>
</resources>
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt
index fad71237ab..7c75a8cb75 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt
@@ -1,6 +1,8 @@
package com.mapbox.mapboxsdk.location
+import android.animation.Animator
import android.location.Location
+import android.view.animation.LinearInterpolator
import com.mapbox.mapboxsdk.camera.CameraPosition
import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.location.LocationComponentConstants.DEFAULT_TRACKING_TILT_ANIM_DURATION
@@ -12,8 +14,11 @@ import junit.framework.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.eq
import org.mockito.Mockito
import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
import org.robolectric.RobolectricTestRunner
@RunWith(RobolectricTestRunner::class)
@@ -22,9 +27,12 @@ class LocationAnimatorCoordinatorTest {
private lateinit var locationAnimatorCoordinator: LocationAnimatorCoordinator
private val cameraPosition: CameraPosition = CameraPosition.DEFAULT
+ private lateinit var animatorSetProvider: MapboxAnimatorSetProvider
+
@Before
fun setUp() {
- locationAnimatorCoordinator = LocationAnimatorCoordinator(mock(Projection::class.java))
+ animatorSetProvider = mock(MapboxAnimatorSetProvider::class.java)
+ locationAnimatorCoordinator = LocationAnimatorCoordinator(mock(Projection::class.java), animatorSetProvider)
}
@Test
@@ -127,9 +135,6 @@ class LocationAnimatorCoordinatorTest {
val layerAccuracy = locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_ACCURACY]?.target as Float
assertEquals(layerAccuracy, accuracy)
-
- val animationDuration = locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_ACCURACY]?.duration as Long
- assertEquals(LocationComponentConstants.ACCURACY_RADIUS_ANIMATION_DURATION, animationDuration)
}
@Test
@@ -146,9 +151,6 @@ class LocationAnimatorCoordinatorTest {
val layerAccuracy = locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_ACCURACY]?.target as Float
assertEquals(layerAccuracy, accuracy)
-
- val animationDuration = locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_ACCURACY]?.duration as Long
- assertEquals(0L, animationDuration)
}
@Test
@@ -283,4 +285,50 @@ class LocationAnimatorCoordinatorTest {
assertTrue(locationAnimatorCoordinator.cameraListeners.isEmpty())
}
+
+ @Test
+ fun feedNewCompassBearing_withAnimation() {
+ locationAnimatorCoordinator.setCompassAnimationEnabled(true)
+ locationAnimatorCoordinator.feedNewCompassBearing(77f, cameraPosition)
+
+ val animators = mutableListOf<Animator>(
+ locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_COMPASS_BEARING],
+ locationAnimatorCoordinator.animatorArray[ANIMATOR_CAMERA_COMPASS_BEARING])
+
+ verify(animatorSetProvider).startAnimation(eq(animators), any(LinearInterpolator::class.java), eq(LocationComponentConstants.COMPASS_UPDATE_RATE_MS))
+ }
+
+ @Test
+ fun feedNewCompassBearing_withoutAnimation() {
+ locationAnimatorCoordinator.setCompassAnimationEnabled(false)
+ locationAnimatorCoordinator.feedNewCompassBearing(77f, cameraPosition)
+
+ val animators = mutableListOf<Animator>(
+ locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_COMPASS_BEARING],
+ locationAnimatorCoordinator.animatorArray[ANIMATOR_CAMERA_COMPASS_BEARING])
+
+ verify(animatorSetProvider).startAnimation(eq(animators), any(LinearInterpolator::class.java), eq(0L))
+ }
+
+ @Test
+ fun feedNewAccuracy_withAnimation() {
+ locationAnimatorCoordinator.setAccuracyAnimationEnabled(true)
+ locationAnimatorCoordinator.feedNewAccuracyRadius(150f, false)
+
+ val animators = mutableListOf<Animator>(
+ locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_ACCURACY])
+
+ verify(animatorSetProvider).startAnimation(eq(animators), any(LinearInterpolator::class.java), eq(LocationComponentConstants.ACCURACY_RADIUS_ANIMATION_DURATION))
+ }
+
+ @Test
+ fun feedNewAccuracy_withoutAnimation() {
+ locationAnimatorCoordinator.setAccuracyAnimationEnabled(false)
+ locationAnimatorCoordinator.feedNewAccuracyRadius(150f, false)
+
+ val animators = mutableListOf<Animator>(
+ locationAnimatorCoordinator.animatorArray[ANIMATOR_LAYER_ACCURACY])
+
+ verify(animatorSetProvider).startAnimation(eq(animators), any(LinearInterpolator::class.java), eq(0L))
+ }
} \ No newline at end of file
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/styles.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/styles.xml
index a0525171a5..faa994e978 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/styles.xml
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/styles.xml
@@ -48,6 +48,8 @@
<item name="mapbox_accuracyColor">#FF82C6</item>
<item name="mapbox_elevation">0dp</item>
+ <item name="mapbox_compassAnimationEnabled">false</item>
+ <item name="mapbox_accuracyAnimationEnabled">false</item>
</style>
</resources>