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

Walking directions heading #19

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
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 @@ -40,6 +40,7 @@
import com.mapquest.navigation.NavigationManager;
import com.mapquest.navigation.dataclient.listener.TrafficResponseListener;
import com.mapquest.navigation.internal.collection.CollectionsUtil;
import com.mapquest.navigation.internal.heading.HeadingManager;
import com.mapquest.navigation.internal.logging.AccumulatingLogger;
import com.mapquest.navigation.internal.unit.Duration;
import com.mapquest.navigation.internal.unit.Speed;
Expand All @@ -58,6 +59,7 @@
import com.mapquest.navigation.model.Maneuver;
import com.mapquest.navigation.model.Route;
import com.mapquest.navigation.model.RouteLeg;
import com.mapquest.navigation.model.RouteOptionsBase;
import com.mapquest.navigation.model.RouteStoppedReason;
import com.mapquest.navigation.model.SpeedLimit;
import com.mapquest.navigation.model.SpeedLimitSpan;
Expand Down Expand Up @@ -127,8 +129,7 @@ public class NavigationActivity extends AppCompatActivity implements LifecycleRe
private Marker mClosestRoutePointMarker;
private Marker mUserLocationMarker;
protected List<Marker> mGuidancePromptMarkers = new ArrayList<>();
@Nullable
protected Route mInitialRoute;
protected float mCurrentHeading = -1;

private NavigationProgressListener mMapCenteringNavigationProgressListener = new MapCenteringNavigationProgressListener();
protected NavigationStateListener mNavigationStateListener = new UiUpdatingNavigationStateListener();
Expand All @@ -137,6 +138,7 @@ public class NavigationActivity extends AppCompatActivity implements LifecycleRe
protected TrafficResponseListener mTrafficResponseListener = new UiUpdatingTrafficResponseListener();
protected SpeedLimitSpanListener mSpeedLimitSpanListener = new UiUpdatingSpeedLimitSpanListener();
protected EtaResponseListener mEtaResponseListener = new UiEtaResponseListener();
private HeadingManager.HeadingListener mHeadingListener = new UiHeadingListener();

@BindView(R.id.map)
protected MapView mMap;
Expand Down Expand Up @@ -209,9 +211,11 @@ protected void centerOnUserLocation() {
Log.d(TAG, "centerOnUserLocation() mLastLocationObservation: " + mLastLocationObservation);

if (mLastLocationObservation != null) {
double lat = isWalking()? mLastLocationObservation.getRawGpsLocation().getLatitude() : mLastLocationObservation.getSnappedLocation().getLatitude();
double lng = isWalking()? mLastLocationObservation.getRawGpsLocation().getLatitude() : mLastLocationObservation.getSnappedLocation().getLatitude();

mMapController.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(mLastLocationObservation.getSnappedLocation().getLatitude(),
mLastLocationObservation.getSnappedLocation().getLongitude()),
new LatLng(lat,lng),
CENTER_ON_USER_ZOOM_LEVEL));
enterFollowMode();

Expand All @@ -238,7 +242,7 @@ void handleSkipToNextLegClick() {

@BindView(R.id.follow)
protected TextView mFollowButton;
private boolean mFollowing;
protected boolean mFollowing;

private ProgressDialog mProgressDialog;

Expand Down Expand Up @@ -273,10 +277,9 @@ public void onMapReady(final MapboxMap mapController) {
mMap.setOnTouchListener(new FollowModeExitingMapTouchListener());

setZoomLevel(16);
if (mInitialRoute != null) {
mapRoute(mInitialRoute);
if (mRoute != null) {
mapRoute(mRoute);
}
mInitialRoute = null;

// bind to our Navigation Service (which provides and manages a NavigationManager instance)
mServiceConnection = initializeNavigationService(mRoute);
Expand Down Expand Up @@ -332,6 +335,14 @@ protected void setZoomLevel(int level) {
createUpdatedCameraPositionFromCurrent(level)));
}

public boolean isWalking() {
if(mRoute != null){
return mRoute.getRouteOptions().getRouteType() == RouteOptionsBase.RouteType.PEDESTRIAN;
}

return false;
}

@Override
protected void onStart() {
super.onStart();
Expand Down Expand Up @@ -479,6 +490,7 @@ private void addNavigationListeners(final NavigationManager manager) {
manager.addTrafficResponseListener(mTrafficResponseListener);
manager.addAndNotifySpeedLimitSpanListener(mSpeedLimitSpanListener);
manager.addEtaResponseListener(mEtaResponseListener);
manager.addHeadingListener(mHeadingListener);
}

private void removeNavigationListeners() {
Expand All @@ -488,6 +500,7 @@ private void removeNavigationListeners() {
mNavigationManager.removeTrafficResponseListener(mTrafficResponseListener);
mNavigationManager.removeSpeedLimitSpanListener(mSpeedLimitSpanListener);
mNavigationManager.removeEtaResponseListener(mEtaResponseListener);
mNavigationManager.removeHeadingListener(mHeadingListener);
}

private String formatTimestampForLocalTimezone(long timestamp) {
Expand Down Expand Up @@ -578,11 +591,10 @@ protected synchronized void enterFollowMode() {
public void run() {
Log.d(TAG, "enterFollowMode() delayed runnable; mMapController: " + mMapController + " mLastLocationObservation: " + mLastLocationObservation);
if((mMapController != null) && (mLastLocationObservation != null)) {
moveZoomAndTiltMap(
mLastLocationObservation.getSnappedLocation().getLatitude(),
mLastLocationObservation.getSnappedLocation().getLongitude(),
CENTER_ON_USER_ZOOM_LEVEL, FOLLOW_MODE_TILT_VALUE_DEGREES
);
double lat = isWalking()? mLastLocationObservation.getRawGpsLocation().getLatitude() : mLastLocationObservation.getSnappedLocation().getLatitude();
double lng = isWalking()? mLastLocationObservation.getRawGpsLocation().getLatitude() : mLastLocationObservation.getSnappedLocation().getLatitude();

moveZoomAndTiltMap(lat, lng, CENTER_ON_USER_ZOOM_LEVEL, FOLLOW_MODE_TILT_VALUE_DEGREES);
}
}
}, 600); // do this 600ms later so that mapController and last-location will be non-null
Expand All @@ -598,11 +610,10 @@ private synchronized void exitFollowMode() {
if(mFollowing) {
mNavigationManager.removeProgressListener(mMapCenteringNavigationProgressListener);
if (mLastLocationObservation != null) {
moveZoomAndTiltMap(
mLastLocationObservation.getSnappedLocation().getLatitude(),
mLastLocationObservation.getSnappedLocation().getLongitude(),
CENTER_ON_USER_ZOOM_LEVEL, 0
);
double lat = isWalking()? mLastLocationObservation.getRawGpsLocation().getLatitude() : mLastLocationObservation.getSnappedLocation().getLatitude();
double lng = isWalking()? mLastLocationObservation.getRawGpsLocation().getLatitude() : mLastLocationObservation.getSnappedLocation().getLatitude();

moveZoomAndTiltMap(lat, lng, CENTER_ON_USER_ZOOM_LEVEL, 0);
}
mFollowButton.setVisibility(View.VISIBLE);
mFollowing = false;
Expand All @@ -620,10 +631,12 @@ protected void clearMarkup() {
protected void mapRoute(Route route) {
clearMarkup();
if(mMapController == null) {
mInitialRoute = route;
return;
}

// Update the stored route to the latest route object we map
mRoute = route;

// map all route-leg segments (with path colors based on traffic-conditions)
clearRoutePath();
List<RouteLeg> routeLegs = route.getLegs();
Expand Down Expand Up @@ -770,7 +783,7 @@ private void moveZoomAndTiltMap(double latitude, double longitude, double zoom,
mMapController.animateCamera(CameraUpdateFactory.newCameraPosition(position));
}

private void animateCamera(double latitude, double longitude, double bearing, double zoom, double tilt) {
protected void animateCamera(double latitude, double longitude, double bearing, double zoom, double tilt) {
if(mMapController == null) {
return;
}
Expand Down Expand Up @@ -851,7 +864,7 @@ public void onLocationObservationReceived(LocationObservation locationObservatio
animateCamera(
locationObservation.getRawGpsLocation().getLatitude(),
locationObservation.getRawGpsLocation().getLongitude(),
locationObservation.getRawGpsLocation().getBearing(),
(isWalking() && mCurrentHeading != -1)? mCurrentHeading : locationObservation.getRawGpsLocation().getBearing(),
CENTER_ON_USER_ZOOM_LEVEL,
FOLLOW_MODE_TILT_VALUE_DEGREES);
}
Expand Down Expand Up @@ -933,7 +946,9 @@ private class UiUpdatingNavigationProgressListener implements NavigationProgress
public void onLocationObservationReceived(LocationObservation locationObservation) {
mLastLocationObservation = locationObservation;
updateUserLocationMarker(locationObservation.getRawGpsLocation());
updateClosestRoutePoint(locationObservation.getSnappedLocation());
if(!isWalking()){
updateClosestRoutePoint(locationObservation.getSnappedLocation());
}
updateNextManeuverDistanceLabel(
locationObservation.getDistanceToUpcomingManeuver(),
mRoute.getRouteOptions().getSystemOfMeasurementForDisplayText(),
Expand Down Expand Up @@ -1142,4 +1157,17 @@ public boolean onTouch(View view, MotionEvent event) {
return false;
}
}

public class UiHeadingListener implements HeadingManager.HeadingListener {

@Override
public void onHeadingChanged(float heading) {
Log.v("Compass", String.format(Locale.getDefault(), "Heading was updated to: %.2f", heading));
mCurrentHeading = heading;
if(isWalking() && mFollowing){
animateCamera(mMapController.getCameraPosition().target.getLatitude(), mMapController.getCameraPosition().target.getLongitude(),
heading, mMapController.getCameraPosition().zoom, mMapController.getCameraPosition().tilt);
}
}
}
}