Skip to content

Commit 78bd24e

Browse files
committed
Use Android View instead of runtime styling for way name
1 parent 9e8971a commit 78bd24e

23 files changed

+384
-648
lines changed

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: 9 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;
@@ -77,6 +78,14 @@ void onInstructionListVisibilityChanged(boolean visible) {
7778
}
7879
}
7980

81+
void onWayNameChanged(@NonNull String wayName) {
82+
if (wayName.isEmpty()) {
83+
view.updateWaynameVisibility(false);
84+
}
85+
view.updateWaynameView(wayName);
86+
view.updateWaynameVisibility(true);
87+
}
88+
8089
void onRouteOverviewClick() {
8190
view.updateWaynameVisibility(false);
8291
view.updateCameraRouteOverview();

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

Lines changed: 30 additions & 21 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;
@@ -32,6 +31,7 @@
3231
import com.mapbox.services.android.navigation.ui.v5.instruction.NavigationAlertView;
3332
import com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMap;
3433
import com.mapbox.services.android.navigation.ui.v5.map.NavigationMapboxMapInstanceState;
34+
import com.mapbox.services.android.navigation.ui.v5.map.WayNameView;
3535
import com.mapbox.services.android.navigation.ui.v5.summary.SummaryBottomSheet;
3636
import com.mapbox.services.android.navigation.v5.location.replay.ReplayRouteLocationEngine;
3737
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation;
@@ -74,6 +74,7 @@ public class NavigationView extends CoordinatorLayout implements LifecycleObserv
7474
private BottomSheetBehavior summaryBehavior;
7575
private ImageButton cancelBtn;
7676
private RecenterButton recenterBtn;
77+
private WayNameView wayNameView;
7778
private ImageButton routeOverviewBtn;
7879

7980
private NavigationPresenter navigationPresenter;
@@ -140,8 +141,10 @@ public boolean onBackPressed() {
140141
*/
141142
public void onSaveInstanceState(Bundle outState) {
142143
int bottomSheetBehaviorState = summaryBehavior == null ? INVALID_STATE : summaryBehavior.getState();
143-
NavigationViewInstanceState navigationViewInstanceState = new NavigationViewInstanceState(bottomSheetBehaviorState,
144-
recenterBtn.getVisibility(), instructionView.isShowingInstructionList());
144+
boolean isWayNameVisible = wayNameView.getVisibility() == VISIBLE;
145+
NavigationViewInstanceState navigationViewInstanceState = new NavigationViewInstanceState(
146+
bottomSheetBehaviorState, recenterBtn.getVisibility(), instructionView.isShowingInstructionList(),
147+
isWayNameVisible, wayNameView.retrieveWayNameText());
145148
String instanceKey = getContext().getString(R.string.navigation_view_instance_state);
146149
outState.putParcelable(instanceKey, navigationViewInstanceState);
147150
outState.putBoolean(getContext().getString(R.string.navigation_running), navigationViewModel.isRunning());
@@ -160,6 +163,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
160163
String instanceKey = getContext().getString(R.string.navigation_view_instance_state);
161164
NavigationViewInstanceState navigationViewInstanceState = savedInstanceState.getParcelable(instanceKey);
162165
recenterBtn.setVisibility(navigationViewInstanceState.getRecenterButtonVisibility());
166+
wayNameView.setVisibility(navigationViewInstanceState.isWayNameVisible() ? VISIBLE : INVISIBLE);
167+
wayNameView.updateWayNameText(navigationViewInstanceState.getWayNameText());
163168
resetBottomSheetState(navigationViewInstanceState.getBottomSheetBehaviorState());
164169
updateInstructionListState(navigationViewInstanceState.isInstructionViewVisible());
165170
mapInstanceState = savedInstanceState.getParcelable(MAP_INSTANCE_STATE_KEY);
@@ -171,7 +176,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
171176
* <p>
172177
* In an {@link Activity} this should be in {@link Activity#onDestroy()}.
173178
* <p>
174-
* In a {@link android.app.Fragment}, this should be in {@link Fragment#onDestroyView()}.
179+
* In a {@link android.support.v4.app.Fragment}, this should
180+
* be in {@link android.support.v4.app.Fragment#onDestroyView()}.
175181
*/
176182
public void onDestroy() {
177183
shutdown();
@@ -211,6 +217,7 @@ public void onStop() {
211217
@Override
212218
public void onMapReady(MapboxMap mapboxMap) {
213219
initializeNavigationMap(mapView, mapboxMap);
220+
initializeWayNameListener();
214221
onNavigationReadyCallback.onNavigationReady(navigationViewModel.isRunning());
215222
isMapInitialized = true;
216223
}
@@ -268,17 +275,6 @@ public void drawRoute(DirectionsRoute directionsRoute) {
268275
}
269276
}
270277

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

295291
public void updateWaynameView(String wayname) {
296-
if (navigationMap != null) {
297-
navigationMap.updateWaynameView(wayname);
298-
}
292+
wayNameView.updateWayNameText(wayname);
299293
}
300294

301295
@Override
302296
public void updateWaynameVisibility(boolean isVisible) {
303-
if (navigationMap != null) {
304-
navigationMap.updateWaynameVisibility(isVisible);
305-
}
297+
wayNameView.updateVisibility(isVisible);
306298
}
307299

308300
public void updateWaynameQueryMap(boolean isEnabled) {
@@ -497,6 +489,7 @@ private void bind() {
497489
summaryBottomSheet = findViewById(R.id.summaryBottomSheet);
498490
cancelBtn = findViewById(R.id.cancelBtn);
499491
recenterBtn = findViewById(R.id.recenterBtn);
492+
wayNameView = findViewById(R.id.wayNameView);
500493
routeOverviewBtn = findViewById(R.id.routeOverviewBtn);
501494
}
502495

@@ -525,6 +518,22 @@ private void initializeInstructionListListener() {
525518
navigationViewEventDispatcher));
526519
}
527520

521+
private void initializeNavigationMap(MapView mapView, MapboxMap map) {
522+
navigationMap = new NavigationMapboxMap(mapView, map);
523+
if (mapInstanceState != null) {
524+
navigationMap.restoreFrom(mapInstanceState);
525+
return;
526+
}
527+
if (initialMapCameraPosition != null) {
528+
map.setCameraPosition(initialMapCameraPosition);
529+
}
530+
}
531+
532+
private void initializeWayNameListener() {
533+
NavigationViewWayNameListener wayNameListener = new NavigationViewWayNameListener(navigationPresenter);
534+
navigationMap.addOnWayNameChangedListener(wayNameListener);
535+
}
536+
528537
private void updateSavedInstanceStateMapStyle(@Nullable Bundle savedInstanceState) {
529538
if (savedInstanceState != null) {
530539
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)