Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Android View instead of runtime styling for way name #1621

Merged
merged 1 commit into from
Dec 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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