package org.droidplanner.android.graphic.map; import android.content.res.Resources; import android.graphics.Bitmap; import android.util.Log; import com.o3dr.android.client.Drone; import com.o3dr.android.client.apis.ControlApi; import com.o3dr.services.android.lib.coordinate.LatLong; import com.o3dr.services.android.lib.drone.attribute.AttributeType; import com.o3dr.services.android.lib.drone.property.Gps; import com.o3dr.services.android.lib.drone.property.GuidedState; import org.droidplanner.android.R; import org.droidplanner.android.maps.DPMap.PathSource; import org.droidplanner.android.maps.MarkerWithText; import org.droidplanner.android.maps.MarkerInfo; import java.util.ArrayList; import java.util.List; public class GraphicGuided extends MarkerInfo implements PathSource { private final static String TAG = GraphicGuided.class.getSimpleName(); private final Drone drone; public GraphicGuided(Drone drone) { this.drone = drone; } @Override public List<LatLong> getPathPoints() { List<LatLong> path = new ArrayList<LatLong>(); GuidedState guidedPoint = drone.getAttribute(AttributeType.GUIDED_STATE); if (guidedPoint != null && guidedPoint.isActive()) { Gps gps = drone.getAttribute(AttributeType.GPS); if (gps != null && gps.isValid()) { path.add(gps.getPosition()); } path.add(guidedPoint.getCoordinate()); } return path; } @Override public boolean isVisible() { GuidedState guidedPoint = drone.getAttribute(AttributeType.GUIDED_STATE); return guidedPoint != null && guidedPoint.isActive(); } @Override public float getAnchorU() { return 0.5f; } @Override public float getAnchorV() { return 0.5f; } @Override public LatLong getPosition() { GuidedState guidedPoint = drone.getAttribute(AttributeType.GUIDED_STATE); return guidedPoint == null ? null : guidedPoint.getCoordinate(); } public void setPosition(LatLong coord) { try { ControlApi.getApi(drone).goTo(coord, true, null); } catch (Exception e) { Log.e(TAG, "Unable to update guided point position.", e); } } @Override public Bitmap getIcon(Resources res) { return MarkerWithText.getMarkerWithTextAndDetail(R.drawable.ic_wp_map, "Guided", "", res); } @Override public boolean isDraggable() { return true; } }