diff --git a/mobile/com.sap.sailing.racecommittee.app/.classpath b/mobile/com.sap.sailing.racecommittee.app/.classpath index 3eac97d3577..886ac925c10 100644 --- a/mobile/com.sap.sailing.racecommittee.app/.classpath +++ b/mobile/com.sap.sailing.racecommittee.app/.classpath @@ -1,14 +1,13 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/mobile/com.sap.sailing.racecommittee.app/libs/drag-sort-listview-0.6.1-SNAPSHOT.jar b/mobile/com.sap.sailing.racecommittee.app/libs/drag-sort-listview-0.6.1-SNAPSHOT.jar deleted file mode 100644 index 0997b97c38a..00000000000 Binary files a/mobile/com.sap.sailing.racecommittee.app/libs/drag-sort-listview-0.6.1-SNAPSHOT.jar and /dev/null differ diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/PositioningFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/PositioningFragment.java deleted file mode 100644 index c794bf8c4d4..00000000000 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/PositioningFragment.java +++ /dev/null @@ -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 competitors; - protected CompetitorResults positionedCompetitors; - protected Comparator 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(); - 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 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 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>() { - - @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 data, boolean isCached) { - if (!isCached) { - getActivity().setProgressBarIndeterminateVisibility(false); - } - onLoadCompetitorsSucceeded(data); - } - - })); - // Force load to get non-cached remote competitors... - competitorLoaders.forceLoad(); - } - - protected void onLoadCompetitorsSucceeded(Collection data) { - competitors.clear(); - competitors.addAll(data); - Collections.sort(competitors, competitorComparator); - deleteObsoleteCompetitorsFromPositionedList(data); - deletePositionedCompetitorsFromUnpositionedList(); - competitorsAdapter.notifyDataSetChanged(); - } - - private void deleteObsoleteCompetitorsFromPositionedList(Collection validCompetitors) { - List> toBeDeleted = new ArrayList>(); - for (com.sap.sse.common.Util.Triple 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 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 item) { - positioningAdapter.remove(item); - positioningAdapter.insert(item, to); - } - - private void createMaxPointsReasonSelectionDialog(final com.sap.sse.common.Util.Triple 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 result = new ArrayList(); - 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 item, - CharSequence maxPointsReasonName) { - MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString()); - com.sap.sse.common.Util.Triple newItem = new com.sap.sse.common.Util.Triple( - 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 item, com.sap.sse.common.Util.Triple newItem) { - positioningAdapter.remove(item); - positioningAdapter.insert(newItem, currentIndexOfItem); - } - - private void setCompetitorToBottomOfPositioningList(com.sap.sse.common.Util.Triple 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(competitor.getId(), competitor - .getName(), MaxPointsReason.NONE)); - positioningAdapter.notifyDataSetChanged(); - } - - protected void onCompetitorRemovedFromPositioningList(com.sap.sse.common.Util.Triple 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 item) { - positionedCompetitors.remove(item); - positioningAdapter.notifyDataSetChanged(); - } - - private CompetitorStore getCompetitorStore() { - return DataManager.create(getActivity()).getDataStore().getDomainFactory().getCompetitorStore(); - } - -} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/coursedesign/ESSCourseDesignDialog.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/coursedesign/ESSCourseDesignDialog.java deleted file mode 100755 index 7bd611466ff..00000000000 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/coursedesign/ESSCourseDesignDialog.java +++ /dev/null @@ -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 aMarkList; - private MarkGridAdapter gridAdapter; - private List courseElements; - private List 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(); - courseElements = new ArrayList(); - previousCourseElements = new ArrayList(); - 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>() { - @Override - public void onLoadFailed(Exception reason) { - Toast.makeText(getActivity(), String.format("Marks: %s", reason.toString()), Toast.LENGTH_LONG) - .show(); - } - - @Override - public void onLoadSucceeded(Collection 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 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 convertCourseDesignToCourseElements(CourseBase courseData) { - List elementList = new ArrayList(); - 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 waypoints = new ArrayList(); - 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 instructions = new ArrayList(); - 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(); - } - -} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/finished/ESSFinishedRaceFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/finished/ESSFinishedRaceFragment.java index 89ceda65798..ad1275feede 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/finished/ESSFinishedRaceFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/finished/ESSFinishedRaceFragment.java @@ -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