Skip to content

Commit 725df7d

Browse files
committed
Use Android View instead of runtime styling for way name
1 parent 7828d08 commit 725df7d

25 files changed

+447
-657
lines changed

app/src/androidTest/java/testapp/NavigationViewOrientationTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ public void onOrientationChange_waynameVisibilityIsRestored() {
134134
onView(withId(R.id.navigationMapView)).perform(swipeUp());
135135
changeOrientation(orientationLandscape());
136136

137-
NavigationMapboxMap navigationMapboxMap = getNavigationView().retrieveNavigationMapboxMap();
138-
boolean isWaynameVisible = navigationMapboxMap.isWaynameVisible();
137+
boolean isWaynameVisible = getNavigationView().isWaynameVisible();
139138
assertFalse(isWaynameVisible);
140139
}
141140

codecov.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ comment:
2727

2828
ignore:
2929
- "**/ManeuversStyleKit.java"
30-
- "**/LaneStyleKit.java"
30+
- "**/LaneStyleKit.java"
31+
- "**/LaneStyleKit.java"
32+
- "**/NavigationViewInstanceState.java"
33+
- "**/NavigationMapboxMapInstanceState.java"
34+
- "**/NavigationConstants.java"

libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationContract.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mapbox.services.android.navigation.ui.v5;
22

33
import android.location.Location;
4+
import android.support.annotation.NonNull;
45

56
import com.mapbox.api.directions.v5.models.DirectionsRoute;
67
import com.mapbox.geojson.Point;
@@ -18,6 +19,8 @@ interface View {
1819

1920
void updateWaynameVisibility(boolean isVisible);
2021

22+
void updateWaynameView(@NonNull String wayName);
23+
2124
void updateCameraTrackingMode(@NavigationCamera.TrackingMode int trackingMode);
2225

2326
void resetCameraPosition();

libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationPresenter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mapbox.services.android.navigation.ui.v5;
22

33
import android.location.Location;
4+
import android.support.annotation.NonNull;
45
import android.support.design.widget.BottomSheetBehavior;
56

67
import com.mapbox.api.directions.v5.models.DirectionsRoute;
@@ -67,6 +68,15 @@ void onNavigationLocationUpdate(Location location) {
6768
view.updateNavigationMap(location);
6869
}
6970

71+
void onWayNameChanged(@NonNull String wayName) {
72+
if (wayName.isEmpty()) {
73+
view.updateWaynameVisibility(false);
74+
return;
75+
}
76+
view.updateWaynameView(wayName);
77+
view.updateWaynameVisibility(true);
78+
}
79+
7080
void onRouteOverviewClick() {
7181
view.updateWaynameVisibility(false);
7282
view.updateCameraRouteOverview();

libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationView.java

Lines changed: 59 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.mapbox.services.android.navigation.ui.v5;
22

33
import android.app.Activity;
4-
import android.app.Fragment;
54
import android.arch.lifecycle.LifecycleObserver;
65
import android.arch.lifecycle.LifecycleOwner;
76
import android.arch.lifecycle.ViewModelProviders;
@@ -33,6 +32,7 @@
3332
import com.mapbox.services.android.navigation.ui.v5.instruction.NavigationAlertView;
3433
import com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap;
3534
import com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMapInstanceState;
35+
import com.mapbox.services.android.navigation.ui.v5.map.WayNameView;
3636
import com.mapbox.services.android.navigation.ui.v5.summary.SummaryBottomSheet;
3737
import com.mapbox.services.android.navigation.v5.location.replay.ReplayRouteLocationEngine;
3838
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation;
@@ -75,6 +75,7 @@ public class NavigationView extends CoordinatorLayout implements LifecycleObserv
7575
private BottomSheetBehavior summaryBehavior;
7676
private ImageButton cancelBtn;
7777
private RecenterButton recenterBtn;
78+
private WayNameView wayNameView;
7879
private ImageButton routeOverviewBtn;
7980

8081
private NavigationPresenter navigationPresenter;
@@ -141,8 +142,10 @@ public boolean onBackPressed() {
141142
*/
142143
public void onSaveInstanceState(Bundle outState) {
143144
int bottomSheetBehaviorState = summaryBehavior == null ? INVALID_STATE : summaryBehavior.getState();
144-
NavigationViewInstanceState navigationViewInstanceState = new NavigationViewInstanceState(bottomSheetBehaviorState,
145-
recenterBtn.getVisibility(), instructionView.isShowingInstructionList());
145+
boolean isWayNameVisible = wayNameView.getVisibility() == VISIBLE;
146+
NavigationViewInstanceState navigationViewInstanceState = new NavigationViewInstanceState(
147+
bottomSheetBehaviorState, recenterBtn.getVisibility(), instructionView.isShowingInstructionList(),
148+
isWayNameVisible, wayNameView.retrieveWayNameText());
146149
String instanceKey = getContext().getString(R.string.navigation_view_instance_state);
147150
outState.putParcelable(instanceKey, navigationViewInstanceState);
148151
outState.putBoolean(getContext().getString(R.string.navigation_running), navigationViewModel.isRunning());
@@ -161,6 +164,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
161164
String instanceKey = getContext().getString(R.string.navigation_view_instance_state);
162165
NavigationViewInstanceState navigationViewInstanceState = savedInstanceState.getParcelable(instanceKey);
163166
recenterBtn.setVisibility(navigationViewInstanceState.getRecenterButtonVisibility());
167+
wayNameView.setVisibility(navigationViewInstanceState.isWayNameVisible() ? VISIBLE : INVISIBLE);
168+
wayNameView.updateWayNameText(navigationViewInstanceState.getWayNameText());
164169
resetBottomSheetState(navigationViewInstanceState.getBottomSheetBehaviorState());
165170
updateInstructionListState(navigationViewInstanceState.isInstructionViewVisible());
166171
mapInstanceState = savedInstanceState.getParcelable(MAP_INSTANCE_STATE_KEY);
@@ -172,7 +177,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
172177
* <p>
173178
* In an {@link Activity} this should be in {@link Activity#onDestroy()}.
174179
* <p>
175-
* In a {@link android.app.Fragment}, this should be in {@link Fragment#onDestroyView()}.
180+
* In a {@link android.support.v4.app.Fragment}, this should
181+
* be in {@link android.support.v4.app.Fragment#onDestroyView()}.
176182
*/
177183
public void onDestroy() {
178184
shutdown();
@@ -212,6 +218,7 @@ public void onStop() {
212218
@Override
213219
public void onMapReady(MapboxMap mapboxMap) {
214220
initializeNavigationMap(mapView, mapboxMap);
221+
initializeWayNameListener();
215222
onNavigationReadyCallback.onNavigationReady(navigationViewModel.isRunning());
216223
isMapInitialized = true;
217224
}
@@ -269,17 +276,6 @@ public void drawRoute(DirectionsRoute directionsRoute) {
269276
}
270277
}
271278

272-
private void initializeNavigationMap(MapView mapView, MapboxMap map) {
273-
navigationMap = new NavigationMapboxMap(mapView, map);
274-
if (mapInstanceState != null) {
275-
navigationMap.restoreFrom(mapInstanceState);
276-
return;
277-
}
278-
if (initialMapCameraPosition != null) {
279-
map.setCameraPosition(initialMapCameraPosition);
280-
}
281-
}
282-
283279
@Override
284280
public void addMarker(Point position) {
285281
if (navigationMap != null) {
@@ -293,23 +289,42 @@ public void clearMarkers() {
293289
}
294290
}
295291

292+
/**
293+
* Provides the current visibility of the way name view.
294+
*
295+
* @return true if visible, false if not visible
296+
*/
297+
public boolean isWaynameVisible() {
298+
return wayNameView.getVisibility() == VISIBLE;
299+
}
300+
301+
/**
302+
* Updates the text of the way name view below the
303+
* navigation icon.
304+
* <p>
305+
* If you'd like to use this method without being overridden by the default way names
306+
* values we provide, please disabled auto-query with
307+
* {@link NavigationMapboxMap#updateWaynameQueryMap(boolean)}.
308+
*
309+
* @param wayname to update the view
310+
*/
296311
public void updateWaynameView(String wayname) {
297-
if (navigationMap != null) {
298-
navigationMap.updateWaynameView(wayname);
299-
}
312+
wayNameView.updateWayNameText(wayname);
300313
}
301314

315+
/**
316+
* Updates the visibility of the way name view that is show below
317+
* the navigation icon.
318+
* <p>
319+
* If you'd like to use this method without being overridden by the default visibility values
320+
* values we provide, please disabled auto-query with
321+
* {@link NavigationMapboxMap#updateWaynameQueryMap(boolean)}.
322+
*
323+
* @param isVisible true to show, false to hide
324+
*/
302325
@Override
303326
public void updateWaynameVisibility(boolean isVisible) {
304-
if (navigationMap != null) {
305-
navigationMap.updateWaynameVisibility(isVisible);
306-
}
307-
}
308-
309-
public void updateWaynameQueryMap(boolean isEnabled) {
310-
if (navigationMap != null) {
311-
navigationMap.updateWaynameQueryMap(isEnabled);
312-
}
327+
wayNameView.updateVisibility(isVisible);
313328
}
314329

315330
@Override
@@ -499,6 +514,7 @@ private void bind() {
499514
summaryBottomSheet = findViewById(R.id.summaryBottomSheet);
500515
cancelBtn = findViewById(R.id.cancelBtn);
501516
recenterBtn = findViewById(R.id.recenterBtn);
517+
wayNameView = findViewById(R.id.wayNameView);
502518
routeOverviewBtn = findViewById(R.id.routeOverviewBtn);
503519
}
504520

@@ -527,6 +543,22 @@ private void initializeInstructionListListener() {
527543
navigationViewEventDispatcher));
528544
}
529545

546+
private void initializeNavigationMap(MapView mapView, MapboxMap map) {
547+
navigationMap = new NavigationMapboxMap(mapView, map);
548+
if (mapInstanceState != null) {
549+
navigationMap.restoreFrom(mapInstanceState);
550+
return;
551+
}
552+
if (initialMapCameraPosition != null) {
553+
map.setCameraPosition(initialMapCameraPosition);
554+
}
555+
}
556+
557+
private void initializeWayNameListener() {
558+
NavigationViewWayNameListener wayNameListener = new NavigationViewWayNameListener(navigationPresenter);
559+
navigationMap.addOnWayNameChangedListener(wayNameListener);
560+
}
561+
530562
private void updateSavedInstanceStateMapStyle(@Nullable Bundle savedInstanceState) {
531563
if (savedInstanceState != null) {
532564
String mapStyleUrl = ThemeSwitcher.retrieveMapStyle(getContext());

libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/NavigationViewInstanceState.java

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44
import android.os.Parcelable;
55

66
class NavigationViewInstanceState implements Parcelable {
7+
78
private int bottomSheetBehaviorState;
89
private int recenterButtonVisibility;
910
private boolean instructionViewVisible;
11+
private boolean isWayNameVisible;
12+
private String wayNameText;
1013

1114
NavigationViewInstanceState(int bottomSheetBehaviorState, int recenterButtonVisibility,
12-
boolean instructionViewVisible) {
15+
boolean instructionViewVisible, boolean isWayNameVisible, String wayNameText) {
1316
this.bottomSheetBehaviorState = bottomSheetBehaviorState;
1417
this.recenterButtonVisibility = recenterButtonVisibility;
1518
this.instructionViewVisible = instructionViewVisible;
19+
this.isWayNameVisible = isWayNameVisible;
20+
this.wayNameText = wayNameText;
1621
}
1722

1823
int getBottomSheetBehaviorState() {
@@ -27,35 +32,45 @@ boolean isInstructionViewVisible() {
2732
return instructionViewVisible;
2833
}
2934

30-
private NavigationViewInstanceState(Parcel parcel) {
31-
bottomSheetBehaviorState = parcel.readInt();
32-
recenterButtonVisibility = parcel.readInt();
33-
instructionViewVisible = parcel.readByte() != 0x00;
35+
boolean isWayNameVisible() {
36+
return isWayNameVisible;
3437
}
3538

36-
@Override
37-
public int describeContents() {
38-
return 0;
39+
String getWayNameText() {
40+
return wayNameText;
41+
}
42+
43+
private NavigationViewInstanceState(Parcel in) {
44+
bottomSheetBehaviorState = in.readInt();
45+
recenterButtonVisibility = in.readInt();
46+
instructionViewVisible = in.readByte() != 0;
47+
isWayNameVisible = in.readByte() != 0;
48+
wayNameText = in.readString();
3949
}
4050

4151
@Override
4252
public void writeToParcel(Parcel dest, int flags) {
4353
dest.writeInt(bottomSheetBehaviorState);
4454
dest.writeInt(recenterButtonVisibility);
45-
dest.writeByte((byte) (instructionViewVisible ? 0x01 : 0x00));
55+
dest.writeByte((byte) (instructionViewVisible ? 1 : 0));
56+
dest.writeByte((byte) (isWayNameVisible ? 1 : 0));
57+
dest.writeString(wayNameText);
4658
}
4759

48-
public static final Parcelable.Creator<NavigationViewInstanceState> CREATOR =
49-
new Parcelable.Creator<NavigationViewInstanceState>() {
60+
@Override
61+
public int describeContents() {
62+
return 0;
63+
}
5064

51-
@Override
52-
public NavigationViewInstanceState createFromParcel(Parcel source) {
53-
return new NavigationViewInstanceState(source);
54-
}
65+
public static final Creator<NavigationViewInstanceState> CREATOR = new Creator<NavigationViewInstanceState>() {
66+
@Override
67+
public NavigationViewInstanceState createFromParcel(Parcel in) {
68+
return new NavigationViewInstanceState(in);
69+
}
5570

56-
@Override
57-
public NavigationViewInstanceState[] newArray(int size) {
58-
return new NavigationViewInstanceState[size];
59-
}
60-
};
71+
@Override
72+
public NavigationViewInstanceState[] newArray(int size) {
73+
return new NavigationViewInstanceState[size];
74+
}
75+
};
6176
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.mapbox.services.android.navigation.ui.v5;
2+
3+
import android.support.annotation.NonNull;
4+
5+
import com.mapbox.services.android.navigation.ui.v5.map.OnWayNameChangedListener;
6+
7+
class NavigationViewWayNameListener implements OnWayNameChangedListener {
8+
9+
private final NavigationPresenter presenter;
10+
11+
NavigationViewWayNameListener(NavigationPresenter presenter) {
12+
this.presenter = presenter;
13+
}
14+
15+
@Override
16+
public void onWayNameChanged(@NonNull String wayName) {
17+
presenter.onWayNameChanged(wayName);
18+
}
19+
}

libandroid-navigation-ui/src/main/java/com/mapbox/services/android/navigation/ui/v5/map/MapLayerInteractor.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.mapbox.services.android.navigation.ui.v5.map;
22

3-
import android.graphics.Bitmap;
4-
53
import com.mapbox.mapboxsdk.maps.MapboxMap;
64
import com.mapbox.mapboxsdk.style.layers.Layer;
75
import com.mapbox.mapboxsdk.style.layers.LineLayer;
@@ -21,18 +19,10 @@ class MapLayerInteractor {
2119
this.mapboxMap = mapboxMap;
2220
}
2321

24-
void addLayer(Layer layer) {
25-
mapboxMap.addLayer(layer);
26-
}
27-
2822
Layer retrieveLayerFromId(String layerId) {
2923
return mapboxMap.getLayerAs(layerId);
3024
}
3125

32-
void addLayerImage(String imageName, Bitmap image) {
33-
mapboxMap.addImage(imageName, image);
34-
}
35-
3626
void updateLayerVisibility(boolean isVisible, String layerIdentifier) {
3727
// TODO add sourceIdentifier logic when https://github.com/mapbox/mapbox-gl-native/issues/12691 lands
3828
List<Layer> layers = mapboxMap.getLayers();

0 commit comments

Comments
 (0)