package org.droidplanner.android.fragments.account.editor.tool;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import com.o3dr.services.android.lib.coordinate.LatLong;
import com.o3dr.services.android.lib.drone.mission.MissionItemType;
import org.droidplanner.android.R;
import java.util.List;
/**
* Created by Fredia Huya-Kouadio on 8/25/15.
*/
class DrawToolsImpl extends EditorToolsImpl implements AdapterView.OnItemSelectedListener {
static final MissionItemType[] DRAW_ITEMS_TYPE = {
MissionItemType.WAYPOINT,
MissionItemType.SPLINE_WAYPOINT,
MissionItemType.SURVEY,
MissionItemType.SPLINE_SURVEY
};
private final static String EXTRA_SELECTED_DRAW_MISSION_ITEM_TYPE = "extra_selected_draww_mission_item_type";
private MissionItemType selectedType = DRAW_ITEMS_TYPE[0];
DrawToolsImpl(EditorToolsFragment fragment) {
super(fragment);
}
void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (selectedType != null)
outState.putString(EXTRA_SELECTED_DRAW_MISSION_ITEM_TYPE, selectedType.name());
}
void onRestoreInstanceState(Bundle savedState) {
super.onRestoreInstanceState(savedState);
final String selectedTypeName = savedState.getString(EXTRA_SELECTED_DRAW_MISSION_ITEM_TYPE,
DRAW_ITEMS_TYPE[0].name());
selectedType = MissionItemType.valueOf(selectedTypeName);
}
@Override
public EditorToolsFragment.EditorTools getEditorTools() {
return EditorToolsFragment.EditorTools.DRAW;
}
@Override
public void setup() {
EditorToolsFragment.EditorToolListener listener = editorToolsFragment.listener;
if (listener != null) {
listener.enableGestureDetection(true);
}
if (missionProxy != null)
missionProxy.selection.clearSelection();
if (selectedType == MissionItemType.SURVEY) {
Toast.makeText(editorToolsFragment.getContext(), R.string.draw_the_survey_region, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onPathFinished(List<LatLong> points) {
if (missionProxy != null) {
switch (selectedType) {
case WAYPOINT:
default:
missionProxy.addWaypoints(points);
break;
case SPLINE_WAYPOINT:
missionProxy.addSplineWaypoints(points);
break;
case SURVEY:
if (points.size() > 2) {
missionProxy.addSurveyPolygon(points, false);
} else {
editorToolsFragment.setTool(EditorToolsFragment.EditorTools.DRAW);
return;
}
break;
case SPLINE_SURVEY:
if (points.size() > 2) {
missionProxy.addSurveyPolygon(points, true);
} else {
editorToolsFragment.setTool(EditorToolsFragment.EditorTools.DRAW);
return;
}
break;
}
}
editorToolsFragment.setTool(EditorToolsFragment.EditorTools.NONE);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectedType = (MissionItemType) parent.getItemAtPosition(position);
if (selectedType == MissionItemType.SURVEY || selectedType == MissionItemType.SPLINE_SURVEY) {
Toast.makeText(editorToolsFragment.getContext(), R.string.draw_the_survey_region, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
selectedType = DRAW_ITEMS_TYPE[0];
}
MissionItemType getSelected() {
return selectedType;
}
}