package org.droidplanner.android.graphic.map;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.Toast;
import com.o3dr.android.client.Drone;
import com.o3dr.android.client.apis.VehicleApi;
import com.o3dr.services.android.lib.coordinate.LatLong;
import com.o3dr.services.android.lib.coordinate.LatLongAlt;
import com.o3dr.services.android.lib.drone.attribute.AttributeType;
import com.o3dr.services.android.lib.drone.property.Home;
import com.o3dr.services.android.lib.model.AbstractCommandListener;
import org.droidplanner.android.R;
import org.droidplanner.android.maps.MarkerInfo;
import timber.log.Timber;
public class GraphicHome extends MarkerInfo {
private final Drone drone;
private final Context context;
public GraphicHome(Drone drone, Context context) {
this.drone = drone;
this.context = context;
}
@Override
public float getAnchorU() {
return 0.5f;
}
public boolean isValid() {
Home droneHome = drone.getAttribute(AttributeType.HOME);
return droneHome != null && droneHome.isValid();
}
@Override
public float getAnchorV() {
return 0.5f;
}
@Override
public Bitmap getIcon(Resources res) {
return BitmapFactory.decodeResource(res, R.drawable.ic_wp_home);
}
@Override
public LatLong getPosition() {
Home droneHome = drone.getAttribute(AttributeType.HOME);
if(droneHome == null) return null;
return droneHome.getCoordinate();
}
public void setPosition(LatLong position){
//Move the home location
final Home currentHome = drone.getAttribute(AttributeType.HOME);
final LatLongAlt homeCoord = currentHome.getCoordinate();
final double homeAlt = homeCoord == null ? 0 : homeCoord.getAltitude();
final LatLongAlt newHome = new LatLongAlt(position, homeAlt);
VehicleApi.getApi(drone).setVehicleHome(newHome, new AbstractCommandListener() {
@Override
public void onSuccess() {
Timber.i("Updated home location to %s", newHome);
Toast.makeText(context, "Updated home location.", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(int i) {
Timber.e("Unable to update home location: %d", i);
}
@Override
public void onTimeout() {
Timber.w("Home location update timed out.");
}
});
}
@Override
public String getSnippet() {
Home droneHome = drone.getAttribute(AttributeType.HOME);
LatLongAlt coordinate = droneHome == null ? null : droneHome.getCoordinate();
return "Home " + (coordinate == null ? "N/A" : coordinate.getAltitude());
}
@Override
public String getTitle() {
return "Home";
}
@Override
public boolean isVisible() {
return isValid();
}
@Override
public boolean isDraggable() {
return true;
}
}