mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
# extracted positioning into own fragment
This commit is contained in:
1 parent
7ae0f1bb3f
commit
cbf97b4120
4 files changed
+309
-202
No files matched your search
@@ -40,7 +40,7 @@
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/InnerRelativeLayout"
|
||||
android:id="@+id/innerFragmentHolder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="0.618"
|
||||
@@ -49,6 +49,7 @@
|
||||
|
||||
<!-- DISPLAY SECTION -->
|
||||
|
||||
<!--
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -108,7 +109,7 @@
|
||||
android:verticalSpacing="5dp"
|
||||
android:layout_gravity="left"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</LinearLayout> -->
|
||||
|
||||
<!-- END DISPLAY SECTION -->
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:dslv="http://schemas.android.com/apk**/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textPositioningHeaderLeft"
|
||||
android:layout_width="350dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="30dp"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:text="@string/positionings"
|
||||
android:textSize="12pt"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textPositioningHeaderRight"
|
||||
android:layout_width="250dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:text="@string/availableFinishingCompetitors"
|
||||
android:textSize="12pt"
|
||||
android:textStyle="bold" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<com.mobeta.android.dslv.DragSortListView
|
||||
android:id="@+id/dragSortListPositioning"
|
||||
android:layout_width="350dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="left"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="30dp"
|
||||
android:verticalSpacing="5dp"
|
||||
dslv:collapsed_height="2dp"
|
||||
dslv:drag_enabled="true"
|
||||
dslv:drag_scroll_start="0.33"
|
||||
dslv:float_alpha="0.6"
|
||||
dslv:max_drag_scroll_speed="0.5"
|
||||
dslv:slide_shuffle_speed="0.3"
|
||||
dslv:track_drag_sort="false"
|
||||
dslv:use_default_controller="false" />
|
||||
|
||||
<ListView
|
||||
android:id="@+id/gridViewPositioning"
|
||||
android:layout_width="250dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="left"
|
||||
android:verticalSpacing="5dp" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
+3
-200
@@ -1,9 +1,6 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.FragmentManager;
|
||||
import android.content.DialogInterface;
|
||||
@@ -12,26 +9,14 @@ 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.ImageButton;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.mobeta.android.dslv.DragSortController;
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
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.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.AbortModeSelectionDialog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
|
||||
@@ -43,22 +28,6 @@ public class FinishingRaceFragment extends RaceFragment {
|
||||
private ImageButton abortingFlagButton;
|
||||
private ImageButton blueFlagButton;
|
||||
|
||||
private DragSortListView positioningListView;
|
||||
private ListView competitorListView;
|
||||
private DragSortController dragSortController;
|
||||
|
||||
private CompetitorsAdapter competitorsAdapter;
|
||||
private CompetitorPositioningListAdapter positioningAdapter;
|
||||
|
||||
protected List<Competitor> competitors;
|
||||
protected List<Pair<Competitor, MaxPointsReason>> positionedCompetitors;
|
||||
|
||||
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_finishing_view, container, false);
|
||||
@@ -74,54 +43,10 @@ public class FinishingRaceFragment extends RaceFragment {
|
||||
blueFlagButton = (ImageButton) getView().findViewById(R.id.blueFlagButton);
|
||||
abortingFlagButton = (ImageButton) getView().findViewById(R.id.abortingFlagButton);
|
||||
|
||||
competitors = new ArrayList<Competitor>();
|
||||
Util.addAll(getRace().getCompetitors(), competitors);
|
||||
competitorsAdapter = new CompetitorsAdapter(getActivity(), R.layout.welter_grid_competitor_cell, competitors);
|
||||
PositioningFragment positioningFragment = new PositioningFragment();
|
||||
positioningFragment.setArguments(PositioningFragment.createArguments(getRace()));
|
||||
getFragmentManager().beginTransaction().add(R.id.innerFragmentHolder, positioningFragment, null).commit();
|
||||
|
||||
positionedCompetitors = initializeFinishPositioningList();
|
||||
deletePositionedCompetitorsFromUnpositionedList();
|
||||
positioningAdapter = new CompetitorPositioningListAdapter(getActivity(), R.layout.welter_positioning_item, positionedCompetitors);
|
||||
|
||||
positioningListView = (DragSortListView) getView().findViewById(R.id.listViewPositioningList);
|
||||
positioningListView.setAdapter(positioningAdapter);
|
||||
positioningListView.setDropListener(new DragSortListView.DropListener() {
|
||||
|
||||
@Override
|
||||
public void drop(int from, int to) {
|
||||
if (from != to) {
|
||||
Pair<Competitor, MaxPointsReason> item = positioningAdapter.getItem(from);
|
||||
setItemToNewPositioning(from, to, item);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
positioningListView.setRemoveListener(new DragSortListView.RemoveListener() {
|
||||
|
||||
@Override
|
||||
public void remove(int toBeRemoved) {
|
||||
Pair<Competitor, 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.gridViewCompetitors);
|
||||
competitorListView.setAdapter(competitorsAdapter);
|
||||
|
||||
blueFlagButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
showRemoveBlueFlagDialog();
|
||||
@@ -135,131 +60,9 @@ public class FinishingRaceFragment extends RaceFragment {
|
||||
ExLog.i(ExLog.FLAG_NOVEMBER, getRace().getId().toString(), getActivity());
|
||||
}
|
||||
});
|
||||
|
||||
competitorListView.setOnItemClickListener(new OnItemClickListener() {
|
||||
|
||||
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
|
||||
Competitor competitor = (Competitor) competitorsAdapter.getItem(position);
|
||||
ExLog.i("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 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());
|
||||
Pair<Competitor, MaxPointsReason> newItem = new Pair<Competitor, MaxPointsReason>(item.getA(), maxPointsReason);
|
||||
int currentIndexOfItem = positionedCompetitors.indexOf(item);
|
||||
replaceItemInPositioningList(currentIndexOfItem, item, newItem);
|
||||
|
||||
if (!maxPointsReason.equals(MaxPointsReason.NONE)) {
|
||||
setCompetitorToBottomOfPositioningList(newItem);
|
||||
}
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
private void replaceItemInPositioningList(int currentIndexOfItem, Pair<Competitor, MaxPointsReason> item, Pair<Competitor, MaxPointsReason> newItem) {
|
||||
positioningAdapter.remove(item);
|
||||
positioningAdapter.insert(newItem, currentIndexOfItem);
|
||||
}
|
||||
|
||||
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);
|
||||
removeCompetitorFromGrid(competitor);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
protected void removeCompetitorFromGrid(Competitor competitor) {
|
||||
competitors.remove(competitor);
|
||||
competitorsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void addNewCompetitorToPositioningList(Competitor competitor) {
|
||||
|
||||
positionedCompetitors.add(new Pair<Competitor, MaxPointsReason>(competitor, MaxPointsReason.NONE));
|
||||
positioningAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
protected void onCompetitorRemovedFromPositioningList(Pair<Competitor, MaxPointsReason> item) {
|
||||
addNewCompetitorToCompetitorList(item.getA());
|
||||
removeCompetitorFromPositionings(item);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
private void addNewCompetitorToCompetitorList(Competitor competitor) {
|
||||
competitors.add(competitor);
|
||||
competitorsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
protected void removeCompetitorFromPositionings(Pair<Competitor, MaxPointsReason> item) {
|
||||
positionedCompetitors.remove(item);
|
||||
positioningAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
protected void setCountdownLabels(long millisecondsSinceStart) {
|
||||
setStarttimeCountupLabel(millisecondsSinceStart);
|
||||
}
|
||||
|
||||
+235
@@ -0,0 +1,235 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.AdapterView.OnItemLongClickListener;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.mobeta.android.dslv.DragSortController;
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
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.fragments.RaceFragment;
|
||||
|
||||
public class PositioningFragment extends RaceFragment {
|
||||
|
||||
|
||||
private DragSortListView positioningListView;
|
||||
private ListView competitorListView;
|
||||
private DragSortController dragSortController;
|
||||
|
||||
private CompetitorsAdapter competitorsAdapter;
|
||||
private CompetitorPositioningListAdapter positioningAdapter;
|
||||
|
||||
protected List<Competitor> competitors;
|
||||
protected List<Pair<Competitor, MaxPointsReason>> positionedCompetitors;
|
||||
|
||||
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_positioning_view, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
competitors = new ArrayList<Competitor>();
|
||||
Util.addAll(getRace().getCompetitors(), competitors);
|
||||
competitorsAdapter = new CompetitorsAdapter(getActivity(), R.layout.welter_grid_competitor_cell, competitors);
|
||||
|
||||
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) {
|
||||
Pair<Competitor, MaxPointsReason> item = positioningAdapter.getItem(from);
|
||||
setItemToNewPositioning(from, to, item);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
positioningListView.setRemoveListener(new DragSortListView.RemoveListener() {
|
||||
|
||||
@Override
|
||||
public void remove(int toBeRemoved) {
|
||||
Pair<Competitor, 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("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 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());
|
||||
Pair<Competitor, MaxPointsReason> newItem = new Pair<Competitor, MaxPointsReason>(item.getA(), maxPointsReason);
|
||||
int currentIndexOfItem = positionedCompetitors.indexOf(item);
|
||||
replaceItemInPositioningList(currentIndexOfItem, item, newItem);
|
||||
|
||||
if (!maxPointsReason.equals(MaxPointsReason.NONE)) {
|
||||
setCompetitorToBottomOfPositioningList(newItem);
|
||||
}
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
private void replaceItemInPositioningList(int currentIndexOfItem, Pair<Competitor, MaxPointsReason> item, Pair<Competitor, MaxPointsReason> newItem) {
|
||||
positioningAdapter.remove(item);
|
||||
positioningAdapter.insert(newItem, currentIndexOfItem);
|
||||
}
|
||||
|
||||
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);
|
||||
removeCompetitorFromGrid(competitor);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
protected void removeCompetitorFromGrid(Competitor competitor) {
|
||||
competitors.remove(competitor);
|
||||
competitorsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void addNewCompetitorToPositioningList(Competitor competitor) {
|
||||
|
||||
positionedCompetitors.add(new Pair<Competitor, MaxPointsReason>(competitor, MaxPointsReason.NONE));
|
||||
positioningAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
protected void onCompetitorRemovedFromPositioningList(Pair<Competitor, MaxPointsReason> item) {
|
||||
addNewCompetitorToCompetitorList(item.getA());
|
||||
removeCompetitorFromPositionings(item);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
private void addNewCompetitorToCompetitorList(Competitor competitor) {
|
||||
competitors.add(competitor);
|
||||
competitorsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
protected void removeCompetitorFromPositionings(Pair<Competitor, MaxPointsReason> item) {
|
||||
positionedCompetitors.remove(item);
|
||||
positioningAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void notifyTick() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user