diff --git a/libandroid-navigation-ui/build.gradle b/libandroid-navigation-ui/build.gradle index 55679991487..cf0a0077e6f 100644 --- a/libandroid-navigation-ui/build.gradle +++ b/libandroid-navigation-ui/build.gradle @@ -29,6 +29,16 @@ android { testCoverageEnabled = true } } + + testOptions { + unitTests.returnDefaultValues = true + unitTests.includeAndroidResources = true + unitTests.all { + jacoco { + includeNoLocationClasses = true + } + } + } } dependencies { diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayname.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayname.java index 0642330118d..4eca50c0793 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayname.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayname.java @@ -14,7 +14,9 @@ import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconImage; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility; @@ -24,13 +26,14 @@ class MapWayname { private static final String NAME_PROPERTY = "name"; + private final MapWaynameProgressChangeListener progressChangeListener = new MapWaynameProgressChangeListener(this); + private final Set onWayNameChangedListeners; private WaynameLayoutProvider layoutProvider; private MapLayerInteractor layerInteractor; private WaynameFeatureFinder featureInteractor; private List currentStepPoints = new ArrayList<>(); private Location currentLocation = null; private MapboxNavigation navigation; - private final MapWaynameProgressChangeListener progressChangeListener = new MapWaynameProgressChangeListener(this); private boolean isAutoQueryEnabled; private boolean isVisible; private FeatureFilterTask filterTask; @@ -42,19 +45,20 @@ class MapWayname { this.layerInteractor = layerInteractor; this.featureInteractor = featureInteractor; paddingAdjustor.updatePaddingWithDefault(); + this.onWayNameChangedListeners = new HashSet<>(); } void updateWaynameWithPoint(PointF point, SymbolLayer waynameLayer) { - if (!isAutoQueryEnabled || !isVisible) { + if (!isAutoQueryEnabled) { return; } - List roads = findRoadLabelFeatures(point); - boolean shouldBeVisible = !roads.isEmpty(); - adjustWaynameVisibility(shouldBeVisible, waynameLayer); - if (!shouldBeVisible) { + List roadLabelFeatures = findRoadLabelFeatures(point); + boolean invalidLabelFeatures = roadLabelFeatures.isEmpty(); + if (invalidLabelFeatures) { + updateVisibility(false, waynameLayer); return; } - updateLayerWithRoadLabelFeatures(roads, waynameLayer); + executeFeatureFilterTask(roadLabelFeatures, waynameLayer); } void updateWaynameLayer(String wayname, SymbolLayer waynameLayer) { @@ -63,14 +67,6 @@ void updateWaynameLayer(String wayname, SymbolLayer waynameLayer) { } } - void updateWaynameVisibility(boolean isVisible, SymbolLayer waynameLayer) { - this.isVisible = isVisible; - if (checkWaynameVisibility(isVisible, waynameLayer)) { - return; - } - adjustWaynameVisibility(isVisible, waynameLayer); - } - void updateProgress(Location currentLocation, List currentStepPoints) { if (!this.currentStepPoints.equals(currentStepPoints)) { this.currentStepPoints = currentStepPoints; @@ -80,6 +76,11 @@ void updateProgress(Location currentLocation, List currentStepPoints) { } } + void updateWaynameVisibility(boolean isVisible, SymbolLayer waynameLayer) { + this.isVisible = isVisible; + updateVisibility(isVisible, waynameLayer); + } + void updateWaynameQueryMap(boolean isEnabled) { isAutoQueryEnabled = isEnabled; } @@ -97,6 +98,14 @@ void addProgressChangeListener(MapboxNavigation navigation) { navigation.addProgressChangeListener(progressChangeListener); } + boolean addOnWayNameChangedListener(OnWayNameChangedListener listener) { + return onWayNameChangedListeners.add(listener); + } + + boolean removeOnWayNameChangedListener(OnWayNameChangedListener listener) { + return onWayNameChangedListeners.remove(listener); + } + void onStart() { if (navigation != null) { navigation.addProgressChangeListener(progressChangeListener); @@ -117,15 +126,6 @@ private List findRoadLabelFeatures(PointF point) { return featureInteractor.queryRenderedFeatures(point, layerIds); } - private void updateLayerWithRoadLabelFeatures(List roadFeatures, final SymbolLayer waynameLayer) { - boolean isValidFeatureList = !roadFeatures.isEmpty(); - if (isValidFeatureList) { - executeFeatureFilterTask(roadFeatures, waynameLayer); - } else { - updateWaynameVisibility(false, waynameLayer); - } - } - private void executeFeatureFilterTask(List roadFeatures, final SymbolLayer waynameLayer) { if (isTaskRunning()) { filterTask.cancel(true); @@ -145,7 +145,8 @@ public void onFeatureFiltered(@NonNull Feature feature) { private boolean isTaskRunning() { return filterTask != null - && (filterTask.getStatus() == AsyncTask.Status.PENDING || filterTask.getStatus() == AsyncTask.Status.RUNNING); + && (filterTask.getStatus() == AsyncTask.Status.PENDING + || filterTask.getStatus() == AsyncTask.Status.RUNNING); } private boolean hasValidProgressData() { @@ -153,14 +154,18 @@ private boolean hasValidProgressData() { } private void createWaynameIcon(String wayname, Layer waynameLayer) { - boolean isVisible = waynameLayer.getVisibility().getValue().contentEquals(Property.VISIBLE); - if (isVisible) { - Bitmap waynameLayoutBitmap = layoutProvider.generateLayoutBitmap(wayname); - if (waynameLayoutBitmap != null) { - layerInteractor.addLayerImage(MAPBOX_WAYNAME_ICON, waynameLayoutBitmap); - waynameLayer.setProperties(iconImage(MAPBOX_WAYNAME_ICON)); - } + Bitmap waynameLayoutBitmap = layoutProvider.generateLayoutBitmap(wayname); + if (waynameLayoutBitmap != null) { + layerInteractor.addLayerImage(MAPBOX_WAYNAME_ICON, waynameLayoutBitmap); + waynameLayer.setProperties(iconImage(MAPBOX_WAYNAME_ICON)); + } + } + + private void updateVisibility(boolean isVisible, SymbolLayer waynameLayer) { + if (checkWaynameVisibility(isVisible, waynameLayer)) { + return; } + adjustWaynameVisibility(isVisible, waynameLayer); } private boolean checkWaynameVisibility(boolean isVisible, Layer waynameLayer) { @@ -183,10 +188,21 @@ private void updateWaynameLayerWithNameProperty(SymbolLayer waynameLayer, Featur String currentWayname = roadFeature.getStringProperty(NAME_PROPERTY); boolean newWayname = !wayname.contentEquals(currentWayname); if (newWayname) { + updateListenersWith(currentWayname); wayname = currentWayname; - updateWaynameVisibility(true, waynameLayer); + if (isVisible) { + updateVisibility(true, waynameLayer); + } updateWaynameLayer(wayname, waynameLayer); } + } else { + updateVisibility(false, waynameLayer); + } + } + + private void updateListenersWith(String currentWayName) { + for (OnWayNameChangedListener listener : onWayNameChangedListeners) { + listener.onWayNameChanged(currentWayName); } } } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMap.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMap.java index 1ab5ce82884..2375aec2935 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMap.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMap.java @@ -80,7 +80,7 @@ public class NavigationMapboxMap { private NavigationMapRoute mapRoute; private LocationComponent locationComponent; private MapPaddingAdjustor mapPaddingAdjustor; - private MapWayname mapWayname; + private MapWayname mapWayName; private SymbolLayer waynameLayer; private MapLayerInteractor layerInteractor; private List mapMarkers = new ArrayList<>(); @@ -117,6 +117,11 @@ public NavigationMapboxMap(@NonNull MapView mapView, @NonNull MapboxMap mapboxMa this.mapRoute = mapRoute; } + // Package private (no modifier) for testing purposes + NavigationMapboxMap(MapWayname mapWayName) { + this.mapWayName = mapWayName; + } + /** * Adds a marker icon on the map at the given position. *

@@ -178,7 +183,7 @@ public void updateLocationLayerRenderMode(@RenderMode.Mode int renderMode) { public void addProgressChangeListener(MapboxNavigation navigation) { mapRoute.addProgressChangeListener(navigation); mapCamera.addProgressChangeListener(navigation); - mapWayname.addProgressChangeListener(navigation); + mapWayName.addProgressChangeListener(navigation); } /** @@ -192,8 +197,8 @@ public void addProgressChangeListener(MapboxNavigation navigation) { * @param outState to store state variables */ public void saveStateWith(String key, Bundle outState) { - boolean isVisible = mapWayname.isVisible(); - String waynameText = mapWayname.retrieveWayname(); + boolean isVisible = mapWayName.isVisible(); + String waynameText = mapWayName.retrieveWayname(); int[] mapPadding = mapPaddingAdjustor.retrieveCurrentPadding(); boolean isUsingDefault = mapPaddingAdjustor.isUsingDefault(); @NavigationCamera.TrackingMode @@ -366,7 +371,7 @@ public void showRouteOverview(int[] padding) { * @param wayname text to be set */ public void updateWaynameView(String wayname) { - mapWayname.updateWaynameLayer(wayname, waynameLayer); + mapWayName.updateWaynameLayer(wayname, waynameLayer); } /** @@ -375,7 +380,7 @@ public void updateWaynameView(String wayname) { * @param isVisible true to show, false to hide */ public void updateWaynameVisibility(boolean isVisible) { - mapWayname.updateWaynameVisibility(isVisible, waynameLayer); + mapWayName.updateWaynameVisibility(isVisible, waynameLayer); } /** @@ -384,7 +389,7 @@ public void updateWaynameVisibility(boolean isVisible) { * @return true if visible, false if not */ public boolean isWaynameVisible() { - return mapWayname.isVisible(); + return mapWayName.isVisible(); } /** @@ -393,7 +398,7 @@ public boolean isWaynameVisible() { * @param isEnabled true to enable, false to disable */ public void updateWaynameQueryMap(boolean isEnabled) { - mapWayname.updateWaynameQueryMap(isEnabled); + mapWayName.updateWaynameQueryMap(isEnabled); } /** @@ -403,7 +408,7 @@ public void updateWaynameQueryMap(boolean isEnabled) { public void onStart() { mapCamera.onStart(); mapRoute.onStart(); - mapWayname.onStart(); + mapWayName.onStart(); } /** @@ -413,7 +418,7 @@ public void onStart() { public void onStop() { mapCamera.onStop(); mapRoute.onStop(); - mapWayname.onStop(); + mapWayName.onStop(); } /** @@ -496,6 +501,28 @@ public void removeOnCameraTrackingChangedListener(OnCameraTrackingChangedListene locationComponent.removeOnCameraTrackingChangedListener(listener); } + /** + * Add a {@link OnWayNameChangedListener} for listening to updates + * to the way name shown on the map below the location icon. + * + * @param listener to be added + * @return true if added, false if listener was not found + */ + public boolean addOnWayNameChangedListener(OnWayNameChangedListener listener) { + return mapWayName.addOnWayNameChangedListener(listener); + } + + /** + * Remove a {@link OnWayNameChangedListener} for listening to updates + * to the way name shown on the map below the location icon. + * + * @param listener to be removed + * @return true if removed, false if listener was not found + */ + public boolean removeOnWayNameChangedListener(OnWayNameChangedListener listener) { + return mapWayName.removeOnWayNameChangedListener(listener); + } + /** * Use this method to position the location icon on the map. *

@@ -541,7 +568,7 @@ private void initializeWayname(MapView mapView, MapboxMap mapboxMap, MapLayerInt WaynameLayoutProvider layoutProvider = new WaynameLayoutProvider(mapView.getContext()); WaynameFeatureFinder featureInteractor = new WaynameFeatureFinder(mapboxMap); initializeWaynameLayer(layerInteractor); - mapWayname = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); + mapWayName = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); } private void initializeWaynameLayer(MapLayerInteractor layerInteractor) { @@ -607,6 +634,6 @@ private void removeAllMarkers() { private void updateMapWaynameWithLocation(Location location) { LatLng latLng = new LatLng(location); PointF mapPoint = mapboxMap.getProjection().toScreenLocation(latLng); - mapWayname.updateWaynameWithPoint(mapPoint, waynameLayer); + mapWayName.updateWaynameWithPoint(mapPoint, waynameLayer); } } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/OnWayNameChangedListener.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/OnWayNameChangedListener.java new file mode 100644 index 00000000000..ad1cd56185a --- /dev/null +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/OnWayNameChangedListener.java @@ -0,0 +1,20 @@ +package com.mapbox.services.android.navigation.ui.v5.map; + +/** + * A listener that can be added to the {@link NavigationMapboxMap} with + * {@link NavigationMapboxMap#addOnWayNameChangedListener(OnWayNameChangedListener)}. + *

+ * This listener is triggered when a new way name is found along the route. It will be triggered + * regardless of the map way name visibility ({@link NavigationMapboxMap#updateWaynameVisibility(boolean)}). + * This is so you can hide our implementation of the way name UI and update your own if you'd like. + */ +public interface OnWayNameChangedListener { + + /** + * Triggered every time a new way name is found along the route. + * This will mainly be when transitioning steps, onto new roads. + * + * @param wayName found along the route + */ + void onWayNameChanged(String wayName); +} diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java index 9a423f6f279..8adf0e86481 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java @@ -14,7 +14,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; @@ -30,7 +29,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@Config(manifest=Config.NONE) @RunWith(RobolectricTestRunner.class) public class MapWaynameTest { @@ -59,11 +57,7 @@ public void onRoadsReturnedFromQuery_layoutIconAdded() { String roadName = "roadName"; PointF point = mock(PointF.class); SymbolLayer waynameLayer = mock(SymbolLayer.class); - List roads = new ArrayList<>(); - Feature road = mock(Feature.class); - when(road.hasNonNullValueForProperty("name")).thenReturn(true); - when(road.getStringProperty("name")).thenReturn(roadName); - roads.add(road); + List roads = buildRoadFeatureList(roadName); WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); when(layoutProvider.generateLayoutBitmap(roadName)).thenReturn(mock(Bitmap.class)); MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); @@ -77,6 +71,86 @@ public void onRoadsReturnedFromQuery_layoutIconAdded() { verify(layoutProvider, times(1)).generateLayoutBitmap(roadName); } + @Test + public void updateWaynameWithPointWhileVisible_listenerIsTriggered() { + String roadName = "roadName"; + PointF point = mock(PointF.class); + SymbolLayer waynameLayer = mock(SymbolLayer.class); + List roads = buildRoadFeatureList(roadName); + WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); + MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); + List stepPoints = new ArrayList<>(); + stepPoints.add(mock(Point.class)); + mapWayname.updateProgress(mock(Location.class), stepPoints); + OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); + mapWayname.addOnWayNameChangedListener(listener); + + mapWayname.updateWaynameVisibility(true, waynameLayer); + mapWayname.updateWaynameWithPoint(point, waynameLayer); + + verify(listener).onWayNameChanged(roadName); + } + + @Test + public void updateWaynameWithPointWhileInvisible_listenerIsTriggered() { + String roadName = "roadName"; + PointF point = mock(PointF.class); + SymbolLayer waynameLayer = mock(SymbolLayer.class); + List roads = buildRoadFeatureList(roadName); + WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); + MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); + List stepPoints = new ArrayList<>(); + stepPoints.add(mock(Point.class)); + mapWayname.updateProgress(mock(Location.class), stepPoints); + OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); + mapWayname.addOnWayNameChangedListener(listener); + + mapWayname.updateWaynameVisibility(false, waynameLayer); + mapWayname.updateWaynameWithPoint(point, waynameLayer); + + verify(listener).onWayNameChanged(roadName); + } + + @Test + public void addOnWayNameChangedListener_duplicateListenerIgnored() { + String roadName = "roadName"; + PointF point = mock(PointF.class); + SymbolLayer waynameLayer = mock(SymbolLayer.class); + List roads = buildRoadFeatureList(roadName); + WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); + MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); + List stepPoints = new ArrayList<>(); + stepPoints.add(mock(Point.class)); + mapWayname.updateProgress(mock(Location.class), stepPoints); + mapWayname.updateWaynameVisibility(true, waynameLayer); + OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); + + mapWayname.addOnWayNameChangedListener(listener); + boolean wasAdded = mapWayname.addOnWayNameChangedListener(listener); + + assertFalse(wasAdded); + } + + @Test + public void removeOnWayNameChangedListener_duplicateListenerIgnored() { + String roadName = "roadName"; + PointF point = mock(PointF.class); + SymbolLayer waynameLayer = mock(SymbolLayer.class); + List roads = buildRoadFeatureList(roadName); + WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); + MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); + List stepPoints = new ArrayList<>(); + stepPoints.add(mock(Point.class)); + mapWayname.updateProgress(mock(Location.class), stepPoints); + mapWayname.updateWaynameVisibility(true, waynameLayer); + OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); + + mapWayname.removeOnWayNameChangedListener(listener); + boolean wasRemoved = mapWayname.removeOnWayNameChangedListener(listener); + + assertFalse(wasRemoved); + } + @Test public void onFeatureWithoutNamePropertyReturned_updateIsIgnored() { PointF point = mock(PointF.class); @@ -151,11 +225,7 @@ public void onRoadsReturnedFromQuery_layoutProviderGeneratesBitmap() { String roadName = "roadName"; PointF point = mock(PointF.class); SymbolLayer waynameLayer = mock(SymbolLayer.class); - List roads = new ArrayList<>(); - Feature road = mock(Feature.class); - when(road.hasNonNullValueForProperty("name")).thenReturn(true); - when(road.getStringProperty("name")).thenReturn(roadName); - roads.add(road); + List roads = buildRoadFeatureList(roadName); WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); when(layoutProvider.generateLayoutBitmap(roadName)).thenReturn(mock(Bitmap.class)); MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); @@ -234,6 +304,15 @@ private MapWayname buildMapWayname(PointF point, SymbolLayer waynameLayer, List< MapWayname mapWayname = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); mapWayname.updateWaynameQueryMap(true); return mapWayname; + } + @NonNull + private List buildRoadFeatureList(String roadName) { + List roads = new ArrayList<>(); + Feature road = mock(Feature.class); + when(road.hasNonNullValueForProperty("name")).thenReturn(true); + when(road.getStringProperty("name")).thenReturn(roadName); + roads.add(road); + return roads; } } \ No newline at end of file diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapTest.java index 6af059a5bfd..58b52d0638f 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapTest.java @@ -102,4 +102,26 @@ public void showAlternativeRoutes_correctVisibilityIsSet() { verify(mapRoute).showAlternativeRoutes(notVisible); } + + @Test + public void addOnWayNameChangedListener_listenerIsAddedToMapWayname() { + MapWayname mapWayName = mock(MapWayname.class); + NavigationMapboxMap theNavigationMap = new NavigationMapboxMap(mapWayName); + OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); + + theNavigationMap.addOnWayNameChangedListener(listener); + + verify(mapWayName).addOnWayNameChangedListener(listener); + } + + @Test + public void removeOnWayNameChangedListener_listenerIsRemovedFromMapWayname() { + MapWayname mapWayName = mock(MapWayname.class); + NavigationMapboxMap theNavigationMap = new NavigationMapboxMap(mapWayName); + OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); + + theNavigationMap.removeOnWayNameChangedListener(listener); + + verify(mapWayName).removeOnWayNameChangedListener(listener); + } } \ No newline at end of file diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameFeatureFinderTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameFeatureFinderTest.java new file mode 100644 index 00000000000..a7f397387bc --- /dev/null +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameFeatureFinderTest.java @@ -0,0 +1,25 @@ +package com.mapbox.services.android.navigation.ui.v5.map; + +import android.graphics.PointF; + +import com.mapbox.mapboxsdk.maps.MapboxMap; + +import org.junit.Test; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class WaynameFeatureFinderTest { + + @Test + public void queryRenderedFeatures_mapboxMapIsCalled() { + MapboxMap mapboxMap = mock(MapboxMap.class); + WaynameFeatureFinder featureFinder = new WaynameFeatureFinder(mapboxMap); + PointF point = mock(PointF.class); + String[] layerIds = {"id", "id"}; + + featureFinder.queryRenderedFeatures(point, layerIds); + + verify(mapboxMap).queryRenderedFeatures(point, layerIds); + } +} \ No newline at end of file diff --git a/libandroid-navigation/build.gradle b/libandroid-navigation/build.gradle index 5ac08a1352e..c697273ce2c 100644 --- a/libandroid-navigation/build.gradle +++ b/libandroid-navigation/build.gradle @@ -35,9 +35,6 @@ android { testOptions { unitTests.returnDefaultValues = true unitTests.includeAndroidResources = true - } - - testOptions { unitTests.all { jacoco { includeNoLocationClasses = true