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 index ccccbd2b121..111a38f9063 100755 --- 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 @@ -49,303 +49,244 @@ 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 final static String TAG = + // ESSCourseDesignDialogFragment.class.getName(); - private static int MarksLoaderId = 0; + 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 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 DragSortController dragSortController; - private Button publishButton; - private Button unpublishButton; - private Button takePreviousButton; + private Button publishButton; + private Button unpublishButton; + private Button takePreviousButton; - private ReadonlyDataManager dataManager; + 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; + 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 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)); + @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() { - dataManager = DataManager.create(getActivity()); + 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); + } + } + }); - aMarkList = new ArrayList(); - courseElements = new ArrayList(); - previousCourseElements = new ArrayList(); + newCourseListView.setRemoveListener(new DragSortListView.RemoveListener() { + @Override + public void remove(int toBeRemoved) { + CourseListDataElement item = courseElementAdapter.getItem(toBeRemoved); + courseElementAdapter.remove(item); + } + }); - gridAdapter = new MarkGridAdapter(getActivity(), aMarkList, - ESSMarkImageHelper.getInstance()); - courseElementAdapter = new DraggableCourseElementListAdapter( - getActivity(), courseElements, ESSMarkImageHelper.getInstance()); - previousCourseElementAdapter = new CourseElementListAdapter( - getActivity(), previousCourseElements, - ESSMarkImageHelper.getInstance()); + 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; + } + }); - loadMarks(); - fillPreviousCourseElementsWithLastPublishedCourseDesign(); + dragSortController = buildDragSortController(newCourseListView); + newCourseListView.setFloatViewManager(dragSortController); + newCourseListView.setOnTouchListener(dragSortController); + newCourseListView.setDragEnabled(dragEnabled); - GridView gridView = (GridView) getView().findViewById( - R.id.gridViewAssets); - gridView.setAdapter(gridAdapter); + if (getRace().getCourseDesign() != null) { + fillCourseElementsInList(); + } - gridView.setOnItemClickListener(new OnItemClickListener() { + previousCourseListView = (ListView) getView().findViewById(R.id.listViewPreviousCourse); + previousCourseListView.setAdapter(previousCourseElementAdapter); - 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); - } + 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(); + } + } + }); - newCourseListView = (DragSortListView) getView().findViewById( - R.id.listViewNewCourse); - newCourseListView.setAdapter(courseElementAdapter); - newCourseListView.setDropListener(new DragSortListView.DropListener() { + 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(); + } + } + }); - @Override - public void drop(int from, int to) { - if (from != to) { - CourseListDataElement item = courseElementAdapter - .getItem(from); - courseElementAdapter.remove(item); - courseElementAdapter.insert(item, to); - } - } - }); + 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); + } + }); + } - newCourseListView - .setRemoveListener(new DragSortListView.RemoveListener() { + /** + * 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; + } - @Override - public void remove(int toBeRemoved) { - CourseListDataElement item = courseElementAdapter - .getItem(toBeRemoved); - courseElementAdapter.remove(item); - } - }); + private void fillPreviousCourseElementsWithLastPublishedCourseDesign() { + CourseBase lastPublishedCourseDesign = InMemoryDataStore.INSTANCE.getLastPublishedCourseDesign(); + if (lastPublishedCourseDesign != null) { + fillPreviousCourseElementsInList(lastPublishedCourseDesign); + } + } - newCourseListView - .setOnItemLongClickListener(new OnItemLongClickListener() { + 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 boolean onItemLongClick(AdapterView arg0, - View arg1, int position, long arg3) { - CourseListDataElement courseElement = courseElementAdapter - .getItem(position); - createPassingInstructionDialog(courseElement); - return true; - } - }); + @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(); + } - dragSortController = buildDragSortController(newCourseListView); - newCourseListView.setFloatViewManager(dragSortController); - newCourseListView.setOnTouchListener(dragSortController); - newCourseListView.setDragEnabled(dragEnabled); + protected void onLoadMarksSucceeded(Collection data) { + aMarkList.clear(); + aMarkList.addAll(data); + Collections.sort(aMarkList, new NaturalNamedComparator()); + gridAdapter.notifyDataSetChanged(); + } - if (getRace().getCourseDesign() != null) { - fillCourseElementsInList(); - } + private void fillPreviousCourseElementsInList(CourseBase previousCourseData) { + if (previousCourseData != null) { + previousCourseElements.clear(); + previousCourseElements.addAll(convertCourseDesignToCourseElements(previousCourseData)); + previousCourseElementAdapter.notifyDataSetChanged(); + } + } - previousCourseListView = (ListView) getView().findViewById( - R.id.listViewPreviousCourse); - previousCourseListView.setAdapter(previousCourseElementAdapter); + private void fillCourseElementsInList() { + courseElements.clear(); + courseElements.addAll(convertCourseDesignToCourseElements(getRace().getCourseDesign())); + courseElementAdapter.notifyDataSetChanged(); + } - takePreviousButton = (Button) getView().findViewById(R.id.takePreviousCourseDesignButton); - takePreviousButton.setOnClickListener(new OnClickListener() { + 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; + } - 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) { - + protected void sendCourseDataAndDismiss(CourseBase courseDesign) { getRaceState().setCourseDesign(MillisecondsTimePoint.now(), courseDesign); - saveChangedCourseDesignInCache(courseDesign); - dismiss(); - } + saveChangedCourseDesignInCache(courseDesign); + dismiss(); + } private void saveChangedCourseDesignInCache(CourseBase courseDesign) { if (!Util.isEmpty(courseDesign.getWaypoints())) { @@ -357,7 +298,6 @@ public class ESSCourseDesignDialog extends RaceDialogFragment { // 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 @@ -368,7 +308,7 @@ public class ESSCourseDesignDialog extends RaceDialogFragment { 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"); @@ -378,7 +318,7 @@ public class ESSCourseDesignDialog extends RaceDialogFragment { } else { Waypoint waypoint = new WaypointImpl(courseElement.getLeftMark(), courseElement.getPassingInstructions()); - + waypoints.add(waypoint); } @@ -400,7 +340,6 @@ public class ESSCourseDesignDialog extends RaceDialogFragment { 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(); @@ -471,7 +410,6 @@ public class ESSCourseDesignDialog extends RaceDialogFragment { builder.create().show(); } - protected void onPassingInstructionPicked(CourseListDataElement courseElement, PassingInstruction pickedDirection) { courseElement.setPassingInstructions(pickedDirection); if (!courseElements.contains(courseElement)) {