summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-06-21 14:20:29 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-06-24 11:37:21 +0200
commitfe570fb206515866906d6d0527eba7eb7bb0dbfd (patch)
tree72ff664e99263ad4e89330258ab6e7407234bb57
parente60b48eca9e752a09e54d4b1277ac1ab6aec5629 (diff)
downloadqtlocation-mapboxgl-fe570fb206515866906d6d0527eba7eb7bb0dbfd.tar.gz
[android] reset location layer animators when render mode changes
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java28
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java11
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinatorTest.kt6
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt55
4 files changed, 96 insertions, 4 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 50bbb7acfc..6337287770 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
@@ -347,6 +347,34 @@ final class LocationAnimatorCoordinator {
createNewFloatAnimator(ANIMATOR_CAMERA_COMPASS_BEARING, previousCameraBearing, normalizedCameraBearing);
}
+ void resetAllLayerAnimations() {
+ MapboxLatLngAnimator latLngAnimator = (MapboxLatLngAnimator) animatorArray.get(ANIMATOR_LAYER_LATLNG);
+ MapboxFloatAnimator gpsBearingAnimator = (MapboxFloatAnimator) animatorArray.get(ANIMATOR_LAYER_GPS_BEARING);
+ MapboxFloatAnimator compassBearingAnimator =
+ (MapboxFloatAnimator) animatorArray.get(ANIMATOR_LAYER_COMPASS_BEARING);
+
+ if (latLngAnimator != null && gpsBearingAnimator != null) {
+ LatLng currentLatLng = (LatLng) latLngAnimator.getAnimatedValue();
+ LatLng currentLatLngTarget = latLngAnimator.getTarget();
+ createNewLatLngAnimator(ANIMATOR_LAYER_LATLNG, currentLatLng, currentLatLngTarget);
+
+ float currentGpsBearing = (float) gpsBearingAnimator.getAnimatedValue();
+ float currentGpsBearingTarget = gpsBearingAnimator.getTarget();
+ createNewFloatAnimator(ANIMATOR_LAYER_GPS_BEARING, currentGpsBearing, currentGpsBearingTarget);
+
+ playAnimators(getAnimationDuration(), ANIMATOR_LAYER_LATLNG, ANIMATOR_LAYER_GPS_BEARING);
+ }
+
+ if (compassBearingAnimator != null) {
+ float currentLayerBearing = getPreviousLayerCompassBearing();
+ float currentLayerBearingTarget = compassBearingAnimator.getTarget();
+ createNewFloatAnimator(ANIMATOR_LAYER_COMPASS_BEARING, currentLayerBearing, currentLayerBearingTarget);
+ playAnimators(
+ compassAnimationEnabled ? COMPASS_UPDATE_RATE_MS : 0,
+ ANIMATOR_LAYER_COMPASS_BEARING);
+ }
+ }
+
void cancelZoomAnimation() {
cancelAnimator(ANIMATOR_ZOOM);
}
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 5d8847eab4..5b2dcd8554 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
@@ -1393,6 +1393,9 @@ public final class LocationComponent {
animationsValueChangeListeners.addAll(locationLayerController.getAnimationListeners());
animationsValueChangeListeners.addAll(locationCameraController.getAnimationListeners());
locationAnimatorCoordinator.updateAnimatorListenerHolders(animationsValueChangeListeners);
+ locationAnimatorCoordinator.resetAllCameraAnimations(mapboxMap.getCameraPosition(),
+ locationCameraController.getCameraMode() == CameraMode.TRACKING_GPS_NORTH);
+ locationAnimatorCoordinator.resetAllLayerAnimations();
}
@NonNull
@@ -1517,7 +1520,8 @@ public final class LocationComponent {
}
@NonNull
- private OnCameraTrackingChangedListener cameraTrackingChangedListener = new OnCameraTrackingChangedListener() {
+ @VisibleForTesting
+ OnCameraTrackingChangedListener cameraTrackingChangedListener = new OnCameraTrackingChangedListener() {
@Override
public void onCameraTrackingDismissed() {
for (OnCameraTrackingChangedListener listener : onCameraTrackingChangedListeners) {
@@ -1530,8 +1534,6 @@ public final class LocationComponent {
locationAnimatorCoordinator.cancelZoomAnimation();
locationAnimatorCoordinator.cancelTiltAnimation();
updateAnimatorListenerHolders();
- locationAnimatorCoordinator.resetAllCameraAnimations(mapboxMap.getCameraPosition(),
- locationCameraController.getCameraMode() == CameraMode.TRACKING_GPS_NORTH);
for (OnCameraTrackingChangedListener listener : onCameraTrackingChangedListeners) {
listener.onCameraTrackingChanged(currentMode);
}
@@ -1539,7 +1541,8 @@ public final class LocationComponent {
};
@NonNull
- private OnRenderModeChangedListener renderModeChangedListener = new OnRenderModeChangedListener() {
+ @VisibleForTesting
+ OnRenderModeChangedListener renderModeChangedListener = new OnRenderModeChangedListener() {
@Override
public void onRenderModeChanged(int currentMode) {
updateAnimatorListenerHolders();
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 1bc92ed7e3..0091c50b08 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
@@ -403,6 +403,12 @@ class LocationAnimatorCoordinatorTest {
}
@Test
+ fun resetAllLayerAnimations_empty() {
+ locationAnimatorCoordinator.resetAllLayerAnimations()
+ assertTrue(locationAnimatorCoordinator.animatorArray.size() == 0)
+ }
+
+ @Test
fun addNewListener() {
val listener = Mockito.mock(AnimationsValueChangeListener::class.java)
val holder = AnimatorListenerHolder(RenderMode.NORMAL, listener)
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt
index 384a8cf65a..7fefd94a0b 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt
@@ -396,4 +396,59 @@ class LocationComponentTest {
}
verify(locationCameraController).setCameraMode(eq(CameraMode.NONE), isNull<Location>(), eq(TRANSITION_ANIMATION_DURATION_MS), isNull<Double>(), isNull<Double>(), isNull<Double>(), any())
}
+
+ @Test
+ fun internal_cameraTrackingChangedListener_onCameraTrackingDismissed() {
+ locationComponent.activateLocationComponent(context, mockk(), locationEngine, locationEngineRequest, locationComponentOptions)
+ locationComponent.isLocationComponentEnabled = true
+
+ val cameraChangeListener: OnCameraTrackingChangedListener = mock(OnCameraTrackingChangedListener::class.java)
+ locationComponent.addOnCameraTrackingChangedListener(cameraChangeListener)
+
+ locationComponent.cameraTrackingChangedListener.onCameraTrackingDismissed()
+
+ verify(cameraChangeListener).onCameraTrackingDismissed()
+ }
+
+ @Test
+ fun internal_cameraTrackingChangedListener_onCameraTrackingChanged() {
+ locationComponent.activateLocationComponent(context, mockk(), locationEngine, locationEngineRequest, locationComponentOptions)
+ locationComponent.isLocationComponentEnabled = true
+
+ val cameraValueListener: AnimatorListenerHolder = mock(AnimatorListenerHolder::class.java)
+ val layerValueListener: AnimatorListenerHolder = mock(AnimatorListenerHolder::class.java)
+ `when`(locationCameraController.animationListeners).thenReturn(setOf(cameraValueListener))
+ `when`(locationLayerController.animationListeners).thenReturn(setOf(layerValueListener))
+ val cameraChangeListener: OnCameraTrackingChangedListener = mock(OnCameraTrackingChangedListener::class.java)
+ locationComponent.addOnCameraTrackingChangedListener(cameraChangeListener)
+
+ locationComponent.cameraTrackingChangedListener.onCameraTrackingChanged(CameraMode.TRACKING_GPS)
+
+ verify(locationAnimatorCoordinator).cancelZoomAnimation()
+ verify(locationAnimatorCoordinator).cancelTiltAnimation()
+ verify(locationAnimatorCoordinator).updateAnimatorListenerHolders(eq(setOf(cameraValueListener, layerValueListener)))
+ verify(locationAnimatorCoordinator).resetAllCameraAnimations(any(), anyBoolean())
+ verify(locationAnimatorCoordinator).resetAllLayerAnimations()
+ verify(cameraChangeListener).onCameraTrackingChanged(CameraMode.TRACKING_GPS)
+ }
+
+ @Test
+ fun internal_renderModeChangedListener_onRenderModeChanged() {
+ locationComponent.activateLocationComponent(context, mockk(), locationEngine, locationEngineRequest, locationComponentOptions)
+ locationComponent.isLocationComponentEnabled = true
+
+ val cameraListener: AnimatorListenerHolder = mock(AnimatorListenerHolder::class.java)
+ val layerListener: AnimatorListenerHolder = mock(AnimatorListenerHolder::class.java)
+ `when`(locationCameraController.animationListeners).thenReturn(setOf(cameraListener))
+ `when`(locationLayerController.animationListeners).thenReturn(setOf(layerListener))
+ val renderChangeListener: OnRenderModeChangedListener = mock(OnRenderModeChangedListener::class.java)
+ locationComponent.addOnRenderModeChangedListener(renderChangeListener)
+
+ locationComponent.renderModeChangedListener.onRenderModeChanged(RenderMode.NORMAL)
+
+ verify(locationAnimatorCoordinator).updateAnimatorListenerHolders(eq(setOf(cameraListener, layerListener)))
+ verify(locationAnimatorCoordinator).resetAllCameraAnimations(any(), anyBoolean())
+ verify(locationAnimatorCoordinator).resetAllLayerAnimations()
+ verify(renderChangeListener).onRenderModeChanged(RenderMode.NORMAL)
+ }
} \ No newline at end of file