diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index 1beb0b830c..5884302e1f 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -321,6 +321,16 @@ public class MenuBuilder { return routes.size() > 0; } + private boolean showLocalTransportRoutes() { + List localTransportRoutes = mapContextMenu.getLocalTransportStopRoutes(); + return localTransportRoutes != null && localTransportRoutes.size() > 0; + } + + private boolean showNearbyTransportRoutes() { + List nearbyTransportRoutes = mapContextMenu.getNearbyTransportStopRoutes(); + return nearbyTransportRoutes != null && nearbyTransportRoutes.size() > 0; + } + void onHide() { hidden = true; } @@ -440,11 +450,12 @@ public class MenuBuilder { protected void buildTopInternal(View view) { if (showTransportRoutes()) { - buildRow(view, 0, null, app.getString(R.string.transport_Routes), 0, true, getCollapsableTransportStopRoutesView(view.getContext(), false, false), - false, 0, false, null, true); - - CollapsableView collapsableView = getCollapsableTransportStopRoutesView(view.getContext(), false, true); - if (collapsableView != null) { + if (showLocalTransportRoutes()) { + buildRow(view, 0, null, app.getString(R.string.transport_Routes), 0, true, getCollapsableTransportStopRoutesView(view.getContext(), false, false), + false, 0, false, null, true); + } + if (showNearbyTransportRoutes()) { + CollapsableView collapsableView = getCollapsableTransportStopRoutesView(view.getContext(), false, true); String routesWithingDistance = app.getString(R.string.transport_nearby_routes_within) + " " + OsmAndFormatter.getFormattedDistance(TransportStopController.SHOW_STOPS_RADIUS_METERS, app); buildRow(view, 0, null, routesWithingDistance, 0, true, collapsableView, false, 0, false, null, true); @@ -747,6 +758,19 @@ public class MenuBuilder { } } + private String adjustRouteRef(String ref) { + if (ref != null) { + int charPos = ref.lastIndexOf(':'); + if (charPos != -1) { + ref = ref.substring(0, charPos); + } + if (ref.length() > 4) { + ref = ref.substring(0, 4); + } + } + return ref; + } + public int dpToPx(float dp) { Resources r = app.getResources(); return (int) TypedValue.applyDimension( @@ -785,7 +809,7 @@ public class MenuBuilder { shape.setColor(route.getColor(mapActivity.getMyApplication(), !light)); transportRect.setBackgroundDrawable(shape); - transportRect.setText(route.route.getRef()); + transportRect.setText(adjustRouteRef(route.route.getRef())); baseView.addView(transportRect); LinearLayout infoView = new LinearLayout(view.getContext()); @@ -850,11 +874,7 @@ public class MenuBuilder { } else { buildTransportRouteRows(view, nearbyTransportStopRoutes); } - if (isNearbyRoutes && nearbyTransportStopRoutes.isEmpty()) { - return null; - } else { - return new CollapsableView(view, this, collapsed); - } + return new CollapsableView(view, this, collapsed); } private void buildTransportRouteRows(LinearLayout view, List routes) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java index 76abef2f0f..17128147db 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java @@ -521,7 +521,7 @@ public abstract class MenuController extends BaseMenuController implements Colla return null; } - private List getSubTransportStopRoutes(boolean nearby) { + protected List getSubTransportStopRoutes(boolean nearby) { List allRoutes = getTransportStopRoutes(); if (allRoutes != null) { List res = new ArrayList<>(); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java index 9c5d48894a..1123df3ac2 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java @@ -178,6 +178,24 @@ public class AmenityMenuController extends MenuController { return routes; } + @Override + protected List getSubTransportStopRoutes(boolean nearby) { + List allRoutes = getTransportStopRoutes(); + if (allRoutes != null) { + List res = new ArrayList<>(); + for (TransportStopRoute route : allRoutes) { + boolean isCurrentRouteLocal = route.refStop != null && route.refStop.getName().equals(route.stop.getName()); + if (!nearby && isCurrentRouteLocal) { + res.add(route); + } else if (nearby && route.refStop == null) { + res.add(route); + } + } + return res; + } + return null; + } + @Override public void addPlainMenuItems(String typeStr, PointDescription pointDescription, LatLon latLon) { } @@ -261,6 +279,9 @@ public class AmenityMenuController extends MenuController { r.desc = useEnglishNames ? rs.getEnName(true) : rs.getName(); r.route = rs; r.stop = s; + if (amenity.getLocation().equals(s.getLocation()) || (isSubwayEntrance && type == TransportStopType.SUBWAY)) { + r.refStop = s; + } r.distance = dist; this.routes.add(r); }