From f0d3d459b8e2f19bf8eae923e2a01bcf57a4067f Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Thu, 12 Sep 2019 11:59:56 +0300 Subject: [PATCH] [android] Keep CompassView's state up to date when compass is enabled. (#15606) * [android] Keep CompassView's state up to date when compass is enabled. * [android] Add unit test for updating compass view. * [android] Add change log. --- platform/android/CHANGELOG.md | 1 + .../com/mapbox/mapboxsdk/maps/UiSettings.java | 5 +---- .../mapboxsdk/maps/widgets/CompassView.java | 1 + .../mapbox/mapboxsdk/maps/UiSettingsTest.java | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index 6937b7e6d..9ad600b16 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -6,6 +6,7 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to ### Bug fixes - Fixed constant repainting for the sources with invisible layers, caused by `RenderSource::hasFadingTiles()` returning `true` all the time. [#15600](https://github.com/mapbox/mapbox-gl-native/pull/15600) + - Fixed an issue that caused the state of CompassView not up to date when `UiSettings.setCompassEnabled()` is set to true. [#15606](https://github.com/mapbox/mapbox-gl-native/pull/15606) ## 8.4.0-alpha.2 - September 11, 2019 [Changes](https://github.com/mapbox/mapbox-gl-native/compare/android-v8.4.0-alpha.1...android-v8.4.0-alpha.2) since [Mapbox Maps SDK for Android v8.4.0](https://github.com/mapbox/mapbox-gl-native/releases/tag/android-v8.4.0-alpha.1): diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java index 9e72be8e9..3fd155837 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/UiSettings.java @@ -417,10 +417,6 @@ public final class UiSettings { } void update(@NonNull CameraPosition cameraPosition) { - if (!isCompassEnabled()) { - return; - } - double clockwiseBearing = -cameraPosition.bearing; compassView.update(clockwiseBearing); } @@ -1073,6 +1069,7 @@ public final class UiSettings { */ public void invalidate() { setLogoMargins(getLogoMarginLeft(), getLogoMarginTop(), getLogoMarginRight(), getLogoMarginBottom()); + setCompassEnabled(isCompassEnabled()); setCompassMargins(getCompassMarginLeft(), getCompassMarginTop(), getCompassMarginRight(), getCompassMarginBottom()); setAttributionMargins(getAttributionMarginLeft(), getAttributionMarginTop(), getAttributionMarginRight(), getAttributionMarginBottom()); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java index 53c0c1c60..b593076dc 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java @@ -91,6 +91,7 @@ public final class CompassView extends ImageView implements Runnable { resetAnimation(); setAlpha(1.0f); setVisibility(View.VISIBLE); + update(rotation); } else { resetAnimation(); setAlpha(0.0f); diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java index cfcf0a048..a84e93cd7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java @@ -5,6 +5,7 @@ import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; +import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.maps.widgets.CompassView; import org.junit.Before; @@ -17,6 +18,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; public class UiSettingsTest { @@ -412,4 +414,20 @@ public class UiSettingsTest { assertEquals("Zoom rate should be 0.83f", 0.83f, uiSettings.getZoomRate(), 0); } + + @Test + public void testUpdateWhenCompassViewNotHidden() { + CameraPosition cameraPosition = new CameraPosition.Builder(CameraPosition.DEFAULT).bearing(24.0f).build(); + when(compassView.isHidden()).thenReturn(false); + uiSettings.update(cameraPosition); + verify(compassView).update(-24.0f); + } + + @Test + public void testUpdateWhenCompassViewHidden() { + CameraPosition cameraPosition = new CameraPosition.Builder(CameraPosition.DEFAULT).bearing(24.0f).build(); + when(compassView.isHidden()).thenReturn(true); + uiSettings.update(cameraPosition); + verify(compassView).update(-24.0f); + } }