package net.osmand.plus.mapcontextmenu.builders;
import android.view.View;
import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.Amenity;
import net.osmand.data.FavouritePoint;
import net.osmand.data.QuadRect;
import net.osmand.data.TransportStop;
import net.osmand.osm.PoiCategory;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.plus.mapillary.MapillaryPlugin;
import net.osmand.util.MapUtils;
import java.util.List;
public class FavouritePointMenuBuilder extends MenuBuilder {
private final FavouritePoint fav;
private Object originObject;
public FavouritePointMenuBuilder(MapActivity mapActivity, final FavouritePoint fav) {
super(mapActivity);
this.fav = fav;
setShowNearestWiki(true);
acquireOriginObject();
}
public void acquireOriginObject()
{
String originObjectName = fav.getOriginObjectName();
if (originObjectName.length() > 0) {
if (originObjectName.startsWith(Amenity.class.getSimpleName())) {
originObject = findAmenity(originObjectName, fav.getLatitude(), fav.getLongitude());
} else if (originObjectName.startsWith(TransportStop.class.getSimpleName())) {
originObject = findTransportStop(originObjectName, fav.getLatitude(), fav.getLongitude());
}
}
}
public Object getOriginObject() {
return originObject;
}
@Override
protected void buildNearestWikiRow(View view) {
if (originObject == null || !(originObject instanceof Amenity)) {
super.buildNearestWikiRow(view);
}
}
@Override
public void buildInternal(View view) {
if (originObject != null && originObject instanceof Amenity) {
AmenityMenuBuilder builder = new AmenityMenuBuilder(mapActivity, (Amenity) originObject);
builder.setLatLon(getLatLon());
builder.setLight(light);
builder.buildInternal(view);
}
}
private Amenity findAmenity(String nameStringEn, double lat, double lon) {
QuadRect rect = MapUtils.calculateLatLonBbox(lat, lon, 15);
List<Amenity> amenities = app.getResourceManager().searchAmenities(
new BinaryMapIndexReader.SearchPoiTypeFilter() {
@Override
public boolean accept(PoiCategory type, String subcategory) {
return true;
}
@Override
public boolean isEmpty() {
return false;
}
}, rect.top, rect.left, rect.bottom, rect.right, -1, null);
for (Amenity amenity : amenities) {
String stringEn = amenity.toStringEn();
if (stringEn.equals(nameStringEn)) {
return amenity;
}
}
return null;
}
private TransportStop findTransportStop(String nameStringEn, double lat, double lon) {
QuadRect rect = MapUtils.calculateLatLonBbox(lat, lon, 15);
List<TransportStop> res = app.getResourceManager().searchTransportSync(rect.top, rect.left,
rect.bottom, rect.right, new ResultMatcher<TransportStop>() {
@Override
public boolean publish(TransportStop object) {
return true;
}
@Override
public boolean isCancelled() {
return false;
}
});
for (TransportStop stop : res) {
String stringEn = stop.toStringEn();
if (stringEn.equals(nameStringEn)) {
return stop;
}
}
return null;
}
}