mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
When a positioning list event exists, this list is read and displayed
when the finishing fragment is created. the changed event is also created when a maxpointsreason is set by the race officer
This commit is contained in:
1 parent
ca811614e2
commit
aa0c113d3c
4 files changed
+78
-18
No files matched your search
+1
-1
@@ -66,7 +66,7 @@ public interface RaceState {
|
||||
*
|
||||
* @return the positioning list for the finish or <code>null</code>.
|
||||
*/
|
||||
List<Competitor> getFinishPositioningList();
|
||||
List<Pair<Competitor, MaxPointsReason>> getFinishPositioningList();
|
||||
|
||||
/**
|
||||
* Sets the current race's start time
|
||||
|
||||
+1
-1
@@ -176,7 +176,7 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Competitor> getFinishPositioningList() {
|
||||
public List<Pair<Competitor, MaxPointsReason>> getFinishPositioningList() {
|
||||
return finishPositioningListFinder.getFinishPositioningList();
|
||||
}
|
||||
|
||||
|
||||
+69
-11
@@ -10,10 +10,10 @@ import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.View.OnLongClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.AdapterView.OnItemLongClickListener;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
@@ -75,7 +75,8 @@ public class FinishingRaceFragment extends RaceFragment implements TickListener
|
||||
Util.addAll(getRace().getCompetitors(), competitors);
|
||||
competitorsAdapter = new CompetitorsAdapter(getActivity(), R.layout.welter_grid_competitor_cell, competitors);
|
||||
|
||||
positionedCompetitors = new ArrayList<Pair<Competitor, MaxPointsReason>>();
|
||||
positionedCompetitors = initializeFinishPositioningList();
|
||||
deletePositionedCompetitorsFromUnpositionedList();
|
||||
positioningAdapter = new CompetitorPositioningListAdapter(getActivity(), R.layout.welter_positioning_item, positionedCompetitors);
|
||||
|
||||
positioningListView = (DragSortListView) getView().findViewById(R.id.listViewPositioningList);
|
||||
@@ -86,8 +87,7 @@ public class FinishingRaceFragment extends RaceFragment implements TickListener
|
||||
public void drop(int from, int to) {
|
||||
if (from != to) {
|
||||
Pair<Competitor, MaxPointsReason> item = positioningAdapter.getItem(from);
|
||||
positioningAdapter.remove(item);
|
||||
positioningAdapter.insert(item, to);
|
||||
setItemToNewPositioning(from, to, item);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
}
|
||||
@@ -101,14 +101,14 @@ public class FinishingRaceFragment extends RaceFragment implements TickListener
|
||||
onCompetitorRemovedFromPositioningList(item);
|
||||
}
|
||||
});
|
||||
|
||||
positioningListView.setOnLongClickListener(new OnLongClickListener() {
|
||||
|
||||
positioningListView.setOnItemLongClickListener(new OnItemLongClickListener() {
|
||||
|
||||
@Override
|
||||
public boolean onLongClick(View arg0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
|
||||
createMaxPointsReasonSelectionDialog(positionedCompetitors.get(position));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
dragSortController = buildDragSortController(positioningListView);
|
||||
@@ -143,7 +143,7 @@ public class FinishingRaceFragment extends RaceFragment implements TickListener
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
@@ -171,6 +171,64 @@ public class FinishingRaceFragment extends RaceFragment implements TickListener
|
||||
controller.setBackgroundColor(getActivity().getResources().getColor(R.color.welter_medium_blue));
|
||||
return controller;
|
||||
}
|
||||
|
||||
private void deletePositionedCompetitorsFromUnpositionedList() {
|
||||
for (Pair<Competitor, MaxPointsReason> positionedItem : positionedCompetitors) {
|
||||
competitors.remove(positionedItem.getA());
|
||||
}
|
||||
}
|
||||
|
||||
private List<Pair<Competitor, MaxPointsReason>> initializeFinishPositioningList() {
|
||||
List<Pair<Competitor, MaxPointsReason>> positionings;
|
||||
if (getRace().getState().getFinishPositioningList() != null) {
|
||||
positionings = getRace().getState().getFinishPositioningList();
|
||||
} else {
|
||||
positionings = new ArrayList<Util.Pair<Competitor,MaxPointsReason>>();
|
||||
}
|
||||
return positionings;
|
||||
}
|
||||
|
||||
private void setItemToNewPositioning(int from, int to, Pair<Competitor, MaxPointsReason> item) {
|
||||
positioningAdapter.remove(item);
|
||||
positioningAdapter.insert(item, to);
|
||||
}
|
||||
|
||||
private void createMaxPointsReasonSelectionDialog(final Pair<Competitor, MaxPointsReason> item) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
final CharSequence[] maxPointsReasons = getAllMaxPointsReasons();
|
||||
builder.setTitle(R.string.change_course_element)
|
||||
.setItems(maxPointsReasons, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int position) {
|
||||
setMaxPointsReasonForItem(item, maxPointsReasons[position]);
|
||||
}
|
||||
});
|
||||
builder.create();
|
||||
builder.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(Pair<Competitor, MaxPointsReason> item, CharSequence maxPointsReasonName) {
|
||||
MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString());
|
||||
item = new Pair<Competitor, MaxPointsReason>(item.getA(), maxPointsReason);
|
||||
|
||||
if (!maxPointsReason.equals(MaxPointsReason.NONE)) {
|
||||
setCompetitorToBottomOfPositioningList(item);
|
||||
}
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
private void setCompetitorToBottomOfPositioningList(Pair<Competitor, MaxPointsReason> item) {
|
||||
int currentIndex = positionedCompetitors.indexOf(item);
|
||||
int lastIndex = positionedCompetitors.size() - 1;
|
||||
setItemToNewPositioning(currentIndex, lastIndex, item);
|
||||
}
|
||||
|
||||
protected void onCompetitorClickedOnGrid(Competitor competitor) {
|
||||
addNewCompetitorToPositioningList(competitor);
|
||||
|
||||
Reference in new issue
Block a user