package net.osmand.plus.routepointsnavigation; import android.graphics.Canvas; import android.graphics.PointF; import android.widget.ArrayAdapter; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.views.ContextMenuLayer; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; import java.util.List; public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { private final RoutePointsPlugin plugin; private final MapActivity map; public RoutePointsLayer(MapActivity map, RoutePointsPlugin plugin){ this.map = map; this.plugin = plugin; } @Override public boolean disableSingleTap() { return false; } @Override public boolean disableLongPressOnMap() { return false; } @Override public boolean isObjectClickable(Object o) { return false; } @Override public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o) { } @Override public LatLon getObjectLocation(Object o) { return null; } @Override public PointDescription getObjectName(Object o) { return null; } @Override public void initLayer(OsmandMapTileView view) { } @Override public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) { } @Override public void destroyLayer() { } @Override public boolean drawInScreenPixels() { return false; } @Override public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter, MapActivity mapActivity) { if (o != null && o instanceof GPXUtilities.WptPt && plugin.getCurrentRoute() != null){ final GPXUtilities.WptPt point = (GPXUtilities.WptPt) o; ContextMenuAdapter.ItemClickListener listener = new ContextMenuAdapter.ItemClickListener() { @Override public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked) { if (itemId == R.string.mark_as_not_visited){ plugin.getCurrentRoute().markPoint(point,false); plugin.saveCurrentRoute(); } else if (itemId == R.string.mark_as_visited) { plugin.getCurrentRoute().markPoint(point, true); plugin.saveCurrentRoute(); } else if (itemId == R.string.mark_as_current){ plugin.getCurrentRoute().markPoint(point, false); plugin.getCurrentRoute().navigateToPoint(point); plugin.saveCurrentRoute(); } else if (itemId == R.string.navigate_to_next){ plugin.getCurrentRoute().navigateToNextPoint(); plugin.saveCurrentRoute(); } map.refreshMap(); return true; } }; if (plugin.getCurrentRoute().getPointStatus(point)){ adapter.addItem(new ContextMenuItem.ItemBuilder() .setTitleId(R.string.mark_as_not_visited, mapActivity) .setIcon(R.drawable.ic_action_gremove_dark) .setListener(listener) .createItem()); } else { adapter.addItem(new ContextMenuItem.ItemBuilder() .setTitleId(R.string.mark_as_visited, mapActivity) .setIcon(R.drawable.ic_action_done) .setListener(listener) .createItem()); } RoutePointsPlugin.RoutePoint routePoint = plugin.getCurrentRoute().getRoutePointFromWpt(point); if (routePoint != null) { if (routePoint.isNextNavigate) { adapter.addItem(new ContextMenuItem.ItemBuilder() .setTitleId(R.string.navigate_to_next, mapActivity) .setIcon(R.drawable.ic_action_gnext_dark) .setListener(listener) .createItem()); } else { adapter.addItem(new ContextMenuItem.ItemBuilder() .setTitleId(R.string.mark_as_current, mapActivity) .setIcon(R.drawable.ic_action_signpost_dark) .setListener(listener) .createItem()); } } } } }