use of net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.RouteMenuAppModes in project Osmand by osmandapp.
the class MapRouteInfoMenu method updateOptionsButtons.
private void updateOptionsButtons() {
MapActivity mapActivity = getMapActivity();
final View mainView = getMainView();
if (mapActivity == null || mainView == null) {
return;
}
final OsmandApplication app = mapActivity.getMyApplication();
RoutingHelper routingHelper = app.getRoutingHelper();
final ApplicationMode applicationMode = routingHelper.getAppMode();
final RouteMenuAppModes mode = app.getRoutingOptionsHelper().getRouteMenuAppMode(applicationMode);
boolean isLayoutRTL = AndroidUtils.isLayoutRtl(app);
updateControlButtons(mapActivity, mainView);
LinearLayout optionsButton = mainView.findViewById(R.id.map_options_route_button);
OsmAndAppCustomization customization = app.getAppCustomization();
AndroidUiHelper.updateVisibility(optionsButton, customization.isFeatureEnabled(NAVIGATION_OPTIONS_MENU_ID));
TextView optionsTitle = mainView.findViewById(R.id.map_options_route_button_title);
ImageView optionsIcon = mainView.findViewById(R.id.map_options_route_button_icon);
setupButtonIcon(optionsIcon, R.drawable.ic_action_settings);
optionsButton.setOnClickListener(v -> clickRouteParams());
AndroidUtils.setBackground(app, optionsButton, nightMode, isLayoutRTL ? R.drawable.route_info_trans_gradient_left_light : R.drawable.route_info_trans_gradient_light, isLayoutRTL ? R.drawable.route_info_trans_gradient_left_dark : R.drawable.route_info_trans_gradient_dark);
HorizontalScrollView scrollView = mainView.findViewById(R.id.route_options_scroll_container);
scrollView.setVerticalScrollBarEnabled(false);
scrollView.setHorizontalScrollBarEnabled(false);
LinearLayout optionsContainer = mainView.findViewById(R.id.route_options_container);
optionsContainer.removeAllViews();
if (mode == null) {
return;
}
createRoutingParametersButtons(mapActivity, mode, optionsContainer);
int endPadding = mapActivity.getResources().getDimensionPixelSize(R.dimen.action_bar_image_side_margin);
if (mode.parameters.size() > 2) {
optionsTitle.setVisibility(View.GONE);
} else {
optionsTitle.setVisibility(View.VISIBLE);
endPadding += AndroidUtils.getTextWidth(app.getResources().getDimensionPixelSize(R.dimen.text_button_text_size), app.getString(R.string.shared_string_options));
}
if (AndroidUtils.isLayoutRtl(app)) {
optionsContainer.setPadding(endPadding, optionsContainer.getPaddingTop(), optionsContainer.getPaddingRight(), optionsContainer.getPaddingBottom());
} else {
// LTR
optionsContainer.setPadding(optionsContainer.getPaddingLeft(), optionsContainer.getPaddingTop(), endPadding, optionsContainer.getPaddingBottom());
}
}
use of net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.RouteMenuAppModes 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();
}
Aggregations