Deleted drag-sort-listview library

This commit is contained in:
Bennet Brunsen committed 2015-08-18 12:25:41 +02:00
1 parent 728f06e4c4
commit 4233e33756
8 files changed
+18 -770

No files matched your search

@@ -1,14 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="tests-jvm/src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry exported="true" kind="lib" path="libs/drag-sort-listview-0.6.1-SNAPSHOT.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.json.simple"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="lib" path="/com.sap.sailing.targetplatform.base/plugins/target-test/mockito-core-1.10.14.jar"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="tests-jvm/src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.json.simple"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="lib" path="/com.sap.sailing.targetplatform.base/plugins/target-test/mockito-core-1.10.14.jar"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
@@ -1,329 +0,0 @@
package com.sap.sailing.racecommittee.app.ui.fragments.dialogs;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.content.DialogInterface;
import android.content.Loader;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.mobeta.android.dslv.DragSortController;
import com.mobeta.android.dslv.DragSortListView;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.ui.adapters.finishing.CompetitorPositioningListAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.finishing.CompetitorsAdapter;
import com.sap.sailing.racecommittee.app.ui.comparators.NaturalNamedComparator;
import com.sap.sse.common.Named;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class PositioningFragment extends RaceDialogFragment {
private DragSortListView positioningListView;
private ListView competitorListView;
private DragSortController dragSortController;
private CompetitorsAdapter competitorsAdapter;
private CompetitorPositioningListAdapter positioningAdapter;
protected List<Competitor> competitors;
protected CompetitorResults positionedCompetitors;
protected Comparator<Named> competitorComparator;
private int dragStartMode = DragSortController.ON_DRAG;
private boolean removeEnabled = true;
private int removeMode = DragSortController.FLING_REMOVE;
private boolean sortEnabled = true;
private boolean dragEnabled = true;
private boolean isDialog() {
return getDialog() != null;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (isDialog()) {
getDialog().setTitle(R.string.set_positionings);
}
return inflater.inflate(R.layout.race_positioning_view, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (isDialog()) {
Button okButton = (Button) getView().findViewById(R.id.buttonPositionOk);
okButton.setVisibility(Button.VISIBLE);
okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getRaceState().setFinishPositioningConfirmed(MillisecondsTimePoint.now());
dismiss();
}
});
}
competitors = new ArrayList<Competitor>();
Util.addAll(getRace().getCompetitors(), competitors);
competitorComparator = new NaturalNamedComparator();
Collections.sort(competitors, competitorComparator);
competitorsAdapter = new CompetitorsAdapter(getActivity(), R.layout.welter_grid_competitor_cell, competitors);
loadCompetitors();
positionedCompetitors = initializeFinishPositioningList();
deletePositionedCompetitorsFromUnpositionedList();
positioningAdapter = new CompetitorPositioningListAdapter(getActivity(), R.layout.welter_positioning_item,
positionedCompetitors);
positioningListView = (DragSortListView) getView().findViewById(R.id.dragSortListPositioning);
positioningListView.setAdapter(positioningAdapter);
positioningListView.setDropListener(new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from != to) {
com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item = positioningAdapter.getItem(from);
setItemToNewPositioning(from, to, item);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
}
});
positioningListView.setRemoveListener(new DragSortListView.RemoveListener() {
@Override
public void remove(int toBeRemoved) {
com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item = positioningAdapter.getItem(toBeRemoved);
onCompetitorRemovedFromPositioningList(item);
}
});
positioningListView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
createMaxPointsReasonSelectionDialog(positionedCompetitors.get(position));
return true;
}
});
dragSortController = buildDragSortController(positioningListView);
positioningListView.setFloatViewManager(dragSortController);
positioningListView.setOnTouchListener(dragSortController);
positioningListView.setDragEnabled(dragEnabled);
competitorListView = (ListView) getView().findViewById(R.id.gridViewPositioning);
competitorListView.setAdapter(competitorsAdapter);
competitorListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
Competitor competitor = (Competitor) competitorsAdapter.getItem(position);
ExLog.i(getActivity(), "RaceFinishingFragment", "Grid is clicked at position " + position + " for competitor "
+ competitor.getName());
onCompetitorClickedOnGrid(competitor);
}
});
}
/**
* Creates a DragSortController and thereby defines the behaviour of the drag sort list
*/
public DragSortController buildDragSortController(DragSortListView dragSortListView) {
DragSortController controller = new DragSortController(dragSortListView);
controller.setDragHandleId(R.id.drag_handle);
controller.setFlingHandleId(R.id.drag_handle);
controller.setRemoveEnabled(removeEnabled);
controller.setSortEnabled(sortEnabled);
controller.setDragInitMode(dragStartMode);
controller.setRemoveMode(removeMode);
controller.setBackgroundColor(getActivity().getResources().getColor(R.color.welter_medium_blue));
return controller;
}
private void loadCompetitors() {
getActivity().setProgressBarIndeterminateVisibility(true);
// invalidate all competitors of this race
ReadonlyDataManager dataManager = OnlineDataManager.create(getActivity());
SharedDomainFactory domainFactory = dataManager.getDataStore().getDomainFactory();
for (Competitor competitor : getRace().getCompetitors()) {
domainFactory.getCompetitorStore().allowCompetitorResetToDefaults(competitor);
}
Loader<?> competitorLoaders = getLoaderManager().initLoader(0, null,
dataManager.createCompetitorsLoader(getRace(), new LoadClient<Collection<Competitor>>() {
@Override
public void onLoadFailed(Exception reason) {
getActivity().setProgressBarIndeterminateVisibility(false);
String toastText = getString(R.string.competitor_load_error);
Toast.makeText(getActivity(), String.format(toastText, reason.toString()),
Toast.LENGTH_LONG).show();
}
@Override
public void onLoadSucceeded(Collection<Competitor> data, boolean isCached) {
if (!isCached) {
getActivity().setProgressBarIndeterminateVisibility(false);
}
onLoadCompetitorsSucceeded(data);
}
}));
// Force load to get non-cached remote competitors...
competitorLoaders.forceLoad();
}
protected void onLoadCompetitorsSucceeded(Collection<Competitor> data) {
competitors.clear();
competitors.addAll(data);
Collections.sort(competitors, competitorComparator);
deleteObsoleteCompetitorsFromPositionedList(data);
deletePositionedCompetitorsFromUnpositionedList();
competitorsAdapter.notifyDataSetChanged();
}
private void deleteObsoleteCompetitorsFromPositionedList(Collection<Competitor> validCompetitors) {
List<com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>> toBeDeleted = new ArrayList<com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>>();
for (com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> positionedItem : positionedCompetitors) {
if (!validCompetitors.contains(getCompetitorStore().getExistingCompetitorById(positionedItem.getA()))) {
toBeDeleted.add(positionedItem);
}
}
positionedCompetitors.removeAll(toBeDeleted);
}
private void deletePositionedCompetitorsFromUnpositionedList() {
for (com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> positionedItem : positionedCompetitors) {
Competitor competitor = getCompetitorStore().getExistingCompetitorById(positionedItem.getA());
competitors.remove(competitor);
}
}
private CompetitorResults initializeFinishPositioningList() {
CompetitorResults positionings = getRaceState().getFinishPositioningList();
return positionings == null ? new CompetitorResultsImpl() : positionings;
}
private void setItemToNewPositioning(int from, int to, com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item) {
positioningAdapter.remove(item);
positioningAdapter.insert(item, to);
}
private void createMaxPointsReasonSelectionDialog(final com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
final CharSequence[] maxPointsReasons = getAllMaxPointsReasons();
builder.setTitle(R.string.select_penalty_reason).setItems(maxPointsReasons,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int position) {
setMaxPointsReasonForItem(item, maxPointsReasons[position]);
}
});
builder.create().show();
}
private CharSequence[] getAllMaxPointsReasons() {
List<CharSequence> result = new ArrayList<CharSequence>();
for (MaxPointsReason reason : MaxPointsReason.values()) {
result.add(reason.name());
}
return result.toArray(new CharSequence[result.size()]);
}
protected void setMaxPointsReasonForItem(com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item,
CharSequence maxPointsReasonName) {
MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString());
com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> newItem = new com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>(
item.getA(), item.getB(), maxPointsReason);
int currentIndexOfItem = positionedCompetitors.indexOf(item);
replaceItemInPositioningList(currentIndexOfItem, item, newItem);
if (!maxPointsReason.equals(MaxPointsReason.NONE)) {
setCompetitorToBottomOfPositioningList(newItem);
}
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
private void replaceItemInPositioningList(int currentIndexOfItem,
com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item, com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> newItem) {
positioningAdapter.remove(item);
positioningAdapter.insert(newItem, currentIndexOfItem);
}
private void setCompetitorToBottomOfPositioningList(com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item) {
int currentIndex = positionedCompetitors.indexOf(item);
int lastIndex = positionedCompetitors.size() - 1;
setItemToNewPositioning(currentIndex, lastIndex, item);
}
protected void onCompetitorClickedOnGrid(Competitor competitor) {
addNewCompetitorToPositioningList(competitor);
removeCompetitorFromGrid(competitor);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
protected void removeCompetitorFromGrid(Competitor competitor) {
competitors.remove(competitor);
Collections.sort(competitors, competitorComparator);
competitorsAdapter.notifyDataSetChanged();
}
private void addNewCompetitorToPositioningList(Competitor competitor) {
positionedCompetitors.add(new com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason>(competitor.getId(), competitor
.getName(), MaxPointsReason.NONE));
positioningAdapter.notifyDataSetChanged();
}
protected void onCompetitorRemovedFromPositioningList(com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item) {
Competitor competitor = getCompetitorStore().getExistingCompetitorById(item.getA());
addNewCompetitorToCompetitorList(competitor);
removeCompetitorFromPositionings(item);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
private void addNewCompetitorToCompetitorList(Competitor competitor) {
competitors.add(competitor);
Collections.sort(competitors, competitorComparator);
competitorsAdapter.notifyDataSetChanged();
}
protected void removeCompetitorFromPositionings(com.sap.sse.common.Util.Triple<Serializable, String, MaxPointsReason> item) {
positionedCompetitors.remove(item);
positioningAdapter.notifyDataSetChanged();
}
private CompetitorStore getCompetitorStore() {
return DataManager.create(getActivity()).getDataStore().getDomainFactory().getCompetitorStore();
}
}
@@ -1,419 +0,0 @@
package com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import android.content.DialogInterface;
import android.content.Loader;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.Toast;
import com.mobeta.android.dslv.DragSortController;
import com.mobeta.android.dslv.DragSortListView;
import com.sap.sailing.domain.base.ControlPoint;
import com.sap.sailing.domain.base.ControlPointWithTwoMarks;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.ControlPointWithTwoMarksImpl;
import com.sap.sailing.domain.base.impl.CourseDataImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.InMemoryDataStore;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.ui.adapters.coursedesign.CourseElementListAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.coursedesign.CourseListDataElement;
import com.sap.sailing.racecommittee.app.ui.adapters.coursedesign.DraggableCourseElementListAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.coursedesign.MarkGridAdapter;
import com.sap.sailing.racecommittee.app.ui.comparators.NaturalNamedComparator;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.utils.ESSMarkImageHelper;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class ESSCourseDesignDialog extends RaceDialogFragment {
// private final static String TAG =
// ESSCourseDesignDialogFragment.class.getName();
private static int MarksLoaderId = 0;
private List<Mark> aMarkList;
private MarkGridAdapter gridAdapter;
private List<CourseListDataElement> courseElements;
private List<CourseListDataElement> previousCourseElements;
private DraggableCourseElementListAdapter courseElementAdapter;
private CourseElementListAdapter previousCourseElementAdapter;
private DragSortListView newCourseListView;
private ListView previousCourseListView;
private DragSortController dragSortController;
private Button publishButton;
private Button unpublishButton;
private Button takePreviousButton;
private ReadonlyDataManager dataManager;
private int dragStartMode = DragSortController.ON_DRAG;
private boolean removeEnabled = true;
private int removeMode = DragSortController.FLING_REMOVE;
private boolean sortEnabled = true;
private boolean dragEnabled = true;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.race_choose_ess_course_design_view, container);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getDialog().setTitle(getActivity().getText(R.string.course_design_dialog_title));
dataManager = DataManager.create(getActivity());
aMarkList = new ArrayList<Mark>();
courseElements = new ArrayList<CourseListDataElement>();
previousCourseElements = new ArrayList<CourseListDataElement>();
gridAdapter = new MarkGridAdapter(getActivity(), aMarkList, ESSMarkImageHelper.getInstance());
courseElementAdapter = new DraggableCourseElementListAdapter(getActivity(), courseElements,
ESSMarkImageHelper.getInstance());
previousCourseElementAdapter = new CourseElementListAdapter(getActivity(), previousCourseElements,
ESSMarkImageHelper.getInstance());
loadMarks();
fillPreviousCourseElementsWithLastPublishedCourseDesign();
GridView gridView = (GridView) getView().findViewById(R.id.gridViewAssets);
gridView.setAdapter(gridAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
Mark mark = (Mark) gridAdapter.getItem(position);
Log.i("CourseDesign", "Grid is clicked at position " + position + " for buoy " + mark.getName());
onMarkClickedOnGrid(mark);
}
});
newCourseListView = (DragSortListView) getView().findViewById(R.id.listViewNewCourse);
newCourseListView.setAdapter(courseElementAdapter);
newCourseListView.setDropListener(new DragSortListView.DropListener() {
@Override
public void drop(int from, int to) {
if (from != to) {
CourseListDataElement item = courseElementAdapter.getItem(from);
courseElementAdapter.remove(item);
courseElementAdapter.insert(item, to);
}
}
});
newCourseListView.setRemoveListener(new DragSortListView.RemoveListener() {
@Override
public void remove(int toBeRemoved) {
CourseListDataElement item = courseElementAdapter.getItem(toBeRemoved);
courseElementAdapter.remove(item);
}
});
newCourseListView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
CourseListDataElement courseElement = courseElementAdapter.getItem(position);
createPassingInstructionDialog(courseElement);
return true;
}
});
dragSortController = buildDragSortController(newCourseListView);
newCourseListView.setFloatViewManager(dragSortController);
newCourseListView.setOnTouchListener(dragSortController);
newCourseListView.setDragEnabled(dragEnabled);
if (getRace().getCourseDesign() != null) {
fillCourseElementsInList();
}
previousCourseListView = (ListView) getView().findViewById(R.id.listViewPreviousCourse);
previousCourseListView.setAdapter(previousCourseElementAdapter);
takePreviousButton = (Button) getView().findViewById(R.id.takePreviousCourseDesignButton);
takePreviousButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
if (!previousCourseElements.isEmpty()) {
if (!courseElements.isEmpty()) {
createUsePreviousCourseDialog();
} else {
copyPreviousToNewCourseDesign();
}
} else {
Toast.makeText(getActivity(), "No course available to copy", Toast.LENGTH_LONG).show();
}
}
});
publishButton = (Button) getView().findViewById(R.id.publishCourseDesignButton);
publishButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
try {
CourseBase courseData = convertCourseElementsToACourseData();
sendCourseDataAndDismiss(courseData);
} catch (IllegalStateException ex) {
if (ex.getMessage().equals("Missing second mark")) {
Toast.makeText(getActivity(),
"The selected passing instructions require two buoys. Please select the second buoy.",
Toast.LENGTH_LONG).show();
} else if (ex.getMessage().equals("Each waypoints needs passing instructions")) {
Toast.makeText(
getActivity(),
"A waypoint has no passing instructions. Please select the passing instruction by clicking long on the waypoint.",
Toast.LENGTH_LONG).show();
}
} catch (IllegalArgumentException ex) {
Toast.makeText(getActivity(), "The course design has to have at least one waypoint.",
Toast.LENGTH_LONG).show();
}
}
});
unpublishButton = (Button) getView().findViewById(R.id.unpublishCourseDesignButton);
unpublishButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
CourseBase emptyCourse = new CourseDataImpl("Unpublished course design");
sendCourseDataAndDismiss(emptyCourse);
}
});
}
/**
* Creates a DragSortController and thereby defines the behavior of the drag sort list
*/
public DragSortController buildDragSortController(DragSortListView dragSortListView) {
DragSortController controller = new DragSortController(dragSortListView);
controller.setDragHandleId(R.id.drag_handle);
controller.setFlingHandleId(R.id.drag_handle);
controller.setRemoveEnabled(removeEnabled);
controller.setSortEnabled(sortEnabled);
controller.setDragInitMode(dragStartMode);
controller.setRemoveMode(removeMode);
controller.setBackgroundColor(getActivity().getResources().getColor(R.color.welter_medium_blue));
return controller;
}
private void fillPreviousCourseElementsWithLastPublishedCourseDesign() {
CourseBase lastPublishedCourseDesign = InMemoryDataStore.INSTANCE.getLastPublishedCourseDesign();
if (lastPublishedCourseDesign != null) {
fillPreviousCourseElementsInList(lastPublishedCourseDesign);
}
}
private void loadMarks() {
Loader<?> marksLoader = getLoaderManager().restartLoader(MarksLoaderId, null,
dataManager.createMarksLoader(getRace(), new LoadClient<Collection<Mark>>() {
@Override
public void onLoadFailed(Exception reason) {
Toast.makeText(getActivity(), String.format("Marks: %s", reason.toString()), Toast.LENGTH_LONG)
.show();
}
@Override
public void onLoadSucceeded(Collection<Mark> data, boolean isCached) {
onLoadMarksSucceeded(data);
}
}));
// ignore any cached results and force a remote load of the marks,
// because we always need the most current.
marksLoader.forceLoad();
}
protected void onLoadMarksSucceeded(Collection<Mark> data) {
aMarkList.clear();
aMarkList.addAll(data);
Collections.sort(aMarkList, new NaturalNamedComparator());
gridAdapter.notifyDataSetChanged();
}
private void fillPreviousCourseElementsInList(CourseBase previousCourseData) {
if (previousCourseData != null) {
previousCourseElements.clear();
previousCourseElements.addAll(convertCourseDesignToCourseElements(previousCourseData));
previousCourseElementAdapter.notifyDataSetChanged();
}
}
private void fillCourseElementsInList() {
courseElements.clear();
courseElements.addAll(convertCourseDesignToCourseElements(getRace().getCourseDesign()));
courseElementAdapter.notifyDataSetChanged();
}
protected List<CourseListDataElement> convertCourseDesignToCourseElements(CourseBase courseData) {
List<CourseListDataElement> elementList = new ArrayList<CourseListDataElement>();
for (Waypoint waypoint : courseData.getWaypoints()) {
ControlPoint controlPoint = waypoint.getControlPoint();
if (controlPoint instanceof Mark) {
CourseListDataElement element = new CourseListDataElement();
element.setLeftMark((Mark) controlPoint);
element.setPassingInstructions(waypoint.getPassingInstructions());
elementList.add(element);
} else if (controlPoint instanceof ControlPointWithTwoMarks) {
ControlPointWithTwoMarks controlPointTwoMarks = (ControlPointWithTwoMarks) controlPoint;
CourseListDataElement element = new CourseListDataElement();
element.setLeftMark(controlPointTwoMarks.getLeft());
element.setRightMark(controlPointTwoMarks.getRight());
element.setPassingInstructions(waypoint.getPassingInstructions());
elementList.add(element);
}
}
return elementList;
}
protected void sendCourseDataAndDismiss(CourseBase courseDesign) {
getRaceState().setCourseDesign(MillisecondsTimePoint.now(), courseDesign);
saveChangedCourseDesignInCache(courseDesign);
dismiss();
}
private void saveChangedCourseDesignInCache(CourseBase courseDesign) {
if (!Util.isEmpty(courseDesign.getWaypoints())) {
InMemoryDataStore.INSTANCE.setLastPublishedCourseDesign(courseDesign);
}
}
protected CourseBase convertCourseElementsToACourseData() throws IllegalStateException, IllegalArgumentException {
// TODO find a proper name for the highly flexible ESS courses to be shown on the regatta overview page
CourseBase design = new CourseDataImpl("Course");
List<Waypoint> waypoints = new ArrayList<Waypoint>();
for (CourseListDataElement courseElement : courseElements) {
if ((courseElement.getPassingInstructions().equals(PassingInstruction.Gate)
|| courseElement.getPassingInstructions().equals(PassingInstruction.Line) || courseElement
.getPassingInstructions().equals(PassingInstruction.Offset))) {
if (courseElement.getRightMark() != null) {
String cpwtmName = "ControlPointWithTwoMarks " + courseElement.getLeftMark().getName() + " / "
+ courseElement.getRightMark().getName();
ControlPointWithTwoMarks cpwtm = new ControlPointWithTwoMarksImpl(courseElement.getLeftMark(),
courseElement.getRightMark(), cpwtmName);
Waypoint waypoint = new WaypointImpl(cpwtm, courseElement.getPassingInstructions());
waypoints.add(waypoint);
} else {
throw new IllegalStateException("Missing second mark");
}
} else if (courseElement.getPassingInstructions().equals(PassingInstruction.None)) {
throw new IllegalStateException("Each waypoints needs passing instructions");
} else {
Waypoint waypoint = new WaypointImpl(courseElement.getLeftMark(),
courseElement.getPassingInstructions());
waypoints.add(waypoint);
}
}
if (waypoints.isEmpty()) {
throw new IllegalArgumentException("The course design to be published has no waypoints.");
}
int i = 0;
for (Waypoint waypoint : waypoints) {
design.addWaypoint(i++, waypoint);
}
return design;
}
private void createUsePreviousCourseDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getString(R.string.use_previous_course_dialog_title));
builder.setMessage(getString(R.string.use_previous_course_dialog_message));
builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
copyPreviousToNewCourseDesign();
}
});
builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
});
builder.create();
builder.show();
}
protected void copyPreviousToNewCourseDesign() {
courseElements.clear();
courseElements.addAll(previousCourseElements);
courseElementAdapter.notifyDataSetChanged();
}
protected void onMarkClickedOnGrid(Mark mark) {
if (courseElements.isEmpty()) {
addNewCourseElementToList(mark);
} else {
CourseListDataElement twoMarksCourseElement = getFirstTwoMarksCourseElementWithoutRightMark();
if (twoMarksCourseElement != null) {
twoMarksCourseElement.setRightMark(mark);
courseElementAdapter.notifyDataSetChanged();
} else {
addNewCourseElementToList(mark);
}
}
}
private CourseListDataElement getFirstTwoMarksCourseElementWithoutRightMark() {
for (CourseListDataElement courseElement : courseElements) {
if ((courseElement.getPassingInstructions().equals(PassingInstruction.Gate)
|| courseElement.getPassingInstructions().equals(PassingInstruction.Line) || courseElement
.getPassingInstructions().equals(PassingInstruction.Offset))
&& courseElement.getRightMark() == null) {
return courseElement;
}
}
return null;
}
private void addNewCourseElementToList(Mark mark) {
CourseListDataElement courseElement = new CourseListDataElement();
courseElement.setLeftMark(mark);
createPassingInstructionDialog(courseElement);
}
private void createPassingInstructionDialog(final CourseListDataElement courseElement) {
List<String> instructions = new ArrayList<String>();
for (PassingInstruction instruction : PassingInstruction.relevantValues()) {
instructions.add(instruction.name());
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setTitle(R.string.pick_a_rounding_direction).setItems(R.array.rounding_directions,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int position) {
PassingInstruction pickedDirection = PassingInstruction.relevantValues()[position];
onPassingInstructionPicked(courseElement, pickedDirection);
}
});
builder.create().show();
}
protected void onPassingInstructionPicked(CourseListDataElement courseElement, PassingInstruction pickedDirection) {
courseElement.setPassingInstructions(pickedDirection);
if (!courseElements.contains(courseElement)) {
courseElements.add(courseElement);
}
courseElementAdapter.notifyDataSetChanged();
}
}
@@ -7,7 +7,7 @@ import android.widget.Button;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.ESSRacingProcedure;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.PositioningFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PositioningFragment;
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
import com.sap.sse.common.TimePoint;
@@ -23,7 +23,7 @@ public class ESSFinishedRaceFragment extends BaseFinishedRaceFragment<ESSRacingP
public void onClick(View v) {
PositioningFragment fragment = new PositioningFragment();
fragment.setArguments(PositioningFragment.createArguments(getRace()));
fragment.show(getFragmentManager(), null);
// fragment.show(getFragmentManager(), null);
}
});
}
@@ -7,7 +7,7 @@ import android.widget.Button;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.league.LeagueRacingProcedure;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.PositioningFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PositioningFragment;
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
import com.sap.sse.common.TimePoint;
@@ -23,7 +23,7 @@ public class LeagueFinishedRaceFragment extends BaseFinishedRaceFragment<LeagueR
public void onClick(View v) {
PositioningFragment fragment = new PositioningFragment();
fragment.setArguments(PositioningFragment.createArguments(getRace()));
fragment.show(getFragmentManager(), null);
// fragment.show(getFragmentManager(), null);
}
});
}
@@ -4,7 +4,7 @@ import android.os.Bundle;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.ESSRacingProcedure;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.PositioningFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PositioningFragment;
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -6,7 +6,6 @@ import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ByMapCourseDesignDialog;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ByNameCourseDesignDialog;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ESSCourseDesignDialog;
public class CourseDesignerChooser {
@@ -17,8 +16,6 @@ public class CourseDesignerChooser {
switch (mode) {
case BY_MAP:
return new ByMapCourseDesignDialog();
case BY_MARKS:
return new ESSCourseDesignDialog();
case BY_NAME:
default:
return new ByNameCourseDesignDialog();