Skip to content

Commit

Permalink
Use Android View instead of runtime styling for way name
Browse files Browse the repository at this point in the history
  • Loading branch information
danesfeder committed Dec 13, 2018
1 parent 9e8971a commit 78bd24e
Show file tree
Hide file tree
Showing 23 changed files with 384 additions and 648 deletions.
6 changes: 5 additions & 1 deletion codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,8 @@ comment:

ignore:
- "**/ManeuversStyleKit.java"
- "**/LaneStyleKit.java"
- "**/LaneStyleKit.java"
- "**/LaneStyleKit.java"
- "**/NavigationViewInstanceState.java"
- "**/NavigationMapboxMapInstanceState.java"
- "**/NavigationConstants.java"
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -18,6 +19,8 @@ interface View {

void updateWaynameVisibility(boolean isVisible);

void updateWaynameView(@NonNull String wayName);

void updateCameraTrackingMode(@NavigationCamera.TrackingMode int trackingMode);

void resetCameraPosition();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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;
Expand Down Expand Up @@ -77,6 +78,14 @@ void onInstructionListVisibilityChanged(boolean visible) {
}
}

void onWayNameChanged(@NonNull String wayName) {
if (wayName.isEmpty()) {
view.updateWaynameVisibility(false);
}
view.updateWaynameView(wayName);
view.updateWaynameVisibility(true);
}

void onRouteOverviewClick() {
view.updateWaynameVisibility(false);
view.updateCameraRouteOverview();
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -32,6 +31,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;
Expand Down Expand Up @@ -74,6 +74,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;
Expand Down Expand Up @@ -140,8 +141,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());
Expand All @@ -160,6 +163,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);
Expand All @@ -171,7 +176,8 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
* <p>
* In an {@link Activity} this should be in {@link Activity#onDestroy()}.
* <p>
* 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();
Expand Down Expand Up @@ -211,6 +217,7 @@ public void onStop() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
initializeNavigationMap(mapView, mapboxMap);
initializeWayNameListener();
onNavigationReadyCallback.onNavigationReady(navigationViewModel.isRunning());
isMapInitialized = true;
}
Expand Down Expand Up @@ -268,17 +275,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) {
Expand All @@ -293,16 +289,12 @@ public void clearMarkers() {
}

public void updateWaynameView(String wayname) {
if (navigationMap != null) {
navigationMap.updateWaynameView(wayname);
}
wayNameView.updateWayNameText(wayname);
}

@Override
public void updateWaynameVisibility(boolean isVisible) {
if (navigationMap != null) {
navigationMap.updateWaynameVisibility(isVisible);
}
wayNameView.updateVisibility(isVisible);
}

public void updateWaynameQueryMap(boolean isEnabled) {
Expand Down Expand Up @@ -497,6 +489,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);
}

Expand Down Expand Up @@ -525,6 +518,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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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<NavigationViewInstanceState> CREATOR =
new Parcelable.Creator<NavigationViewInstanceState>() {
@Override
public int describeContents() {
return 0;
}

@Override
public NavigationViewInstanceState createFromParcel(Parcel source) {
return new NavigationViewInstanceState(source);
}
public static final Creator<NavigationViewInstanceState> CREATOR = new Creator<NavigationViewInstanceState>() {
@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];
}
};
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<Layer> layers = mapboxMap.getLayers();
Expand Down
Loading

0 comments on commit 78bd24e

Please sign in to comment.