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 18, 2018
1 parent a0e2941 commit a92926a
Show file tree
Hide file tree
Showing 25 changed files with 465 additions and 668 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
5 changes: 4 additions & 1 deletion codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@ comment:

ignore:
- "**/ManeuversStyleKit.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 @@ -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);

Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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();
}
Expand All @@ -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);
}
}

Expand All @@ -46,7 +48,6 @@ void onSummaryBottomSheetHidden() {
void onRouteUpdate(DirectionsRoute directionsRoute) {
view.drawRoute(directionsRoute);
if (!resumeState) {
view.updateWaynameVisibility(true);
view.startCamera(directionsRoute);
}
}
Expand All @@ -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();
}
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 @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand All @@ -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);
Expand All @@ -172,7 +177,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 @@ -212,6 +218,7 @@ public void onStop() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
initializeNavigationMap(mapView, mapboxMap);
initializeWayNameListener();
onNavigationReadyCallback.onNavigationReady(navigationViewModel.isRunning());
isMapInitialized = true;
}
Expand Down Expand Up @@ -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) {
Expand All @@ -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.
* <p>
* 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.
* <p>
* 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
Expand Down Expand Up @@ -377,6 +393,7 @@ public void startNavigation(NavigationViewOptions options) {
* @since 0.16.0
*/
public void stopNavigation() {
navigationPresenter.onNavigationStopped();
navigationViewModel.stopNavigation();
}

Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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());
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);
}
}
Loading

0 comments on commit a92926a

Please sign in to comment.