package org.droidplanner.android.proxy.mission.item.fragments; import android.content.Context; import android.view.View; import com.o3dr.services.android.lib.drone.mission.MissionItemType; import com.o3dr.services.android.lib.drone.mission.item.spatial.Circle; import org.beyene.sius.unit.length.LengthUnit; import org.droidplanner.android.R; import org.droidplanner.android.proxy.mission.MissionProxy; import org.droidplanner.android.utils.Utils; import org.droidplanner.android.utils.unit.providers.length.LengthUnitProvider; import org.droidplanner.android.view.spinnerWheel.CardWheelHorizontalView; import org.droidplanner.android.view.spinnerWheel.adapters.LengthWheelAdapter; import org.droidplanner.android.view.spinnerWheel.adapters.NumericWheelAdapter; import java.util.List; public class MissionCircleFragment extends MissionDetailFragment implements CardWheelHorizontalView.OnCardWheelScrollListener { @Override protected int getResource() { return R.layout.fragment_editor_detail_circle; } @Override public void onApiConnected() { super.onApiConnected(); final View view = getView(); final Context context = getActivity().getApplicationContext(); typeSpinner.setSelection(commandAdapter.getPosition(MissionItemType.CIRCLE)); final LengthUnitProvider lengthUP = getLengthUnitProvider(); final LengthWheelAdapter altitudeAdapter = new LengthWheelAdapter(context, R.layout.wheel_text_centered, lengthUP.boxBaseValueToTarget(MIN_ALTITUDE), lengthUP.boxBaseValueToTarget(MAX_ALTITUDE)); CardWheelHorizontalView<LengthUnit> altitudePicker = (CardWheelHorizontalView<LengthUnit>) view .findViewById(R.id.altitudePicker); altitudePicker.setViewAdapter(altitudeAdapter); altitudePicker.addScrollListener(this); final NumericWheelAdapter loiterTurnAdapter = new NumericWheelAdapter(context, R.layout.wheel_text_centered, 0, 50, "%d"); CardWheelHorizontalView<Integer> loiterTurnPicker = (CardWheelHorizontalView<Integer>) view .findViewById(R.id.loiterTurnPicker); loiterTurnPicker.setViewAdapter(loiterTurnAdapter); loiterTurnPicker.addScrollListener(this); final LengthWheelAdapter loiterRadiusAdapter = new LengthWheelAdapter(context, R.layout.wheel_text_centered, lengthUP.boxBaseValueToTarget(Utils.MIN_DISTANCE), lengthUP.boxBaseValueToTarget(Utils.MAX_RADIUS)); CardWheelHorizontalView<LengthUnit> loiterRadiusPicker = (CardWheelHorizontalView<LengthUnit>) view .findViewById(R.id.loiterRadiusPicker); loiterRadiusPicker.setViewAdapter(loiterRadiusAdapter); loiterRadiusPicker.addScrollListener(this); // Use the first one as reference. final Circle firstItem = getMissionItems().get(0); altitudePicker.setCurrentValue(lengthUP.boxBaseValueToTarget(firstItem.getCoordinate().getAltitude())); loiterTurnPicker.setCurrentValue(firstItem.getTurns()); loiterRadiusPicker.setCurrentValue(lengthUP.boxBaseValueToTarget(firstItem.getRadius())); } @Override public void onScrollingStarted(CardWheelHorizontalView cardWheel, Object startValue) { } @Override public void onScrollingUpdate(CardWheelHorizontalView cardWheel, Object oldValue, Object newValue) { } @Override public void onScrollingEnded(CardWheelHorizontalView cardWheel, Object startValue, Object endValue) { switch (cardWheel.getId()) { case R.id.altitudePicker: { final double baseValue = ((LengthUnit) endValue).toBase().getValue(); for (Circle item : getMissionItems()) { item.getCoordinate().setAltitude(baseValue); } getMissionProxy().notifyMissionUpdate(); break; } case R.id.loiterRadiusPicker: { final double baseValue = ((LengthUnit) endValue).toBase().getValue(); for (Circle item : getMissionItems()) { item.setRadius(baseValue); } MissionProxy missionProxy = getMissionProxy(); if (missionProxy != null) missionProxy.notifyMissionUpdate(); break; } case R.id.loiterTurnPicker: int turns = (Integer) endValue; for (Circle item : getMissionItems()) { item.setTurns(turns); } getMissionProxy().notifyMissionUpdate(); break; } } @Override public List<Circle> getMissionItems() { return (List<Circle>) super.getMissionItems(); } }