diff --git a/OsmAnd-java/src/net/osmand/data/TransportStop.java b/OsmAnd-java/src/net/osmand/data/TransportStop.java index e08afc39b5..3cc84afc18 100644 --- a/OsmAnd-java/src/net/osmand/data/TransportStop.java +++ b/OsmAnd-java/src/net/osmand/data/TransportStop.java @@ -2,6 +2,7 @@ package net.osmand.data; public class TransportStop extends MapObject { private int[] referencesToRoutes = null; + private Amenity amenity; public int distance; public TransportStop(){ @@ -15,4 +16,11 @@ public class TransportStop extends MapObject { this.referencesToRoutes = referencesToRoutes; } + public Amenity getAmenity() { + return amenity; + } + + public void setAmenity(Amenity amenity) { + this.amenity = amenity; + } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/TransportStopMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/TransportStopMenuBuilder.java new file mode 100644 index 0000000000..a4266c1f4c --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/TransportStopMenuBuilder.java @@ -0,0 +1,34 @@ +package net.osmand.plus.mapcontextmenu.builders; + +import android.view.View; + +import net.osmand.data.Amenity; +import net.osmand.data.TransportStop; +import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.mapcontextmenu.MenuBuilder; + +public class TransportStopMenuBuilder extends MenuBuilder { + + private final TransportStop transportStop; + private Amenity amenity; + + public TransportStopMenuBuilder(MapActivity mapActivity, final TransportStop transportStop) { + super(mapActivity); + this.transportStop = transportStop; + acquireOriginObject(); + } + + private void acquireOriginObject() { + amenity = transportStop.getAmenity(); + } + + @Override + public void buildInternal(View view) { + if (amenity != null) { + AmenityMenuBuilder builder = new AmenityMenuBuilder(mapActivity, amenity); + builder.setLatLon(getLatLon()); + builder.setLight(light); + builder.buildInternal(view); + } + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportStopController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportStopController.java index 2778b67a4d..c4bd2655f0 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportStopController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportStopController.java @@ -1,13 +1,15 @@ package net.osmand.plus.mapcontextmenu.controllers; +import net.osmand.data.Amenity; +import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.QuadRect; import net.osmand.data.TransportRoute; import net.osmand.data.TransportStop; import net.osmand.plus.R; +import net.osmand.plus.mapcontextmenu.builders.TransportStopMenuBuilder; import net.osmand.plus.transport.TransportStopRoute; import net.osmand.plus.activities.MapActivity; -import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.plus.resources.TransportIndexRepository; import net.osmand.plus.transport.TransportStopType; @@ -29,8 +31,8 @@ public class TransportStopController extends MenuController { private TransportStopType topType; public TransportStopController(MapActivity mapActivity, - PointDescription pointDescription, TransportStop transportStop) { - super(new MenuBuilder(mapActivity), pointDescription, mapActivity); + PointDescription pointDescription, TransportStop transportStop) { + super(new TransportStopMenuBuilder(mapActivity, transportStop), pointDescription, mapActivity); this.transportStop = transportStop; processRoutes(); } @@ -157,4 +159,13 @@ public class TransportStopController extends MenuController { return false; } + @Override + public void addPlainMenuItems(String typeStr, PointDescription pointDescription, LatLon latLon) { + Amenity amenity = transportStop.getAmenity(); + if (amenity != null) { + AmenityMenuController.addTypeMenuItem(amenity, builder); + } else { + addMyLocationToPlainItems(latLon); + } + } } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index c4d30921d5..40e7c19be5 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -18,6 +18,7 @@ import android.widget.Toast; import net.osmand.AndroidUtils; import net.osmand.PlatformUtil; import net.osmand.data.Amenity; +import net.osmand.data.TransportStop; import net.osmand.osm.PoiType; import net.osmand.osm.edit.Node; import net.osmand.plus.ContextMenuAdapter; @@ -195,7 +196,8 @@ public class OsmEditingPlugin extends OsmandPlugin { } else if (resId == R.string.context_menu_item_modify_note) { modifyOsmNote(mapActivity, (OsmNotesPoint) selectedObj); } else if (resId == R.string.poi_context_menu_modify) { - EditPoiDialogFragment.showEditInstance((Amenity) selectedObj, mapActivity); + EditPoiDialogFragment.showEditInstance(selectedObj instanceof TransportStop ? + ((TransportStop) selectedObj).getAmenity() : (Amenity) selectedObj, mapActivity); } else if (resId == R.string.poi_context_menu_modify_osm_change) { final Node entity = ((OpenstreetmapPoint) selectedObj).getEntity(); EditPoiDialogFragment.createInstance(entity, false) @@ -222,6 +224,18 @@ public class OsmEditingPlugin extends OsmandPlugin { .setOrder(MODIFY_OSM_CHANGE_ITEM_ORDER) .setListener(listener) .createItem()); + } else if (selectedObj instanceof TransportStop && ((TransportStop) selectedObj).getAmenity() != null) { + TransportStop transportStop = (TransportStop) selectedObj; + Amenity amenity = transportStop.getAmenity(); + final PoiType poiType = amenity.getType().getPoiTypeByKeyName(amenity.getSubType()); + isEditable = !amenity.getType().isWiki() && poiType != null && !poiType.isNotEditableOsm(); + if (isEditable) { + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify, mapActivity) + .setIcon(R.drawable.ic_action_edit_dark) + .setOrder(MODIFY_POI_ITEM_ORDER) + .setListener(listener) + .createItem()); + } } else { adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_create_poi, mapActivity) .setIcon(R.drawable.ic_action_plus_dark) diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index 966d496de0..1fc00e95c2 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -760,6 +760,7 @@ public class ContextMenuLayer extends OsmandMapLayer { for (TransportStop transportStop : transportStops) { if (transportStop.getName().startsWith(amenity.getName())) { amenityTransportStops.add(transportStop); + transportStop.setAmenity(amenity); } } if (amenityTransportStops.size() > 0) {