From 70214f1e6b8eaa49d4b1c6daf6b821fe90d650c8 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 23 Oct 2019 11:06:15 +0300 Subject: [PATCH] Add isLayerReady check in LocationComponent before updating compass listener. (#19) --- .../mapboxsdk/location/LocationComponent.java | 2 +- .../mapboxsdk/location/LocationComponentTest.kt | 17 +++++++++++++++++ .../location/LocationModesActivity.java | 6 ++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java index 8b014b0e9..952da885f 100644 --- a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java +++ b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationComponent.java @@ -1289,7 +1289,7 @@ public final class LocationComponent { return; } - if (!isComponentInitialized || !isComponentStarted || !isEnabled) { + if (!isComponentInitialized || !isComponentStarted || !isEnabled || !isLayerReady) { return; } diff --git a/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt b/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt index 2994c29d5..648a1d214 100644 --- a/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt +++ b/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/location/LocationComponentTest.kt @@ -386,6 +386,23 @@ class LocationComponentTest { verify(compassEngine, never()).addCompassListener(any(CompassListener::class.java)) } + @Test + fun compass_notAddListenerWhenLayerNotReady() { + locationComponent.activateLocationComponent(context, mock(Style::class.java), locationEngine, locationEngineRequest, locationComponentOptions) + locationComponent.onStart() + locationComponent.isLocationComponentEnabled = true + `when`(mapboxMap.cameraPosition).thenReturn(CameraPosition.DEFAULT) + `when`(locationLayerController.isConsumingCompass).thenReturn(true) + locationComponent.renderMode = RenderMode.COMPASS + + verify(compassEngine, times(1)).addCompassListener(any(CompassListener::class.java)) + + locationComponent.onStartLoadingMap() + // Layer should be disabled at this point + locationComponent.setCameraMode(CameraMode.TRACKING_COMPASS) + verify(compassEngine, times(1)).addCompassListener(any(CompassListener::class.java)) + } + @Test fun developerAnimationCalled() { locationComponent.activateLocationComponent(context, mock(Style::class.java), locationEngine, locationEngineRequest, locationComponentOptions) diff --git a/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java b/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java index 6ec64e1d0..0ee99a4fe 100644 --- a/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java +++ b/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationModesActivity.java @@ -233,8 +233,10 @@ public class LocationModesActivity extends AppCompatActivity implements OnMapRea return; } - String styleUrl = Style.DARK.equals(mapboxMap.getStyle().getUri()) ? Style.LIGHT : Style.DARK; - mapboxMap.setStyle(new Style.Builder().fromUri(styleUrl)); + mapboxMap.getStyle(style -> { + String styleUrl = Style.DARK.equals(style.getUri()) ? Style.LIGHT : Style.DARK; + mapboxMap.setStyle(new Style.Builder().fromUri(styleUrl)); + }); } private void disableGesturesManagement() {