package net.osmand.plus.mapcontextmenu.controllers;
import net.osmand.NativeLibrary.RenderedObject;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.plus.mapcontextmenu.MenuController;
import net.osmand.plus.mapillary.MapillaryPlugin;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.render.RenderingIcons;
import net.osmand.util.Algorithms;
public class RenderedObjectMenuController extends MenuController {
private RenderedObject renderedObject;
public RenderedObjectMenuController(MapActivity mapActivity, PointDescription pointDescription, final RenderedObject renderedObject) {
super(new MenuBuilder(mapActivity), pointDescription, mapActivity);
builder.setShowNearestWiki(true);
this.renderedObject = renderedObject;
}
@Override
protected void setObject(Object object) {
if (object instanceof RenderedObject) {
this.renderedObject = (RenderedObject) object;
}
}
@Override
protected Object getObject() {
return renderedObject;
}
@Override
public boolean displayStreetNameInTitle() {
return Algorithms.isEmpty(getNameStr());
}
@Override
public boolean displayDistanceDirection() {
return true;
}
@Override
public int getLeftIconId() {
if (renderedObject.getIconRes() != null && RenderingIcons.containsBigIcon(renderedObject.getIconRes())) {
return RenderingIcons.getBigIconResourceId(renderedObject.getIconRes());
} else {
return R.drawable.ic_type_address;
}
}
@Override
public String getNameStr() {
if (!Algorithms.isEmpty(renderedObject.getName())) {
return renderedObject.getName();
} else if (renderedObject.getTags().size() > 0) {
String lang = getMapActivity().getMyApplication().getSettings().MAP_PREFERRED_LOCALE.get().toLowerCase();
String name = "";
if (!Algorithms.isEmpty(lang)) {
name = renderedObject.getTags().get("name:" + lang);
}
if (Algorithms.isEmpty(name)) {
name = renderedObject.getTags().get("name");
}
return name;
}
return "";
}
@Override
public String getCommonTypeStr() {
return getMapActivity().getString(R.string.shared_string_location);
}
@Override
public boolean needStreetName() {
return !getPointDescription().isAddress();
}
@Override
public void addPlainMenuItems(String typeStr, PointDescription pointDescription, final LatLon latLon) {
boolean osmEditingEnabled = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class) != null;
if (osmEditingEnabled && renderedObject.getId() != null
&& renderedObject.getId() > 0 &&
(renderedObject.getId() % 2 == 1 || (renderedObject.getId() >> 7) < Integer.MAX_VALUE)) {
String link;
if ((renderedObject.getId() >> 6) % 2 == 1) {
link = "http://www.openstreetmap.org/node/";
} else {
link = "http://www.openstreetmap.org/way/";
}
addPlainMenuItem(R.drawable.ic_action_info_dark, link + (renderedObject.getId() >> 7), true, true, null);
}
addMyLocationToPlainItems(latLon);
}
}