From a92926a3bc47098eb1d3a301c7d81519d73d7863 Mon Sep 17 00:00:00 2001 From: danesfeder Date: Mon, 10 Dec 2018 17:15:53 -0800 Subject: [PATCH] Use Android View instead of runtime styling for way name --- .../NavigationViewOrientationTest.java | 3 +- codecov.yml | 5 +- .../navigation/ui/v5/NavigationContract.java | 5 +- .../navigation/ui/v5/NavigationPresenter.java | 22 +- .../navigation/ui/v5/NavigationView.java | 88 +++-- .../ui/v5/NavigationViewInstanceState.java | 55 +-- .../ui/v5/NavigationViewWayNameListener.java | 19 ++ .../ui/v5/map/MapLayerInteractor.java | 10 - .../map/{MapWayname.java => MapWayName.java} | 97 +----- .../map/MapWaynameProgressChangeListener.java | 8 +- .../ui/v5/map/NavigationMapboxMap.java | 96 +----- .../map/NavigationMapboxMapInstanceState.java | 22 +- .../ui/v5/map/OnWayNameChangedListener.java | 7 +- .../navigation/ui/v5/map/WayNameView.java | 64 ++++ .../ui/v5/map/WaynameLayoutProvider.java | 21 -- .../navigation/ui/v5/map/WaynameView.java | 50 --- .../layout-land/navigation_view_layout.xml | 9 + .../res/layout/navigation_view_layout.xml | 10 +- .../main/res/layout/wayname_view_layout.xml | 35 +- .../src/main/res/values/dimens.xml | 4 + .../ui/v5/NavigationPresenterTest.java | 47 ++- .../v5/NavigationViewWayNameListenerTest.java | 23 ++ .../navigation/ui/v5/map/MapWayNameTest.java | 111 ++++++ .../navigation/ui/v5/map/MapWaynameTest.java | 318 ------------------ .../ui/v5/map/NavigationMapboxMapTest.java | 4 +- 25 files changed, 465 insertions(+), 668 deletions(-) create mode 100644 libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListener.java rename libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/{MapWayname.java => MapWayName.java} (54%) create mode 100644 libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WayNameView.java delete mode 100644 libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameLayoutProvider.java delete mode 100644 libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameView.java create mode 100644 libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListenerTest.java create mode 100644 libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayNameTest.java delete mode 100644 libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java diff --git a/app/src/androidTest/java/testapp/NavigationViewOrientationTest.java b/app/src/androidTest/java/testapp/NavigationViewOrientationTest.java index 5c7d608dc5e..6e21a51f690 100644 --- a/app/src/androidTest/java/testapp/NavigationViewOrientationTest.java +++ b/app/src/androidTest/java/testapp/NavigationViewOrientationTest.java @@ -134,8 +134,7 @@ public void onOrientationChange_waynameVisibilityIsRestored() { onView(withId(R.id.navigationMapView)).perform(swipeUp()); changeOrientation(orientationLandscape()); - NavigationMapboxMap navigationMapboxMap = getNavigationView().retrieveNavigationMapboxMap(); - boolean isWaynameVisible = navigationMapboxMap.isWaynameVisible(); + boolean isWaynameVisible = getNavigationView().isWayNameVisible(); assertFalse(isWaynameVisible); } diff --git a/codecov.yml b/codecov.yml index 65e1aeef7f4..8e40e4410c4 100644 --- a/codecov.yml +++ b/codecov.yml @@ -27,4 +27,7 @@ comment: ignore: - "**/ManeuversStyleKit.java" - - "**/LaneStyleKit.java" \ No newline at end of file + - "**/LaneStyleKit.java" + - "**/NavigationViewInstanceState.java" + - "**/NavigationMapboxMapInstanceState.java" + - "**/NavigationConstants.java" \ No newline at end of file diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationContract.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationContract.java index ba822ef4e5e..f7428cd3db6 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationContract.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationContract.java @@ -1,6 +1,7 @@ package com.mapbox.services.android.navigation.ui.v5; import android.location.Location; +import android.support.annotation.NonNull; import com.mapbox.api.directions.v5.models.DirectionsRoute; import com.mapbox.geojson.Point; @@ -16,7 +17,9 @@ interface View { boolean isSummaryBottomSheetHidden(); - void updateWaynameVisibility(boolean isVisible); + void updateWayNameVisibility(boolean isVisible); + + void updateWayNameView(@NonNull String wayName); void updateCameraTrackingMode(@NavigationCamera.TrackingMode int trackingMode); diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenter.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenter.java index 2d7bc50050c..5345ce20a57 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenter.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenter.java @@ -1,9 +1,11 @@ package com.mapbox.services.android.navigation.ui.v5; import android.location.Location; +import android.support.annotation.NonNull; import android.support.design.widget.BottomSheetBehavior; import com.mapbox.api.directions.v5.models.DirectionsRoute; +import com.mapbox.core.utils.TextUtils; import com.mapbox.geojson.Point; import com.mapbox.services.android.navigation.ui.v5.camera.NavigationCamera; @@ -23,7 +25,7 @@ void updateResumeState(boolean resumeState) { void onRecenterClick() { view.setSummaryBehaviorHideable(false); view.setSummaryBehaviorState(BottomSheetBehavior.STATE_EXPANDED); - view.updateWaynameVisibility(true); + view.updateWayNameVisibility(true); view.resetCameraPosition(); view.hideRecenterBtn(); } @@ -33,7 +35,7 @@ void onCameraTrackingDismissed() { view.setSummaryBehaviorHideable(true); view.setSummaryBehaviorState(BottomSheetBehavior.STATE_HIDDEN); view.updateCameraTrackingMode(NavigationCamera.NAVIGATION_TRACKING_MODE_NONE); - view.updateWaynameVisibility(false); + view.updateWayNameVisibility(false); } } @@ -46,7 +48,6 @@ void onSummaryBottomSheetHidden() { void onRouteUpdate(DirectionsRoute directionsRoute) { view.drawRoute(directionsRoute); if (!resumeState) { - view.updateWaynameVisibility(true); view.startCamera(directionsRoute); } } @@ -67,8 +68,21 @@ void onNavigationLocationUpdate(Location location) { view.updateNavigationMap(location); } + void onWayNameChanged(@NonNull String wayName) { + if (TextUtils.isEmpty(wayName)) { + view.updateWayNameVisibility(false); + return; + } + view.updateWayNameView(wayName); + view.updateWayNameVisibility(true); + } + + void onNavigationStopped() { + view.updateWayNameVisibility(false); + } + void onRouteOverviewClick() { - view.updateWaynameVisibility(false); + view.updateWayNameVisibility(false); view.updateCameraRouteOverview(); view.showRecenterBtn(); } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java index f7007ed451c..702a9f0c98f 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java @@ -1,7 +1,6 @@ package com.mapbox.services.android.navigation.ui.v5; import android.app.Activity; -import android.app.Fragment; import android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.LifecycleOwner; import android.arch.lifecycle.ViewModelProviders; @@ -33,6 +32,7 @@ import com.mapbox.services.android.navigation.ui.v5.instruction.NavigationAlertView; import com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap; import com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMapInstanceState; +import com.mapbox.services.android.navigation.ui.v5.map.WayNameView; import com.mapbox.services.android.navigation.ui.v5.summary.SummaryBottomSheet; import com.mapbox.services.android.navigation.v5.location.replay.ReplayRouteLocationEngine; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; @@ -75,6 +75,7 @@ public class NavigationView extends CoordinatorLayout implements LifecycleObserv private BottomSheetBehavior summaryBehavior; private ImageButton cancelBtn; private RecenterButton recenterBtn; + private WayNameView wayNameView; private ImageButton routeOverviewBtn; private NavigationPresenter navigationPresenter; @@ -141,8 +142,10 @@ public boolean onBackPressed() { */ public void onSaveInstanceState(Bundle outState) { int bottomSheetBehaviorState = summaryBehavior == null ? INVALID_STATE : summaryBehavior.getState(); - NavigationViewInstanceState navigationViewInstanceState = new NavigationViewInstanceState(bottomSheetBehaviorState, - recenterBtn.getVisibility(), instructionView.isShowingInstructionList()); + boolean isWayNameVisible = wayNameView.getVisibility() == VISIBLE; + NavigationViewInstanceState navigationViewInstanceState = new NavigationViewInstanceState( + bottomSheetBehaviorState, recenterBtn.getVisibility(), instructionView.isShowingInstructionList(), + isWayNameVisible, wayNameView.retrieveWayNameText()); String instanceKey = getContext().getString(R.string.navigation_view_instance_state); outState.putParcelable(instanceKey, navigationViewInstanceState); outState.putBoolean(getContext().getString(R.string.navigation_running), navigationViewModel.isRunning()); @@ -161,6 +164,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) { String instanceKey = getContext().getString(R.string.navigation_view_instance_state); NavigationViewInstanceState navigationViewInstanceState = savedInstanceState.getParcelable(instanceKey); recenterBtn.setVisibility(navigationViewInstanceState.getRecenterButtonVisibility()); + wayNameView.setVisibility(navigationViewInstanceState.isWayNameVisible() ? VISIBLE : INVISIBLE); + wayNameView.updateWayNameText(navigationViewInstanceState.getWayNameText()); resetBottomSheetState(navigationViewInstanceState.getBottomSheetBehaviorState()); updateInstructionListState(navigationViewInstanceState.isInstructionViewVisible()); mapInstanceState = savedInstanceState.getParcelable(MAP_INSTANCE_STATE_KEY); @@ -172,7 +177,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) { *

* In an {@link Activity} this should be in {@link Activity#onDestroy()}. *

- * In a {@link android.app.Fragment}, this should be in {@link Fragment#onDestroyView()}. + * In a {@link android.support.v4.app.Fragment}, this should + * be in {@link android.support.v4.app.Fragment#onDestroyView()}. */ public void onDestroy() { shutdown(); @@ -212,6 +218,7 @@ public void onStop() { @Override public void onMapReady(MapboxMap mapboxMap) { initializeNavigationMap(mapView, mapboxMap); + initializeWayNameListener(); onNavigationReadyCallback.onNavigationReady(navigationViewModel.isRunning()); isMapInitialized = true; } @@ -269,17 +276,6 @@ public void drawRoute(DirectionsRoute directionsRoute) { } } - private void initializeNavigationMap(MapView mapView, MapboxMap map) { - navigationMap = new NavigationMapboxMap(mapView, map); - if (mapInstanceState != null) { - navigationMap.restoreFrom(mapInstanceState); - return; - } - if (initialMapCameraPosition != null) { - map.setCameraPosition(initialMapCameraPosition); - } - } - @Override public void addMarker(Point position) { if (navigationMap != null) { @@ -293,23 +289,43 @@ public void clearMarkers() { } } - public void updateWaynameView(String wayname) { - if (navigationMap != null) { - navigationMap.updateWaynameView(wayname); - } + /** + * Provides the current visibility of the way name view. + * + * @return true if visible, false if not visible + */ + public boolean isWayNameVisible() { + return wayNameView.getVisibility() == VISIBLE; } + /** + * Updates the text of the way name view below the + * navigation icon. + *

+ * If you'd like to use this method without being overridden by the default way names + * values we provide, please disabled auto-query with + * {@link NavigationMapboxMap#updateWaynameQueryMap(boolean)}. + * + * @param wayName to update the view + */ @Override - public void updateWaynameVisibility(boolean isVisible) { - if (navigationMap != null) { - navigationMap.updateWaynameVisibility(isVisible); - } + public void updateWayNameView(@NonNull String wayName) { + wayNameView.updateWayNameText(wayName); } - public void updateWaynameQueryMap(boolean isEnabled) { - if (navigationMap != null) { - navigationMap.updateWaynameQueryMap(isEnabled); - } + /** + * Updates the visibility of the way name view that is show below + * the navigation icon. + *

+ * If you'd like to use this method without being overridden by the default visibility values + * values we provide, please disabled auto-query with + * {@link NavigationMapboxMap#updateWaynameQueryMap(boolean)}. + * + * @param isVisible true to show, false to hide + */ + @Override + public void updateWayNameVisibility(boolean isVisible) { + wayNameView.updateVisibility(isVisible); } @Override @@ -377,6 +393,7 @@ public void startNavigation(NavigationViewOptions options) { * @since 0.16.0 */ public void stopNavigation() { + navigationPresenter.onNavigationStopped(); navigationViewModel.stopNavigation(); } @@ -499,6 +516,7 @@ private void bind() { summaryBottomSheet = findViewById(R.id.summaryBottomSheet); cancelBtn = findViewById(R.id.cancelBtn); recenterBtn = findViewById(R.id.recenterBtn); + wayNameView = findViewById(R.id.wayNameView); routeOverviewBtn = findViewById(R.id.routeOverviewBtn); } @@ -527,6 +545,22 @@ private void initializeInstructionListListener() { navigationViewEventDispatcher)); } + private void initializeNavigationMap(MapView mapView, MapboxMap map) { + navigationMap = new NavigationMapboxMap(mapView, map); + if (mapInstanceState != null) { + navigationMap.restoreFrom(mapInstanceState); + return; + } + if (initialMapCameraPosition != null) { + map.setCameraPosition(initialMapCameraPosition); + } + } + + private void initializeWayNameListener() { + NavigationViewWayNameListener wayNameListener = new NavigationViewWayNameListener(navigationPresenter); + navigationMap.addOnWayNameChangedListener(wayNameListener); + } + private void updateSavedInstanceStateMapStyle(@Nullable Bundle savedInstanceState) { if (savedInstanceState != null) { String mapStyleUrl = ThemeSwitcher.retrieveMapStyle(getContext()); diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewInstanceState.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewInstanceState.java index 13db1a09070..f52c5b28c0e 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewInstanceState.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewInstanceState.java @@ -4,15 +4,20 @@ import android.os.Parcelable; class NavigationViewInstanceState implements Parcelable { + private int bottomSheetBehaviorState; private int recenterButtonVisibility; private boolean instructionViewVisible; + private boolean isWayNameVisible; + private String wayNameText; NavigationViewInstanceState(int bottomSheetBehaviorState, int recenterButtonVisibility, - boolean instructionViewVisible) { + boolean instructionViewVisible, boolean isWayNameVisible, String wayNameText) { this.bottomSheetBehaviorState = bottomSheetBehaviorState; this.recenterButtonVisibility = recenterButtonVisibility; this.instructionViewVisible = instructionViewVisible; + this.isWayNameVisible = isWayNameVisible; + this.wayNameText = wayNameText; } int getBottomSheetBehaviorState() { @@ -27,35 +32,45 @@ boolean isInstructionViewVisible() { return instructionViewVisible; } - private NavigationViewInstanceState(Parcel parcel) { - bottomSheetBehaviorState = parcel.readInt(); - recenterButtonVisibility = parcel.readInt(); - instructionViewVisible = parcel.readByte() != 0x00; + boolean isWayNameVisible() { + return isWayNameVisible; } - @Override - public int describeContents() { - return 0; + String getWayNameText() { + return wayNameText; + } + + private NavigationViewInstanceState(Parcel in) { + bottomSheetBehaviorState = in.readInt(); + recenterButtonVisibility = in.readInt(); + instructionViewVisible = in.readByte() != 0; + isWayNameVisible = in.readByte() != 0; + wayNameText = in.readString(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(bottomSheetBehaviorState); dest.writeInt(recenterButtonVisibility); - dest.writeByte((byte) (instructionViewVisible ? 0x01 : 0x00)); + dest.writeByte((byte) (instructionViewVisible ? 1 : 0)); + dest.writeByte((byte) (isWayNameVisible ? 1 : 0)); + dest.writeString(wayNameText); } - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { + @Override + public int describeContents() { + return 0; + } - @Override - public NavigationViewInstanceState createFromParcel(Parcel source) { - return new NavigationViewInstanceState(source); - } + public static final Creator CREATOR = new Creator() { + @Override + public NavigationViewInstanceState createFromParcel(Parcel in) { + return new NavigationViewInstanceState(in); + } - @Override - public NavigationViewInstanceState[] newArray(int size) { - return new NavigationViewInstanceState[size]; - } - }; + @Override + public NavigationViewInstanceState[] newArray(int size) { + return new NavigationViewInstanceState[size]; + } + }; } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListener.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListener.java new file mode 100644 index 00000000000..b4a847d66bd --- /dev/null +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListener.java @@ -0,0 +1,19 @@ +package com.mapbox.services.android.navigation.ui.v5; + +import android.support.annotation.NonNull; + +import com.mapbox.services.android.navigation.ui.v5.map.OnWayNameChangedListener; + +class NavigationViewWayNameListener implements OnWayNameChangedListener { + + private final NavigationPresenter presenter; + + NavigationViewWayNameListener(NavigationPresenter presenter) { + this.presenter = presenter; + } + + @Override + public void onWayNameChanged(@NonNull String wayName) { + presenter.onWayNameChanged(wayName); + } +} diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapLayerInteractor.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapLayerInteractor.java index 360c4517565..cd847ded240 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapLayerInteractor.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapLayerInteractor.java @@ -1,7 +1,5 @@ package com.mapbox.services.android.navigation.ui.v5.map; -import android.graphics.Bitmap; - import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.style.layers.Layer; import com.mapbox.mapboxsdk.style.layers.LineLayer; @@ -21,18 +19,10 @@ class MapLayerInteractor { this.mapboxMap = mapboxMap; } - void addLayer(Layer layer) { - mapboxMap.addLayer(layer); - } - Layer retrieveLayerFromId(String layerId) { return mapboxMap.getLayerAs(layerId); } - void addLayerImage(String imageName, Bitmap image) { - mapboxMap.addImage(imageName, image); - } - void updateLayerVisibility(boolean isVisible, String layerIdentifier) { // TODO add sourceIdentifier logic when https://github.com/mapbox/mapbox-gl-native/issues/12691 lands List layers = mapboxMap.getLayers(); 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 similarity index 54% rename from libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayname.java rename to libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayName.java index 4eca50c0793..7834f94af4b 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 @@ -1,6 +1,5 @@ package com.mapbox.services.android.navigation.ui.v5.map; -import android.graphics.Bitmap; import android.graphics.PointF; import android.location.Location; import android.os.AsyncTask; @@ -8,9 +7,6 @@ import com.mapbox.geojson.Feature; import com.mapbox.geojson.Point; -import com.mapbox.mapboxsdk.style.layers.Layer; -import com.mapbox.mapboxsdk.style.layers.Property; -import com.mapbox.mapboxsdk.style.layers.SymbolLayer; import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation; import java.util.ArrayList; @@ -18,53 +14,38 @@ 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; import static com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap.STREETS_LAYER_ID; -import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.MAPBOX_WAYNAME_ICON; -class MapWayname { +class MapWayName { private static final String NAME_PROPERTY = "name"; + private static final String EMPTY_CURRENT_WAY_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 boolean isAutoQueryEnabled; - private boolean isVisible; private FeatureFilterTask filterTask; - private String wayname = ""; + private String wayName = EMPTY_CURRENT_WAY_NAME; - MapWayname(WaynameLayoutProvider layoutProvider, MapLayerInteractor layerInteractor, - WaynameFeatureFinder featureInteractor, MapPaddingAdjustor paddingAdjustor) { - this.layoutProvider = layoutProvider; - this.layerInteractor = layerInteractor; + MapWayName(WaynameFeatureFinder featureInteractor, MapPaddingAdjustor paddingAdjustor) { this.featureInteractor = featureInteractor; paddingAdjustor.updatePaddingWithDefault(); this.onWayNameChangedListeners = new HashSet<>(); } - void updateWaynameWithPoint(PointF point, SymbolLayer waynameLayer) { + void updateWayNameWithPoint(PointF point) { if (!isAutoQueryEnabled) { return; } List roadLabelFeatures = findRoadLabelFeatures(point); boolean invalidLabelFeatures = roadLabelFeatures.isEmpty(); if (invalidLabelFeatures) { - updateVisibility(false, waynameLayer); return; } - executeFeatureFilterTask(roadLabelFeatures, waynameLayer); - } - - void updateWaynameLayer(String wayname, SymbolLayer waynameLayer) { - if (waynameLayer != null) { - createWaynameIcon(wayname, waynameLayer); - } + executeFeatureFilterTask(roadLabelFeatures); } void updateProgress(Location currentLocation, List currentStepPoints) { @@ -76,23 +57,10 @@ void updateProgress(Location currentLocation, List currentStepPoints) { } } - void updateWaynameVisibility(boolean isVisible, SymbolLayer waynameLayer) { - this.isVisible = isVisible; - updateVisibility(isVisible, waynameLayer); - } - - void updateWaynameQueryMap(boolean isEnabled) { + void updateWayNameQueryMap(boolean isEnabled) { isAutoQueryEnabled = isEnabled; } - boolean isVisible() { - return isVisible; - } - - String retrieveWayname() { - return wayname; - } - void addProgressChangeListener(MapboxNavigation navigation) { this.navigation = navigation; navigation.addProgressChangeListener(progressChangeListener); @@ -126,7 +94,7 @@ private List findRoadLabelFeatures(PointF point) { return featureInteractor.queryRenderedFeatures(point, layerIds); } - private void executeFeatureFilterTask(List roadFeatures, final SymbolLayer waynameLayer) { + private void executeFeatureFilterTask(List roadFeatures) { if (isTaskRunning()) { filterTask.cancel(true); } @@ -136,7 +104,7 @@ private void executeFeatureFilterTask(List roadFeatures, final SymbolLa new OnFeatureFilteredCallback() { @Override public void onFeatureFiltered(@NonNull Feature feature) { - updateWaynameLayerWithNameProperty(waynameLayer, feature); + updateWayNameLayerWithNameProperty(feature); } }); filterTask.execute(); @@ -153,50 +121,17 @@ private boolean hasValidProgressData() { return currentLocation != null && !currentStepPoints.isEmpty(); } - private void createWaynameIcon(String wayname, Layer waynameLayer) { - 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) { - return (isVisible && isWaynameVisible(waynameLayer)) || !isVisible && !isWaynameVisible(waynameLayer); - } - - private boolean isWaynameVisible(Layer waynameLayer) { - return waynameLayer != null && waynameLayer.getVisibility().getValue().contentEquals(Property.VISIBLE); - } - - private void adjustWaynameVisibility(boolean isVisible, Layer waynameLayer) { - if (waynameLayer != null) { - waynameLayer.setProperties(visibility(isVisible ? Property.VISIBLE : Property.NONE)); - } - } - - private void updateWaynameLayerWithNameProperty(SymbolLayer waynameLayer, Feature roadFeature) { + private void updateWayNameLayerWithNameProperty(Feature roadFeature) { boolean hasValidNameProperty = roadFeature.hasNonNullValueForProperty(NAME_PROPERTY); if (hasValidNameProperty) { - String currentWayname = roadFeature.getStringProperty(NAME_PROPERTY); - boolean newWayname = !wayname.contentEquals(currentWayname); - if (newWayname) { - updateListenersWith(currentWayname); - wayname = currentWayname; - if (isVisible) { - updateVisibility(true, waynameLayer); - } - updateWaynameLayer(wayname, waynameLayer); + String currentWayName = roadFeature.getStringProperty(NAME_PROPERTY); + boolean newWayName = !wayName.contentEquals(currentWayName); + if (newWayName) { + updateListenersWith(currentWayName); + wayName = currentWayName; } } else { - updateVisibility(false, waynameLayer); + updateListenersWith(EMPTY_CURRENT_WAY_NAME); } } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameProgressChangeListener.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameProgressChangeListener.java index 862ed43af70..73a8e836792 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameProgressChangeListener.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameProgressChangeListener.java @@ -7,14 +7,14 @@ class MapWaynameProgressChangeListener implements ProgressChangeListener { - private final MapWayname mapWayname; + private final MapWayName mapWayName; - MapWaynameProgressChangeListener(MapWayname mapWayname) { - this.mapWayname = mapWayname; + MapWaynameProgressChangeListener(MapWayName mapWayName) { + this.mapWayName = mapWayName; } @Override public void onProgressChange(Location location, RouteProgress routeProgress) { - mapWayname.updateProgress(location, routeProgress.currentStepPoints()); + mapWayName.updateProgress(location, routeProgress.currentStepPoints()); } } 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 2375aec2935..93acb449b89 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 @@ -23,7 +23,6 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.style.layers.LineLayer; -import com.mapbox.mapboxsdk.style.layers.SymbolLayer; import com.mapbox.mapboxsdk.style.sources.VectorSource; import com.mapbox.services.android.navigation.ui.v5.NavigationSnapshotReadyCallback; import com.mapbox.services.android.navigation.ui.v5.R; @@ -36,24 +35,9 @@ import java.util.ArrayList; import java.util.List; -import static com.mapbox.mapboxsdk.style.expressions.Expression.exponential; -import static com.mapbox.mapboxsdk.style.expressions.Expression.interpolate; -import static com.mapbox.mapboxsdk.style.expressions.Expression.stop; -import static com.mapbox.mapboxsdk.style.expressions.Expression.zoom; -import static com.mapbox.mapboxsdk.style.layers.Property.ICON_ANCHOR_TOP; -import static com.mapbox.mapboxsdk.style.layers.Property.ICON_ROTATION_ALIGNMENT_VIEWPORT; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAllowOverlap; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAnchor; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconIgnorePlacement; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconOffset; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconRotationAlignment; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineColor; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineWidth; -import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.MAPBOX_LOCATION_SOURCE; -import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.MAPBOX_WAYNAME_LAYER; import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.NAVIGATION_MINIMUM_MAP_ZOOM; -import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.WAYNAME_OFFSET; /** * Wrapper class for {@link MapboxMap}. @@ -80,8 +64,7 @@ public class NavigationMapboxMap { private NavigationMapRoute mapRoute; private LocationComponent locationComponent; private MapPaddingAdjustor mapPaddingAdjustor; - private MapWayname mapWayName; - private SymbolLayer waynameLayer; + private MapWayName mapWayName; private MapLayerInteractor layerInteractor; private List mapMarkers = new ArrayList<>(); @@ -97,7 +80,7 @@ public NavigationMapboxMap(@NonNull MapView mapView, @NonNull MapboxMap mapboxMa initializeLocationComponent(mapView, mapboxMap); initializeMapPaddingAdjustor(mapView, mapboxMap); initializeMapLayerInteractor(mapboxMap); - initializeWayname(mapView, mapboxMap, layerInteractor, mapPaddingAdjustor); + initializeWayname(mapboxMap, mapPaddingAdjustor); initializeRoute(mapView, mapboxMap); initializeCamera(mapboxMap); } @@ -118,7 +101,7 @@ public NavigationMapboxMap(@NonNull MapView mapView, @NonNull MapboxMap mapboxMa } // Package private (no modifier) for testing purposes - NavigationMapboxMap(MapWayname mapWayName) { + NavigationMapboxMap(MapWayName mapWayName) { this.mapWayName = mapWayName; } @@ -197,14 +180,12 @@ 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(); int[] mapPadding = mapPaddingAdjustor.retrieveCurrentPadding(); boolean isUsingDefault = mapPaddingAdjustor.isUsingDefault(); @NavigationCamera.TrackingMode int cameraTrackingMode = mapCamera.getCameraTrackingMode(); NavigationMapboxMapInstanceState instanceState = new NavigationMapboxMapInstanceState( - isVisible, waynameText, mapPadding, isUsingDefault, cameraTrackingMode + mapPadding, isUsingDefault, cameraTrackingMode ); outState.putParcelable(key, instanceState); } @@ -221,11 +202,6 @@ public void saveStateWith(String key, Bundle outState) { * @param instanceState to extract state variables */ public void restoreFrom(NavigationMapboxMapInstanceState instanceState) { - boolean isVisible = instanceState.isWaynameVisible(); - updateWaynameVisibility(isVisible); - if (isVisible) { - updateWaynameView(instanceState.retrieveWayname()); - } updateCameraTrackingMode(instanceState.getCameraTrackingMode()); MapPaddingInstanceState mapPadding = instanceState.retrieveMapPadding(); if (mapPadding.shouldUseDefault()) { @@ -363,42 +339,13 @@ public void showRouteOverview(int[] padding) { mapCamera.showRouteOverview(padding); } - /** - * Set the text of the way name chip underneath the location icon. - *

- * The text will only be set if the way name is visible / enabled. - * - * @param wayname text to be set - */ - public void updateWaynameView(String wayname) { - mapWayName.updateWaynameLayer(wayname, waynameLayer); - } - - /** - * Hide or show the way name chip underneath the location icon. - * - * @param isVisible true to show, false to hide - */ - public void updateWaynameVisibility(boolean isVisible) { - mapWayName.updateWaynameVisibility(isVisible, waynameLayer); - } - - /** - * Provides current visibility of the map way name. - * - * @return true if visible, false if not - */ - public boolean isWaynameVisible() { - return mapWayName.isVisible(); - } - /** * Enables or disables the way name chip underneath the location icon. * * @param isEnabled true to enable, false to disable */ public void updateWaynameQueryMap(boolean isEnabled) { - mapWayName.updateWaynameQueryMap(isEnabled); + mapWayName.updateWayNameQueryMap(isEnabled); } /** @@ -562,35 +509,10 @@ private void initializeCamera(MapboxMap map) { mapCamera = new NavigationCamera(map, locationComponent); } - private void initializeWayname(MapView mapView, MapboxMap mapboxMap, MapLayerInteractor layerInteractor, - MapPaddingAdjustor paddingAdjustor) { + private void initializeWayname(MapboxMap mapboxMap, MapPaddingAdjustor paddingAdjustor) { initializeStreetsSource(mapboxMap); - WaynameLayoutProvider layoutProvider = new WaynameLayoutProvider(mapView.getContext()); - WaynameFeatureFinder featureInteractor = new WaynameFeatureFinder(mapboxMap); - initializeWaynameLayer(layerInteractor); - mapWayName = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); - } - - private void initializeWaynameLayer(MapLayerInteractor layerInteractor) { - waynameLayer = createWaynameLayer(); - layerInteractor.addLayer(waynameLayer); - } - - private SymbolLayer createWaynameLayer() { - return new SymbolLayer(MAPBOX_WAYNAME_LAYER, MAPBOX_LOCATION_SOURCE) - .withProperties( - iconAllowOverlap(true), - iconIgnorePlacement(true), - iconSize( - interpolate(exponential(1f), zoom(), - stop(0f, 0.6f), - stop(18f, 1.2f) - ) - ), - iconAnchor(ICON_ANCHOR_TOP), - iconOffset(WAYNAME_OFFSET), - iconRotationAlignment(ICON_ROTATION_ALIGNMENT_VIEWPORT) - ); + WaynameFeatureFinder featureFinder = new WaynameFeatureFinder(mapboxMap); + mapWayName = new MapWayName(featureFinder, paddingAdjustor); } private void initializeMapLayerInteractor(MapboxMap mapboxMap) { @@ -634,6 +556,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); } } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapInstanceState.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapInstanceState.java index 16510f844a9..28404fc33df 100644 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapInstanceState.java +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/NavigationMapboxMapInstanceState.java @@ -7,32 +7,18 @@ public class NavigationMapboxMapInstanceState implements Parcelable { - private final boolean isWaynameVisible; - private final String waynameText; private final MapPaddingInstanceState mapPaddingInstanceState; - @NavigationCamera.TrackingMode private final int cameraTrackingMode; - NavigationMapboxMapInstanceState(boolean isWaynameVisible, - String waynameText, - int[] currentPadding, + NavigationMapboxMapInstanceState(int[] currentPadding, boolean shouldUseDefaultPadding, @NavigationCamera.TrackingMode int cameraTrackingMode) { - this.isWaynameVisible = isWaynameVisible; - this.waynameText = waynameText; + this.mapPaddingInstanceState = new MapPaddingInstanceState(currentPadding, shouldUseDefaultPadding); this.cameraTrackingMode = cameraTrackingMode; } - boolean isWaynameVisible() { - return isWaynameVisible; - } - - String retrieveWayname() { - return waynameText; - } - MapPaddingInstanceState retrieveMapPadding() { return mapPaddingInstanceState; } @@ -43,16 +29,12 @@ int getCameraTrackingMode() { } private NavigationMapboxMapInstanceState(Parcel in) { - isWaynameVisible = in.readByte() != 0; - waynameText = in.readString(); mapPaddingInstanceState = in.readParcelable(MapPaddingInstanceState.class.getClassLoader()); cameraTrackingMode = in.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeByte((byte) (isWaynameVisible ? 1 : 0)); - dest.writeString(waynameText); dest.writeParcelable(mapPaddingInstanceState, flags); dest.writeInt(cameraTrackingMode); } 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 index ad1cd56185a..3dd6709b367 100644 --- 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 @@ -1,11 +1,14 @@ package com.mapbox.services.android.navigation.ui.v5.map; +import android.support.annotation.NonNull; + /** * 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)}). + * regardless of the map way name visibility + * ({@link com.mapbox.services.android.navigation.ui.v5.NavigationView#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 { @@ -16,5 +19,5 @@ public interface OnWayNameChangedListener { * * @param wayName found along the route */ - void onWayNameChanged(String wayName); + void onWayNameChanged(@NonNull String wayName); } diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WayNameView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WayNameView.java new file mode 100644 index 00000000000..6d81ac63155 --- /dev/null +++ b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WayNameView.java @@ -0,0 +1,64 @@ +package com.mapbox.services.android.navigation.ui.v5.map; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.graphics.drawable.DrawableCompat; +import android.util.AttributeSet; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.mapbox.services.android.navigation.ui.v5.R; +import com.mapbox.services.android.navigation.ui.v5.ThemeSwitcher; + +public class WayNameView extends FrameLayout { + + private TextView wayNameText; + + public WayNameView(Context context) { + super(context); + initialize(); + } + + public WayNameView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initialize(); + } + + public WayNameView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initialize(); + } + + public void updateWayNameText(String wayNameText) { + this.wayNameText.setText(wayNameText); + } + + public String retrieveWayNameText() { + return wayNameText.getText().toString(); + } + + public void updateVisibility(boolean isVisible) { + int visibility = isVisible ? VISIBLE : INVISIBLE; + if (getVisibility() != visibility) { + setVisibility(visibility); + } + } + + private void initialize() { + inflate(getContext(), R.layout.wayname_view_layout, this); + wayNameText = findViewById(R.id.waynameText); + Drawable waynameTextBackground = wayNameText.getBackground(); + initializeBackground(waynameTextBackground); + } + + private void initializeBackground(Drawable waynameTextBackground) { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) { + int navigationViewPrimaryColor = ThemeSwitcher.retrieveThemeColor(getContext(), + R.attr.navigationViewPrimary); + Drawable soundChipBackground = DrawableCompat.wrap(waynameTextBackground).mutate(); + DrawableCompat.setTint(soundChipBackground, navigationViewPrimaryColor); + } + } +} diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameLayoutProvider.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameLayoutProvider.java deleted file mode 100644 index 46db06bf9de..00000000000 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameLayoutProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mapbox.services.android.navigation.ui.v5.map; - -import android.content.Context; -import android.graphics.Bitmap; - -import com.mapbox.services.android.navigation.ui.v5.utils.ViewUtils; - -class WaynameLayoutProvider { - - private Context context; - - WaynameLayoutProvider(Context context) { - this.context = context; - } - - Bitmap generateLayoutBitmap(String wayname) { - WaynameView waynameView = new WaynameView(context); - waynameView.setWaynameText(wayname); - return ViewUtils.loadBitmapFromView(waynameView); - } -} diff --git a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameView.java b/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameView.java deleted file mode 100644 index fcf79bf74f4..00000000000 --- a/libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/WaynameView.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.mapbox.services.android.navigation.ui.v5.map; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.widget.CardView; -import android.widget.TextView; - -import com.mapbox.services.android.navigation.ui.v5.R; -import com.mapbox.services.android.navigation.ui.v5.ThemeSwitcher; - -class WaynameView extends CardView { - - private static final int BACKGROUND_ALPHA = 220; - - private TextView waynameText; - private int waynameHeight; - - WaynameView(Context context) { - super(context); - init(); - waynameHeight = (int) context.getResources().getDimension(R.dimen.wayname_view_height); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, waynameHeight); - } - - void setWaynameText(String waynameText) { - this.waynameText.setText(waynameText); - } - - private void init() { - inflate(getContext(), R.layout.wayname_view_layout, this); - waynameText = findViewById(R.id.waynameText); - Drawable waynameTextBackground = waynameText.getBackground(); - initializeBackground(waynameTextBackground); - } - - private void initializeBackground(Drawable waynameTextBackground) { - waynameTextBackground.setAlpha(BACKGROUND_ALPHA); - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) { - int navigationViewPrimaryColor = ThemeSwitcher.retrieveThemeColor(getContext(), - R.attr.navigationViewPrimary); - Drawable soundChipBackground = DrawableCompat.wrap(waynameTextBackground).mutate(); - DrawableCompat.setTint(soundChipBackground, navigationViewPrimaryColor); - } - } -} diff --git a/libandroid-navigation-ui/src/main/res/layout-land/navigation_view_layout.xml b/libandroid-navigation-ui/src/main/res/layout-land/navigation_view_layout.xml index 927543dedce..169f07c1c1b 100644 --- a/libandroid-navigation-ui/src/main/res/layout-land/navigation_view_layout.xml +++ b/libandroid-navigation-ui/src/main/res/layout-land/navigation_view_layout.xml @@ -37,6 +37,15 @@ app:layout_anchor="@id/summaryBottomSheet" app:layout_anchorGravity="top|left"/> + + @@ -38,6 +38,14 @@ app:layout_anchor="@id/summaryBottomSheet" app:layout_anchorGravity="top|left"/> + - + android:layout_height="wrap_content" + android:paddingBottom="@dimen/wayname_bottom_padding"> + + + + diff --git a/libandroid-navigation-ui/src/main/res/values/dimens.xml b/libandroid-navigation-ui/src/main/res/values/dimens.xml index 632c2e3682d..df1ccb9465f 100644 --- a/libandroid-navigation-ui/src/main/res/values/dimens.xml +++ b/libandroid-navigation-ui/src/main/res/values/dimens.xml @@ -2,4 +2,8 @@ 8dp 16dp + 8dp + 16dp + 2dp + 200dp \ No newline at end of file diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenterTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenterTest.java index 0a9782b5a04..5c197dc7072 100644 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenterTest.java +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenterTest.java @@ -34,7 +34,7 @@ public void onRouteOverviewButtonClick_mapWaynameIsHidden() { presenter.onRouteOverviewClick(); - verify(view).updateWaynameVisibility(false); + verify(view).updateWayNameVisibility(false); } @Test @@ -58,12 +58,53 @@ public void onRecenterBtnClick_cameraIsResetToTracking() { } @Test - public void onRecenterBtnClick_mapWaynmeIsShown() { + public void onRecenterBtnClick_mapWayNameIsShown() { NavigationContract.View view = mock(NavigationContract.View.class); NavigationPresenter presenter = new NavigationPresenter(view); presenter.onRecenterClick(); - verify(view).updateWaynameVisibility(true); + verify(view).updateWayNameVisibility(true); + } + + @Test + public void onWayNameChanged_mapWayNameIsShown() { + NavigationContract.View view = mock(NavigationContract.View.class); + NavigationPresenter presenter = new NavigationPresenter(view); + + presenter.onWayNameChanged("Some way name"); + + verify(view).updateWayNameVisibility(true); + } + + @Test + public void onWayNameChanged_mapWayNameIsUpdated() { + String someWayName = "Some way name"; + NavigationContract.View view = mock(NavigationContract.View.class); + NavigationPresenter presenter = new NavigationPresenter(view); + + presenter.onWayNameChanged(someWayName); + + verify(view).updateWayNameView(someWayName); + } + + @Test + public void onWayNameChanged_mapWayNameIsHidden() { + NavigationContract.View view = mock(NavigationContract.View.class); + NavigationPresenter presenter = new NavigationPresenter(view); + + presenter.onWayNameChanged(""); + + verify(view).updateWayNameVisibility(false); + } + + @Test + public void onNavigationStopped_mapWayNameIsHidden() { + NavigationContract.View view = mock(NavigationContract.View.class); + NavigationPresenter presenter = new NavigationPresenter(view); + + presenter.onNavigationStopped(); + + verify(view).updateWayNameVisibility(false); } } diff --git a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListenerTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListenerTest.java new file mode 100644 index 00000000000..dabb618fcf7 --- /dev/null +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewWayNameListenerTest.java @@ -0,0 +1,23 @@ +package com.mapbox.services.android.navigation.ui.v5; + +import com.mapbox.services.android.navigation.ui.v5.map.OnWayNameChangedListener; + +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class NavigationViewWayNameListenerTest { + + @Test + public void onWayNameChanged_presenterReceivesNewWayName() { + NavigationPresenter presenter = mock(NavigationPresenter.class); + String newWayName = "New way name"; + OnWayNameChangedListener listener = new NavigationViewWayNameListener(presenter); + + listener.onWayNameChanged(newWayName); + + verify(presenter).onWayNameChanged(newWayName); + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..e897c37e614 --- /dev/null +++ b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWayNameTest.java @@ -0,0 +1,111 @@ +package com.mapbox.services.android.navigation.ui.v5.map; + +import android.graphics.PointF; +import android.location.Location; +import android.support.annotation.NonNull; + +import com.mapbox.geojson.Feature; +import com.mapbox.geojson.Point; +import com.mapbox.mapboxsdk.style.layers.PropertyValue; +import com.mapbox.mapboxsdk.style.layers.SymbolLayer; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import java.util.ArrayList; +import java.util.List; + +import static junit.framework.Assert.assertFalse; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(RobolectricTestRunner.class) +public class MapWayNameTest { + + @Test + public void onUpdateWaynameWithPoint_queryRenderedFeaturesIsCalled() { + WaynameFeatureFinder featureFinder = mock(WaynameFeatureFinder.class); + MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); + String[] layerIds = {"streetsLayer"}; + PointF point = mock(PointF.class); + MapWayName mapWayName = new MapWayName(featureFinder, paddingAdjustor); + mapWayName.updateWayNameQueryMap(true); + + mapWayName.updateWayNameWithPoint(point); + + verify(featureFinder).queryRenderedFeatures(point, layerIds); + } + + @Test + public void addOnWayNameChangedListener_duplicateListenerIgnored() { + String roadName = "roadName"; + PointF point = mock(PointF.class); + List roads = buildRoadFeatureList(roadName); + MapWayName mapWayName = buildMapWayname(point, roads); + List stepPoints = new ArrayList<>(); + stepPoints.add(mock(Point.class)); + mapWayName.updateProgress(mock(Location.class), stepPoints); + 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); + List roads = buildRoadFeatureList(roadName); + MapWayName mapWayName = buildMapWayname(point, roads); + List stepPoints = new ArrayList<>(); + stepPoints.add(mock(Point.class)); + mapWayName.updateProgress(mock(Location.class), stepPoints); + 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); + SymbolLayer waynameLayer = mock(SymbolLayer.class); + List roads = new ArrayList<>(); + Feature road = mock(Feature.class); + roads.add(road); + MapWayName mapWayName = buildMapWayname(point, roads); + + mapWayName.updateWayNameWithPoint(point); + + verify(waynameLayer, times(0)).setProperties(any(PropertyValue.class)); + } + + @NonNull + private MapWayName buildMapWayname(PointF point, List roads) { + String[] layerIds = {"streetsLayer"}; + WaynameFeatureFinder featureInteractor = mock(WaynameFeatureFinder.class); + when(featureInteractor.queryRenderedFeatures(point, layerIds)).thenReturn(roads); + MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); + MapWayName mapWayName = new MapWayName(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/MapWaynameTest.java b/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java deleted file mode 100644 index 8adf0e86481..00000000000 --- a/libandroid-navigation-ui/src/test/java/com/mapbox/services/android/navigation/ui/v5/map/MapWaynameTest.java +++ /dev/null @@ -1,318 +0,0 @@ -package com.mapbox.services.android.navigation.ui.v5.map; - -import android.graphics.Bitmap; -import android.graphics.PointF; -import android.location.Location; -import android.support.annotation.NonNull; - -import com.mapbox.geojson.Feature; -import com.mapbox.geojson.Point; -import com.mapbox.mapboxsdk.style.layers.Property; -import com.mapbox.mapboxsdk.style.layers.PropertyValue; -import com.mapbox.mapboxsdk.style.layers.SymbolLayer; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -import java.util.ArrayList; -import java.util.List; - -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility; -import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.MAPBOX_WAYNAME_ICON; -import static com.mapbox.services.android.navigation.v5.navigation.NavigationConstants.MAPBOX_WAYNAME_LAYER; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(RobolectricTestRunner.class) -public class MapWaynameTest { - - @Test - public void onUpdateWaynameWithPoint_queryRenderedFeaturesIsCalled() { - WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - SymbolLayer waynameLayer = mock(SymbolLayer.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.VISIBLE)); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - WaynameFeatureFinder featureInteractor = mock(WaynameFeatureFinder.class); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - String[] layerIds = {"streetsLayer"}; - PointF point = mock(PointF.class); - MapWayname mapWayname = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); - mapWayname.updateWaynameVisibility(true, waynameLayer); - mapWayname.updateWaynameQueryMap(true); - - mapWayname.updateWaynameWithPoint(point, waynameLayer); - - verify(featureInteractor).queryRenderedFeatures(point, layerIds); - } - - @Test - public void onRoadsReturnedFromQuery_layoutIconAdded() { - String roadName = "roadName"; - PointF point = mock(PointF.class); - SymbolLayer waynameLayer = mock(SymbolLayer.class); - List roads = buildRoadFeatureList(roadName); - WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); - when(layoutProvider.generateLayoutBitmap(roadName)).thenReturn(mock(Bitmap.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); - - mapWayname.updateWaynameWithPoint(point, waynameLayer); - - 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); - SymbolLayer waynameLayer = mock(SymbolLayer.class); - List roads = new ArrayList<>(); - Feature road = mock(Feature.class); - roads.add(road); - MapWayname mapWayname = buildMapWayname(point, waynameLayer, roads); - - mapWayname.updateWaynameWithPoint(point, waynameLayer); - - verify(waynameLayer, times(0)).setProperties(any(PropertyValue.class)); - } - - @Test - public void onVisibiltySetToFalse_paddingIsAdjusted() { - SymbolLayer waynameLayer = mock(SymbolLayer.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.VISIBLE)); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - - buildMapWayname(layerInteractor, paddingAdjustor); - - verify(paddingAdjustor).updatePaddingWithDefault(); - } - - @Test - public void onVisibiltySetToTrue_paddingIsAdjusted() { - SymbolLayer waynameLayer = mock(SymbolLayer.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.NONE)); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - MapWayname mapWayname = buildMapWayname(layerInteractor, paddingAdjustor); - - mapWayname.updateWaynameVisibility(true, waynameLayer); - - verify(paddingAdjustor).updatePaddingWithDefault(); - } - - @Test - public void onVisibiltySetToFalse_isVisibleReturnsFalse() { - SymbolLayer waynameLayer = mock(SymbolLayer.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.VISIBLE)); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - MapWayname mapWayname = buildMapWayname(layerInteractor, paddingAdjustor); - - mapWayname.updateWaynameVisibility(false, waynameLayer); - - assertFalse(mapWayname.isVisible()); - } - - @Test - public void onVisibiltySetToTrue_isVisibleReturnsTrue() { - SymbolLayer waynameLayer = mock(SymbolLayer.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.NONE)); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - MapWayname mapWayname = buildMapWayname(layerInteractor, paddingAdjustor); - - mapWayname.updateWaynameVisibility(true, waynameLayer); - - assertTrue(mapWayname.isVisible()); - } - - @Test - public void onRoadsReturnedFromQuery_layoutProviderGeneratesBitmap() { - String roadName = "roadName"; - PointF point = mock(PointF.class); - SymbolLayer waynameLayer = mock(SymbolLayer.class); - List roads = buildRoadFeatureList(roadName); - WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); - when(layoutProvider.generateLayoutBitmap(roadName)).thenReturn(mock(Bitmap.class)); - MapWayname mapWayname = buildMapWayname(point, layoutProvider, waynameLayer, roads); - mapWayname.updateWaynameVisibility(true, waynameLayer); - List stepPoints = new ArrayList<>(); - stepPoints.add(mock(Point.class)); - mapWayname.updateProgress(mock(Location.class), stepPoints); - - mapWayname.updateWaynameWithPoint(point, waynameLayer); - - verify(layoutProvider).generateLayoutBitmap(roadName); - } - - @Test - public void onUpdateWaynameLayer_layerImageIsAdded() { - String roadName = "roadName"; - SymbolLayer waynameLayer = mock(SymbolLayer.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.VISIBLE)); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - Bitmap bitmap = mock(Bitmap.class); - WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); - when(layoutProvider.generateLayoutBitmap(roadName)).thenReturn(bitmap); - MapWayname mapWayname = buildMapWayname(layoutProvider, layerInteractor); - - mapWayname.updateWaynameLayer(roadName, waynameLayer); - - verify(layerInteractor).addLayerImage(MAPBOX_WAYNAME_ICON, bitmap); - } - - @NonNull - private MapWayname buildMapWayname(PointF point, WaynameLayoutProvider layoutProvider, - SymbolLayer waynameLayer, List roads) { - String[] layerIds = {"streetsLayer"}; - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.VISIBLE)); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - WaynameFeatureFinder featureInteractor = mock(WaynameFeatureFinder.class); - when(featureInteractor.queryRenderedFeatures(point, layerIds)).thenReturn(roads); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - MapWayname mapWayname = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); - mapWayname.updateWaynameQueryMap(true); - return mapWayname; - } - - @NonNull - private MapWayname buildMapWayname(WaynameLayoutProvider layoutProvider, MapLayerInteractor layerInteractor) { - WaynameFeatureFinder featureInteractor = mock(WaynameFeatureFinder.class); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - MapWayname mapWayname = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); - mapWayname.updateWaynameQueryMap(true); - return mapWayname; - } - - @NonNull - private MapWayname buildMapWayname(MapLayerInteractor layerInteractor, MapPaddingAdjustor paddingAdjustor) { - WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); - WaynameFeatureFinder featureInteractor = mock(WaynameFeatureFinder.class); - MapWayname mapWayname = new MapWayname(layoutProvider, layerInteractor, featureInteractor, paddingAdjustor); - mapWayname.updateWaynameQueryMap(true); - return mapWayname; - } - - @NonNull - private MapWayname buildMapWayname(PointF point, SymbolLayer waynameLayer, List roads) { - String roadName = "roadName"; - String[] layerIds = {"streetsLayer"}; - WaynameLayoutProvider layoutProvider = mock(WaynameLayoutProvider.class); - when(layoutProvider.generateLayoutBitmap(roadName)).thenReturn(mock(Bitmap.class)); - MapLayerInteractor layerInteractor = mock(MapLayerInteractor.class); - when(waynameLayer.getVisibility()).thenReturn(visibility(Property.VISIBLE)); - when(layerInteractor.retrieveLayerFromId(MAPBOX_WAYNAME_LAYER)).thenReturn(waynameLayer); - WaynameFeatureFinder featureInteractor = mock(WaynameFeatureFinder.class); - when(featureInteractor.queryRenderedFeatures(point, layerIds)).thenReturn(roads); - MapPaddingAdjustor paddingAdjustor = mock(MapPaddingAdjustor.class); - 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 58b52d0638f..a107b37fb88 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 @@ -105,7 +105,7 @@ public void showAlternativeRoutes_correctVisibilityIsSet() { @Test public void addOnWayNameChangedListener_listenerIsAddedToMapWayname() { - MapWayname mapWayName = mock(MapWayname.class); + MapWayName mapWayName = mock(MapWayName.class); NavigationMapboxMap theNavigationMap = new NavigationMapboxMap(mapWayName); OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class); @@ -116,7 +116,7 @@ public void addOnWayNameChangedListener_listenerIsAddedToMapWayname() { @Test public void removeOnWayNameChangedListener_listenerIsRemovedFromMapWayname() { - MapWayname mapWayName = mock(MapWayname.class); + MapWayName mapWayName = mock(MapWayName.class); NavigationMapboxMap theNavigationMap = new NavigationMapboxMap(mapWayName); OnWayNameChangedListener listener = mock(OnWayNameChangedListener.class);