use of net.osmand.plus.routepreparationmenu.cards.PedestrianRouteCard in project Osmand by osmandapp.
the class MapRouteInfoMenu method updateCards.
private void updateCards() {
MapActivity mapActivity = getMapActivity();
if (mapActivity == null) {
return;
}
OsmandApplication app = mapActivity.getMyApplication();
nightMode = app.getDaynightHelper().isNightModeForMapControls();
TargetPointsHelper targetPointsHelper = app.getTargetPointsHelper();
RoutingHelper routingHelper = app.getRoutingHelper();
boolean hasPrecalculatedMissingMaps = hasPrecalculatedMissingMaps();
boolean hasCalculatedMissingMaps = hasCalculatedMissingMaps(app);
List<BaseCard> menuCards = new ArrayList<>();
boolean bottomShadowVisible = true;
if (isBasicRouteCalculated()) {
GPXFile gpx = GpxUiHelper.makeGpxFromRoute(routingHelper.getRoute(), app);
SimpleRouteCard simpleRouteCard = new SimpleRouteCard(mapActivity, gpx);
simpleRouteCard.setListener(this);
menuCards.add(simpleRouteCard);
bottomShadowVisible = false;
} else if (isTransportRouteCalculated()) {
TransportRoutingHelper transportRoutingHelper = app.getTransportRoutingHelper();
List<TransportRouteResult> routes = transportRoutingHelper.getRoutes();
if (routes != null && routes.size() > 0) {
TransportRouteResult route = routes.get(0);
int walkTimeReal = transportRoutingHelper.getWalkingTime(route.getSegments());
int walkTimePT = (int) route.getWalkTime();
int walkTime = walkTimeReal > 0 ? walkTimeReal : walkTimePT;
int travelTime = (int) route.getTravelTime() + walkTime;
LatLon startLocation = transportRoutingHelper.getStartLocation();
LatLon endLocation = transportRoutingHelper.getEndLocation();
int approxPedestrianTime = (int) MapUtils.getDistance(startLocation, endLocation);
boolean showPedestrianCard = approxPedestrianTime < travelTime + 60 && approxPedestrianTime < MAX_PEDESTRIAN_ROUTE_DURATION;
boolean hasTopCard = false;
if (routes.size() > 1 && routeSelected) {
int currentRoute = app.getTransportRoutingHelper().getCurrentRoute();
if (currentRoute >= 0 && currentRoute < routes.size()) {
route = routes.get(currentRoute);
PublicTransportCard card = new PublicTransportCard(mapActivity, startLocation, endLocation, route, currentRoute);
card.setRouteInfoVisible(false);
card.setRouteButtonsVisible(false);
card.setShowBottomShadow(false);
card.setShowTopShadow(false);
card.setListener(this);
menuCards.add(card);
hasTopCard = true;
}
}
for (int i = 0; i < routes.size(); i++) {
route = routes.get(i);
PublicTransportCard card = new PublicTransportCard(mapActivity, startLocation, endLocation, route, i);
card.setShowButtonCustomTitle(mapActivity.getString(R.string.shared_string_show_on_map));
card.setShowBottomShadow(i == routes.size() - 1 && !showPedestrianCard);
card.setShowTopShadow(i != 0 || hasTopCard);
card.setListener(this);
menuCards.add(card);
}
if (showPedestrianCard) {
PedestrianRouteCard pedestrianRouteCard = new PedestrianRouteCard(mapActivity, approxPedestrianTime);
pedestrianRouteCard.setListener(this);
menuCards.add(pedestrianRouteCard);
}
bottomShadowVisible = routes.size() == 0;
} else {
RouteMenuAppModes mode = app.getRoutingOptionsHelper().getRouteMenuAppMode(routingHelper.getAppMode());
boolean avoidPTTypesCustomized = false;
for (LocalRoutingParameter parameter : mode.parameters) {
if (parameter instanceof AvoidPTTypesRoutingParameter) {
avoidPTTypesCustomized = true;
break;
}
}
if (avoidPTTypesCustomized) {
PublicTransportNotFoundSettingsWarningCard warningCard = new PublicTransportNotFoundSettingsWarningCard(mapActivity);
warningCard.setListener(this);
menuCards.add(warningCard);
} else {
PublicTransportNotFoundWarningCard warningCard = new PublicTransportNotFoundWarningCard(mapActivity);
warningCard.setListener(this);
menuCards.add(warningCard);
}
}
} else if (routeCalculationInProgress) {
if (app.getRoutingHelper().isPublicTransportMode()) {
menuCards.add(new PublicTransportBetaWarningCard(mapActivity));
} else if (app.getRoutingHelper().isBoatMode()) {
menuCards.add(new NauticalBridgeHeightWarningCard(mapActivity));
} else if (hasPrecalculatedMissingMaps || suggestedMapsOnlineSearch) {
menuCards.add(new SuggestionsMapsDownloadWarningCard(mapActivity));
} else if (app.getTargetPointsHelper().hasTooLongDistanceToNavigate() && !hasCalculatedMissingMaps) {
menuCards.add(new LongDistanceWarningCard(mapActivity));
}
} else {
if (hasCalculatedMissingMaps) {
menuCards.add(new SuggestionsMapsDownloadWarningCard(mapActivity));
} else {
// Home/work card
HomeWorkCard homeWorkCard = new HomeWorkCard(mapActivity);
menuCards.add(homeWorkCard);
// Previous route card
boolean historyEnabled = app.getSettings().NAVIGATION_HISTORY.get();
if (historyEnabled) {
TargetPoint startBackup = targetPointsHelper.getPointToStartBackup();
if (startBackup == null) {
startBackup = targetPointsHelper.getMyLocationToStart();
}
TargetPoint destinationBackup = targetPointsHelper.getPointToNavigateBackup();
if (startBackup != null && destinationBackup != null) {
PreviousRouteCard previousRouteCard = new PreviousRouteCard(mapActivity);
previousRouteCard.setListener(this);
menuCards.add(previousRouteCard);
}
}
// Gpx card
List<SelectedGpxFile> selectedGPXFiles = app.getSelectedGpxHelper().getSelectedGPXFiles();
final List<GPXFile> gpxFiles = new ArrayList<>();
for (SelectedGpxFile gs : selectedGPXFiles) {
if (!gs.isShowCurrentTrack()) {
if (gs.getGpxFile().hasRtePt() || gs.getGpxFile().hasTrkPt()) {
gpxFiles.add(gs.getGpxFile());
}
}
}
if (gpxFiles.size() > 0) {
TracksCard tracksCard = new TracksCard(mapActivity, gpxFiles);
tracksCard.setListener(this);
menuCards.add(tracksCard);
}
// Map markers card
List<MapMarker> mapMarkers = app.getMapMarkersHelper().getMapMarkers();
if (mapMarkers.size() > 0) {
MapMarkersCard mapMarkersCard = new MapMarkersCard(mapActivity, mapMarkers);
menuCards.add(mapMarkersCard);
}
// History card
if (historyEnabled) {
try {
SearchResultCollection res = app.getSearchUICore().getCore().shallowSearch(SearchHistoryAPI.class, "", null, false, false);
if (res != null) {
List<SearchResult> results = res.getCurrentSearchResults();
if (results.size() > 0) {
HistoryCard historyCard = new HistoryCard(mapActivity, results);
historyCard.setListener(this);
menuCards.add(historyCard);
}
}
} catch (IOException e) {
LOG.error(e);
}
}
}
}
applyCardsState(menuCards, this.menuCards);
this.menuCards = menuCards;
setBottomShadowVisible(bottomShadowVisible);
setupCards();
}
use of net.osmand.plus.routepreparationmenu.cards.PedestrianRouteCard in project Osmand by osmandapp.
the class MapRouteInfoMenu method onCardButtonPressed.
@Override
public void onCardButtonPressed(@NonNull BaseCard card, int buttonIndex) {
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
OsmandApplication app = mapActivity.getMyApplication();
if (card instanceof PreviousRouteCard) {
ApplicationMode lastAppMode = app.getSettings().LAST_ROUTE_APPLICATION_MODE.get();
ApplicationMode currentAppMode = app.getRoutingHelper().getAppMode();
if (lastAppMode == ApplicationMode.DEFAULT) {
lastAppMode = currentAppMode;
}
updateApplicationMode(currentAppMode, lastAppMode);
updateFinishPointView();
updateOptionsButtons();
app.getTargetPointsHelper().restoreTargetPoints(true);
} else if (card instanceof PublicTransportCard) {
if (buttonIndex == PublicTransportCard.DETAILS_BUTTON_INDEX) {
hide();
ChooseRouteFragment.showInstance(mapActivity.getSupportFragmentManager(), ((PublicTransportCard) card).getRouteId(), MenuState.FULL_SCREEN);
} else if (buttonIndex == PublicTransportCard.SHOW_BUTTON_INDEX) {
showRouteOnMap(mapActivity, ((PublicTransportCard) card).getRouteId());
}
} else if (card instanceof SimpleRouteCard) {
hide();
ChooseRouteFragment.showInstance(mapActivity.getSupportFragmentManager(), 0, MenuState.FULL_SCREEN);
} else if (card instanceof PublicTransportNotFoundWarningCard) {
updateApplicationMode(null, ApplicationMode.PEDESTRIAN);
} else if (card instanceof PublicTransportNotFoundSettingsWarningCard) {
AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment();
avoidRoadsFragment.setHideImpassableRoads(true);
avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG);
} else if (card instanceof PedestrianRouteCard) {
updateApplicationMode(null, ApplicationMode.PEDESTRIAN);
}
}
}
Aggregations