diff --git a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPluginTest.kt b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPluginTest.kt index ee0813fa0..fb66222dc 100644 --- a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPluginTest.kt +++ b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPluginTest.kt @@ -40,7 +40,7 @@ import com.mapbox.mapboxsdk.style.sources.GeoJsonSource import org.hamcrest.CoreMatchers.* import org.junit.* import org.junit.Assert.assertEquals -import org.junit.Assert.assertNotEquals +import org.junit.rules.TestName import org.junit.runner.RunWith import timber.log.Timber @@ -53,7 +53,11 @@ class LocationLayerPluginTest { @Rule @JvmField - val rule = ActivityTestRule(SingleFragmentActivity::class.java, true, true) + val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, true) + + @Rule + @JvmField + val nameRule = TestName() @Rule @JvmField @@ -77,9 +81,9 @@ class LocationLayerPluginTest { val options = MapboxMapOptions() .camera(CameraPosition.Builder().zoom(2.0).build()) // to match plugins min zoom fragment = SupportMapFragment.newInstance(options) - rule.activity.setFragment(fragment) + activityRule.activity.setFragment(fragment) - Timber.e("@Before: register idle resource") + Timber.e("@Before: ${nameRule.methodName} - register idle resource") // If idlingResource is null, throw Kotlin exception idlingResource = OnMapFragmentReadyIdlingResource(fragment) styleChangeIdlingResource = StyleChangeIdlingResource() @@ -103,7 +107,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, true)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, true)) } @Test @@ -128,7 +132,7 @@ class LocationLayerPluginTest { // changing the style just before instantiating the plugin mapboxMap.setStyleUrl(Style.LIGHT) val plugin = - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false) .providePlugin(mapView, mapboxMap, context) plugin.forceLocationUpdate(location) return plugin @@ -191,7 +195,7 @@ class LocationLayerPluginTest { .enableStaleState(false) .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options)) } @Test @@ -227,7 +231,7 @@ class LocationLayerPluginTest { .bearingName("custom-bearing-bitmap") .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options)) } @Test @@ -236,6 +240,7 @@ class LocationLayerPluginTest { override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, uiController: UiController, context: Context) { plugin.renderMode = RenderMode.GPS + plugin.forceLocationUpdate(location) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) val foregroundDrawable = ContextCompat.getDrawable(context, R.drawable.ic_media_play) mapboxMap.addImageFromDrawable("custom-foreground-bitmap", foregroundDrawable!!) @@ -251,7 +256,7 @@ class LocationLayerPluginTest { .gpsName("custom-gps-bitmap") .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options)) } @Test @@ -260,6 +265,7 @@ class LocationLayerPluginTest { override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, uiController: UiController, context: Context) { plugin.renderMode = RenderMode.GPS + plugin.forceLocationUpdate(location) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) val foregroundId = mapboxMap.querySourceFeatures(LOCATION_SOURCE)[0].getStringProperty(PROPERTY_FOREGROUND_ICON) @@ -278,7 +284,7 @@ class LocationLayerPluginTest { .gpsName("custom-gps-bitmap") .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options)) } @Test @@ -287,6 +293,7 @@ class LocationLayerPluginTest { override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, uiController: UiController, context: Context) { plugin.renderMode = RenderMode.GPS + plugin.forceLocationUpdate(location) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) val foregroundId = mapboxMap.querySourceFeatures(LOCATION_SOURCE)[0].getStringProperty(PROPERTY_FOREGROUND_ICON) @@ -304,7 +311,7 @@ class LocationLayerPluginTest { .gpsName("custom-gps-bitmap") .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options)) } @Test @@ -333,7 +340,7 @@ class LocationLayerPluginTest { .staleStateTimeout(200) .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options, false)) } @Test @@ -358,7 +365,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -383,7 +390,7 @@ class LocationLayerPluginTest { .accuracyColor(color) .build() executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, options)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, options)) } @Test @@ -464,7 +471,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -485,7 +492,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -506,7 +513,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -526,7 +533,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -547,7 +554,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -571,7 +578,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -603,7 +610,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -624,7 +631,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) // Waiting for style to finish loading while pushing updates onView(withId(R.id.content)).check(matches(isDisplayed())) @@ -645,7 +652,7 @@ class LocationLayerPluginTest { } } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) // Waiting for style to finish loading while pushing updates onView(withId(R.id.content)).check(matches(isDisplayed())) @@ -671,7 +678,7 @@ class LocationLayerPluginTest { override fun providePlugin(mapView: MapView, mapboxMap: MapboxMap, context: Context): LocationLayerPlugin { // changing the style just before instantiating the plugin styleChangeIdlingResource.waitForStyle(mapView, mapboxMap, MAPBOX_HEAVY_STYLE) - return PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false) + return PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false) .providePlugin(mapView, mapboxMap, context) } @@ -702,7 +709,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -729,7 +736,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -759,7 +766,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -790,7 +797,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -807,7 +814,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -824,7 +831,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -840,7 +847,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -859,7 +866,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -885,7 +892,7 @@ class LocationLayerPluginTest { } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -904,7 +911,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -921,7 +928,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -937,7 +944,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -956,7 +963,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -981,7 +988,7 @@ class LocationLayerPluginTest { } executePluginTest(pluginAction, - PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity, false, null, null, false)) + PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity, false, null, null, false)) } @Test @@ -1000,7 +1007,7 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @Test @@ -1022,18 +1029,18 @@ class LocationLayerPluginTest { } } - executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) + executePluginTest(pluginAction, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) } @After fun afterTest() { - Timber.e("@After: unregister idle resource") + Timber.e("@After: ${nameRule.methodName} - unregister idle resource") IdlingRegistry.getInstance().unregister(idlingResource) IdlingRegistry.getInstance().unregister(styleChangeIdlingResource) } private fun executePluginTest(listener: GenericPluginAction.OnPerformGenericPluginAction, - pluginProvider: GenericPluginAction.PluginProvider = PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity)) { + pluginProvider: GenericPluginAction.PluginProvider = PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity)) { onView(withId(R.id.content)).perform(GenericPluginAction(fragment.view as MapView, mapboxMap, pluginProvider, listener)) } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt index 7f870262f..c759cfaba 100644 --- a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt +++ b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt @@ -37,6 +37,7 @@ import org.junit.Assert.assertThat import org.junit.Before import org.junit.Rule import org.junit.Test +import org.junit.rules.TestName import org.junit.runner.RunWith import timber.log.Timber @@ -46,7 +47,11 @@ class LocationLayerTest { @Rule @JvmField - val rule = ActivityTestRule(SingleActivity::class.java) + val activityRule = ActivityTestRule(SingleActivity::class.java) + + @Rule + @JvmField + val nameRule = TestName() @Rule @JvmField @@ -65,9 +70,9 @@ class LocationLayerTest { @Before fun beforeTest() { - Timber.e("@Before: register idle resource") + Timber.e("@Before: ${nameRule.methodName} - register idle resource") // If idlingResource is null, throw Kotlin exception - idlingResource = OnMapReadyIdlingResource(rule.activity) + idlingResource = OnMapReadyIdlingResource(activityRule.activity) styleChangeIdlingResource = StyleChangeIdlingResource() IdlingRegistry.getInstance().register(idlingResource) IdlingRegistry.getInstance().register(styleChangeIdlingResource) @@ -340,12 +345,12 @@ class LocationLayerTest { @After fun afterTest() { - Timber.e("@After: unregister idle resource") + Timber.e("@After: ${nameRule.methodName} - unregister idle resource") IdlingRegistry.getInstance().unregister(idlingResource) IdlingRegistry.getInstance().unregister(styleChangeIdlingResource) } private fun executePluginTest(listener: GenericPluginAction.OnPerformGenericPluginAction) { - onView(withId(android.R.id.content)).perform(GenericPluginAction(idlingResource.mapView, mapboxMap, PluginGenerationUtil.getLocationLayerPluginProvider(rule.activity), listener)) + onView(withId(android.R.id.content)).perform(GenericPluginAction(idlingResource.mapView, mapboxMap, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity), listener)) } } diff --git a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/GenericPluginAction.kt b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/GenericPluginAction.kt index 38a2261cb..210f7b475 100644 --- a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/GenericPluginAction.kt +++ b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/GenericPluginAction.kt @@ -25,6 +25,7 @@ class GenericPluginAction(private val mapView: MapView, private val mapboxMap val plugin = pluginProvider.providePlugin(mapView, mapboxMap, view.context) // ensuring that the asynchronous renderer has time to render data we want to test + uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) while (!pluginProvider.isPluginDataReady(plugin, mapboxMap)) { uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) } diff --git a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/PluginGenerationUtil.kt b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/PluginGenerationUtil.kt index 2e11d54f4..4521da8aa 100644 --- a/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/PluginGenerationUtil.kt +++ b/app/src/androidTest/java/com/mapbox/mapboxsdk/plugins/utils/PluginGenerationUtil.kt @@ -7,7 +7,6 @@ import com.mapbox.mapboxsdk.maps.MapView import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerOptions import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin -import com.mapbox.mapboxsdk.style.sources.GeoJsonSource class PluginGenerationUtil { companion object { @@ -37,8 +36,7 @@ class PluginGenerationUtil { } override fun isPluginDataReady(plugin: LocationLayerPlugin, mapboxMap: MapboxMap): Boolean { - val source = mapboxMap.getSource("mapbox-location-source") - return source != null && (source as GeoJsonSource).querySourceFeatures(null).isNotEmpty() + return mapboxMap.getSource("mapbox-location-source") != null } } } diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 682e9dd5b..d4be89d4b 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -8,7 +8,7 @@ ext { ] version = [ - mapboxMapSdk : '6.3.0', + mapboxMapSdk : '6.4.0', mapboxJava : '3.2.0', playLocation : '15.0.1', autoValue : '1.5.4', diff --git a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayer.java b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayer.java index c9141658a..613a88068 100644 --- a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayer.java +++ b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayer.java @@ -94,7 +94,7 @@ final class LocationLayer implements PluginAnimator.OnLayerAnimationsValuesChang private Feature locationFeature; private GeoJsonSource locationSource; - private boolean isHidden; + private boolean isHidden = true; LocationLayer(MapView mapView, MapboxMap mapboxMap, LocationLayerOptions options) { this.mapboxMap = mapboxMap; @@ -304,9 +304,7 @@ void updateForegroundBearing(float bearing) { @SuppressLint("Range") private void generateLocationFeature(LocationLayerOptions options) { if (locationFeature == null) { - locationFeature = Feature.fromGeometry( - Point.fromLngLat(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY) - ); + locationFeature = Feature.fromGeometry(Point.fromLngLat(0.0, 0.0)); locationFeature.addNumberProperty(PROPERTY_GPS_BEARING, 0f); locationFeature.addNumberProperty(PROPERTY_COMPASS_BEARING, 0f); locationFeature.addBooleanProperty(PROPERTY_LOCATION_STALE, options.enableStaleState()); diff --git a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java index 2b6e5e21e..89cb1fe26 100644 --- a/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java +++ b/plugin-locationlayer/src/main/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerPlugin.java @@ -647,7 +647,6 @@ void onLocationLayerStart() { locationEngine.requestLocationUpdates(); } } - locationLayer.show(); setCameraMode(locationLayerCamera.getCameraMode()); setLastLocation(); setLastCompassHeading(); @@ -744,6 +743,10 @@ private void updateLocation(final Location location, boolean fromLastLocation) { return; } + if (isEnabled && isPluginStarted) { + locationLayer.show(); + } + if (!fromLastLocation) { staleStateManager.updateLatestLocationTime(); }