mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 21:30:57 +00:00
Merge branch 'racecommittee_app' of ssh://sapsailing.com/home/trac/git into racecommittee_app
This commit is contained in:
commit
7109b8d7ea
6 files changed
+184
-164
No files matched your search
+1
-1
@@ -57,7 +57,7 @@ public interface StartProcedure {
|
||||
|
||||
void handleStartProcedureSpecificEvent(TimePoint eventTime, Integer eventId);
|
||||
|
||||
List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener);
|
||||
Class<? extends RaceDialogFragment> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener);
|
||||
|
||||
Class<? extends RaceDialogFragment> getCourseDesignDialog();
|
||||
|
||||
|
||||
+2
-2
@@ -401,8 +401,8 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
|
||||
return new ArrayList<Class<? extends RaceDialogFragment>>();
|
||||
public Class<? extends RaceDialogFragment> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+94
-77
@@ -32,36 +32,37 @@ import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.GateStartRunningR
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.startphase.GateStartPhaseFragment;
|
||||
|
||||
public class GateStartProcedure implements StartProcedure {
|
||||
|
||||
|
||||
private final static long startPhaseClassOverGolfUpIntervall = 8 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
private final static long startPhasePapaUpInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
private final static long startPhasePapaDownInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
private final static long startPhaseClassOverGolfDownInterval = 0 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
public final static long startPhaseGolfDownStandardInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
public final static long startPhaseGolfDownStandardIntervalConstantSummand = 3 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
|
||||
public final static long startPhaseGolfDownStandardIntervalConstantSummand = 3 * 60 * 1000; // minutes * seconds *
|
||||
// milliseconds
|
||||
|
||||
// list of start procedure specific event id's
|
||||
private static final Integer GOLF_REMOVAL_EVENT_ID = 1;
|
||||
|
||||
|
||||
private List<Long> startProcedureEventIntervals;
|
||||
private RaceLog raceLog;
|
||||
private StartProcedureListener raceStateChangedListener;
|
||||
private GateStartPhaseEventListener startPhaseEventListener;
|
||||
private GateStartRunningRaceEventListener runningRaceEventListener;
|
||||
private UserRequiredActionPerformedListener userRequiredActionPerformedListener;
|
||||
|
||||
private String pathFinder = null;
|
||||
|
||||
private String pathFinder = null;
|
||||
private Long gateLineOpeningTime = startPhaseGolfDownStandardInterval;
|
||||
private boolean isPathFinderSet = false;
|
||||
private boolean isGateLineOpeningTimeChosen = false;
|
||||
|
||||
|
||||
public GateStartProcedure(RaceLog raceLog) {
|
||||
this.raceLog = raceLog;
|
||||
startProcedureEventIntervals = new ArrayList<Long>();
|
||||
raceStateChangedListener = null;
|
||||
startPhaseEventListener = null;
|
||||
runningRaceEventListener = null;
|
||||
|
||||
|
||||
startProcedureEventIntervals.add(startPhaseClassOverGolfUpIntervall);
|
||||
startProcedureEventIntervals.add(startPhasePapaUpInterval);
|
||||
startProcedureEventIntervals.add(startPhasePapaDownInterval);
|
||||
@@ -76,7 +77,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
@Override
|
||||
public List<TimePoint> getAutomaticEventFireTimePoints(TimePoint startTime) {
|
||||
List<TimePoint> triggerTimePoints = new ArrayList<TimePoint>();
|
||||
|
||||
|
||||
for (Long interval : startProcedureEventIntervals) {
|
||||
triggerTimePoints.add(startTime.minus(interval));
|
||||
}
|
||||
@@ -86,7 +87,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
@Override
|
||||
public void dispatchFiredEventTimePoint(TimePoint startTime, TimePoint eventTime) {
|
||||
long interval = startTime.asMillis() - eventTime.asMillis();
|
||||
|
||||
|
||||
if (interval == startPhaseClassOverGolfUpIntervall) {
|
||||
handleClassOverGolfUp(eventTime);
|
||||
} else if (interval == startPhasePapaUpInterval) {
|
||||
@@ -100,25 +101,27 @@ public class GateStartProcedure implements StartProcedure {
|
||||
|
||||
private void handleClassOverGolfUp(TimePoint eventTime) {
|
||||
TimePoint startPhaseTimePoint = eventTime;
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceStartphaseEntered(startPhaseTimePoint);
|
||||
}
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(startPhaseTimePoint, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.CLASS, Flags.GOLF, /*isDisplayed*/true);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(startPhaseTimePoint, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.CLASS, Flags.GOLF, /* isDisplayed */
|
||||
true);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (startPhaseEventListener != null) {
|
||||
startPhaseEventListener.onClassOverGolfUp();
|
||||
}
|
||||
}
|
||||
|
||||
private void handlePapaUp(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.PAPA, Flags.NONE, /*isDisplayed*/true);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.PAPA, Flags.NONE, /* isDisplayed */
|
||||
true);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (startPhaseEventListener != null) {
|
||||
startPhaseEventListener.onPapaUp();
|
||||
}
|
||||
@@ -126,11 +129,12 @@ public class GateStartProcedure implements StartProcedure {
|
||||
|
||||
private void handlePapaDown(TimePoint eventTime) {
|
||||
TimePoint papaDownTimepoint = eventTime;
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(papaDownTimepoint, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.PAPA, Flags.NONE, /*isDisplayed*/false);
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(papaDownTimepoint, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.PAPA, Flags.NONE, /* isDisplayed */
|
||||
false);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (startPhaseEventListener != null) {
|
||||
startPhaseEventListener.onPapaDown();
|
||||
}
|
||||
@@ -138,32 +142,28 @@ public class GateStartProcedure implements StartProcedure {
|
||||
|
||||
private void handleClassOverGolfDown(TimePoint eventTime) {
|
||||
TimePoint essOneDownTimePoint = eventTime;
|
||||
|
||||
RaceLogEvent essOneDownEvent = RaceLogEventFactory.INSTANCE.createFlagEvent(essOneDownTimePoint, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.CLASS, Flags.GOLF, /*isDisplayed*/false);
|
||||
|
||||
RaceLogEvent essOneDownEvent = RaceLogEventFactory.INSTANCE.createFlagEvent(essOneDownTimePoint,
|
||||
UUID.randomUUID(), Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.CLASS,
|
||||
Flags.GOLF, /* isDisplayed */false);
|
||||
raceLog.add(essOneDownEvent);
|
||||
|
||||
|
||||
if (startPhaseEventListener != null) {
|
||||
startPhaseEventListener.onClassOverGolfDown();
|
||||
}
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceStarted(eventTime);
|
||||
}
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.GOLF, Flags.NONE, /* isDisplayed */
|
||||
false);
|
||||
raceLog.add(event);
|
||||
|
||||
TimePoint golfRemovalFireTimePoint = eventTime.plus(startPhaseGolfDownStandardIntervalConstantSummand+this.getGateLineOpeningTime());
|
||||
TimePoint golfRemovalFireTimePoint = eventTime.plus(startPhaseGolfDownStandardIntervalConstantSummand
|
||||
+ this.getGateLineOpeningTime());
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onStartProcedureSpecificEvent(golfRemovalFireTimePoint,
|
||||
GOLF_REMOVAL_EVENT_ID);
|
||||
raceStateChangedListener.onStartProcedureSpecificEvent(golfRemovalFireTimePoint, GOLF_REMOVAL_EVENT_ID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setStartProcedureListener(StartProcedureListener raceStateChangedListener) {
|
||||
this.raceStateChangedListener = raceStateChangedListener;
|
||||
@@ -181,21 +181,22 @@ public class GateStartProcedure implements StartProcedure {
|
||||
} else {
|
||||
resultTime = now;
|
||||
}
|
||||
|
||||
|
||||
return resultTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFinishing(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.BLUE, Flags.NONE, /*isDisplayed*/true);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.BLUE, Flags.NONE, /* isDisplayed */
|
||||
true);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceFinishing(eventTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void dispatchAutomaticRaceEndEvent(TimePoint automaticRaceEnd) {
|
||||
|
||||
@@ -203,10 +204,11 @@ public class GateStartProcedure implements StartProcedure {
|
||||
|
||||
@Override
|
||||
public void setFinished(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.BLUE, Flags.NONE, /*isDisplayed*/false);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.BLUE, Flags.NONE, /* isDisplayed */
|
||||
false);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceFinished(eventTime);
|
||||
}
|
||||
@@ -225,11 +227,12 @@ public class GateStartProcedure implements StartProcedure {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleAPUp(TimePoint eventTime, Flags lowerFlag) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.AP, lowerFlag, /*isDisplayed*/true);
|
||||
private void handleAPUp(TimePoint eventTime, Flags lowerFlag) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.AP, lowerFlag, /* isDisplayed */
|
||||
true);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceAborted(eventTime);
|
||||
}
|
||||
@@ -249,10 +252,11 @@ public class GateStartProcedure implements StartProcedure {
|
||||
}
|
||||
|
||||
private void handleNovemberUp(TimePoint eventTime, Flags lowerFlag) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.NOVEMBER, lowerFlag, /*isDisplayed*/true);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.NOVEMBER, lowerFlag, /* isDisplayed */
|
||||
true);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceAborted(eventTime);
|
||||
}
|
||||
@@ -260,10 +264,11 @@ public class GateStartProcedure implements StartProcedure {
|
||||
|
||||
@Override
|
||||
public void setGeneralRecall(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.FIRSTSUBSTITUTE, Flags.NONE, /*isDisplayed*/true);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.FIRSTSUBSTITUTE, Flags.NONE, /* isDisplayed */
|
||||
true);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceAborted(eventTime);
|
||||
}
|
||||
@@ -273,7 +278,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
public Class<? extends RaceFragment> getStartphaseFragment() {
|
||||
return GateStartPhaseFragment.class;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Class<? extends RaceFragment> getRunningRaceFragment() {
|
||||
return GateStartRunningRaceFragment.class;
|
||||
@@ -283,7 +288,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
public void setStartPhaseEventListener(StartPhaseEventListener listener) {
|
||||
startPhaseEventListener = (GateStartPhaseEventListener) listener;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setRunningRaceEventListener(RunningRaceEventListener listener) {
|
||||
runningRaceEventListener = (GateStartRunningRaceEventListener) listener;
|
||||
@@ -295,30 +300,39 @@ public class GateStartProcedure implements StartProcedure {
|
||||
List<Object> milisecondsList = new ArrayList<Object>();
|
||||
if (millisecondsTillStart < startPhasePapaDownInterval) {
|
||||
milisecondsList.add(millisecondsTillStart);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(R.string.race_startphase_gate_class_over_golf_removed), milisecondsList);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(
|
||||
R.string.race_startphase_gate_class_over_golf_removed), milisecondsList);
|
||||
} else if (millisecondsTillStart < startPhasePapaUpInterval) {
|
||||
milisecondsList.add(millisecondsTillStart - startPhasePapaDownInterval);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(R.string.race_startphase_gate_papa_removed), milisecondsList);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(
|
||||
R.string.race_startphase_gate_papa_removed), milisecondsList);
|
||||
} else if (millisecondsTillStart < startPhaseClassOverGolfUpIntervall) {
|
||||
milisecondsList.add(millisecondsTillStart - startPhasePapaUpInterval);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(R.string.race_startphase_gate_papa_display), milisecondsList);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(
|
||||
R.string.race_startphase_gate_papa_display), milisecondsList);
|
||||
} else {
|
||||
milisecondsList.add(millisecondsTillStart - startPhaseClassOverGolfUpIntervall);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(R.string.race_startphase_gate_class_over_golf_display), milisecondsList);
|
||||
result = new Pair<String, List<Object>>(context.getResources().getString(
|
||||
R.string.race_startphase_gate_class_over_golf_display), milisecondsList);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setGolfRemoval(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.GOLF, Flags.NONE, /*isDisplayed*/false);
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(),
|
||||
Collections.<Competitor> emptyList(), raceLog.getCurrentPassId(), Flags.GOLF, Flags.NONE, /* isDisplayed */
|
||||
false);
|
||||
raceLog.add(event);
|
||||
|
||||
|
||||
if (runningRaceEventListener != null) {
|
||||
runningRaceEventListener.onGolfDown();
|
||||
}
|
||||
}
|
||||
public void setGateLineOpeningTime(Long gateLineOpeningTimeInMiliseconds){
|
||||
|
||||
public void setGateLineOpeningTime(Long gateLineOpeningTimeInMiliseconds) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createGateLineOpeningTimeEvent(MillisecondsTimePoint.now(),
|
||||
raceLog.getCurrentPassId(), gateLineOpeningTimeInMiliseconds);
|
||||
raceLog.add(event);
|
||||
this.gateLineOpeningTime = gateLineOpeningTimeInMiliseconds;
|
||||
this.isGateLineOpeningTimeChosen = true;
|
||||
if (startPhaseEventListener != null) {
|
||||
@@ -328,7 +342,12 @@ public class GateStartProcedure implements StartProcedure {
|
||||
userRequiredActionPerformedListener.onUserRequiredActionPerformed();
|
||||
}
|
||||
}
|
||||
public void setPathfinder(String sailingId){
|
||||
|
||||
public void setPathfinder(String sailingId) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createPathfinderEvent(MillisecondsTimePoint.now(),
|
||||
raceLog.getCurrentPassId(), sailingId);
|
||||
raceLog.add(event);
|
||||
|
||||
this.pathFinder = sailingId;
|
||||
this.isPathFinderSet = true;
|
||||
if (startPhaseEventListener != null) {
|
||||
@@ -354,7 +373,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
public Long getGateLineOpeningTime() {
|
||||
return gateLineOpeningTime;
|
||||
}
|
||||
|
||||
|
||||
public boolean isPathFinderSet() {
|
||||
return isPathFinderSet;
|
||||
}
|
||||
@@ -362,7 +381,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
public boolean isGateLineOpeningTimeChosen() {
|
||||
return isGateLineOpeningTimeChosen;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Class<? extends RaceFragment> getFinishingRaceFragment() {
|
||||
return FinishingRaceFragment.class;
|
||||
@@ -372,23 +391,21 @@ public class GateStartProcedure implements StartProcedure {
|
||||
public Class<? extends RaceFragment> getFinishedRaceFragment() {
|
||||
return FinishedRaceFragment.class;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
|
||||
List<Class<? extends RaceDialogFragment>> actionList = new ArrayList<Class<? extends RaceDialogFragment>>();
|
||||
if (MillisecondsTimePoint.now().after(newStartTime)
|
||||
&& !isPathFinderSet) {
|
||||
actionList.add(RaceChoosePathFinderDialog.class);
|
||||
public Class<? extends RaceDialogFragment> checkForUserActionRequiredActions(
|
||||
MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
|
||||
if (MillisecondsTimePoint.now().after(newStartTime) && !isPathFinderSet) {
|
||||
this.userRequiredActionPerformedListener = listener;
|
||||
return RaceChoosePathFinderDialog.class;
|
||||
}
|
||||
if (MillisecondsTimePoint.now().after(newStartTime)
|
||||
&& !isGateLineOpeningTimeChosen) {
|
||||
actionList.add(RaceChooseGateLineOpeningTimeDialog.class);
|
||||
if (MillisecondsTimePoint.now().after(newStartTime) && !isGateLineOpeningTimeChosen) {
|
||||
this.userRequiredActionPerformedListener = listener;
|
||||
return RaceChooseGateLineOpeningTimeDialog.class;
|
||||
}
|
||||
return actionList;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Class<? extends RaceDialogFragment> getCourseDesignDialog() {
|
||||
return ClassicCourseDesignDialogFragment.class;
|
||||
|
||||
+3
-4
@@ -403,15 +403,14 @@ public class RRS26StartProcedure implements StartProcedure, StartModeChoosableSt
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Class<? extends RaceDialogFragment>> checkForUserActionRequiredActions(
|
||||
public Class<? extends RaceDialogFragment> checkForUserActionRequiredActions(
|
||||
MillisecondsTimePoint newStartTime, UserRequiredActionPerformedListener listener) {
|
||||
List<Class<? extends RaceDialogFragment>> actionList = new ArrayList<Class<? extends RaceDialogFragment>>();
|
||||
if (MillisecondsTimePoint.now().after(newStartTime.minus(startPhaseStartModeUpInterval))
|
||||
&& !startModeFlagChosen) {
|
||||
actionList.add(RaceChooseStartModeDialog.class);
|
||||
this.userRequiredActionPerformedListener = listener;
|
||||
return RaceChooseStartModeDialog.class;
|
||||
}
|
||||
return actionList;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+65
-58
@@ -15,9 +15,10 @@ import android.widget.TextView;
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.GateLineOpeningTimeFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.LastFlagsFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.PathfinderFinder;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartRunningRaceEventListener;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
@@ -27,61 +28,60 @@ import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceChoosePathFind
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
|
||||
|
||||
public class GateStartRunningRaceFragment extends RaceFragment implements GateStartRunningRaceEventListener {
|
||||
|
||||
|
||||
private TextView countUpTextView;
|
||||
private ImageView displayedFlag;
|
||||
private ImageView flagToBeDisplayed;
|
||||
ImageButton abortingFlagButton;
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.gate_start_race_running_view, container, false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
|
||||
countUpTextView = (TextView) getView().findViewById(R.id.raceCountUp);
|
||||
|
||||
|
||||
ImageButton blueFlagButton = (ImageButton) getView().findViewById(R.id.blueFlagButton);
|
||||
blueFlagButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
showDisplayBlueFlagDialog();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
abortingFlagButton = (ImageButton) getView().findViewById(R.id.abortingFlagButton);
|
||||
abortingFlagButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
showChooseAPNovemberDialog();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ImageButton generalRecallFlagButton = (ImageButton) getView().findViewById(R.id.firstSubstituteButton);
|
||||
generalRecallFlagButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
showDisplayGeneralRecallDialog();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
displayedFlag = (ImageView) getView().findViewById(R.id.currentlyDisplayedFlag);
|
||||
flagToBeDisplayed = (ImageView) getView().findViewById(R.id.flagToBeDisplayed);
|
||||
|
||||
setupUi();
|
||||
|
||||
|
||||
getRace().getState().getStartProcedure().setRunningRaceEventListener(this);
|
||||
|
||||
if(getRace().getState().getStartProcedure() instanceof GateStartProcedure){
|
||||
if(!((GateStartProcedure) getRace().getState().getStartProcedure()).isPathFinderSet()){
|
||||
showPathFinderDialog();
|
||||
}
|
||||
if(!((GateStartProcedure) getRace().getState().getStartProcedure()).isGateLineOpeningTimeChosen()){
|
||||
showGateLineOpeningTimeDialog();
|
||||
}
|
||||
|
||||
PathfinderFinder pathFinderFinder = new PathfinderFinder(this.getRace().getRaceLog());
|
||||
if (pathFinderFinder.analyze()==null) {
|
||||
showPathFinderDialog();
|
||||
}
|
||||
|
||||
|
||||
GateLineOpeningTimeFinder gateLineOpeningTimeFinder = new GateLineOpeningTimeFinder(this.getRace().getRaceLog());
|
||||
if (gateLineOpeningTimeFinder.analyze()==null) {
|
||||
showGateLineOpeningTimeDialog();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void setupUi() {
|
||||
@@ -95,32 +95,36 @@ public class GateStartRunningRaceFragment extends RaceFragment implements GateSt
|
||||
}
|
||||
|
||||
private void displayGolfFlag(boolean golfFlagDisplayed) {
|
||||
if(golfFlagDisplayed){
|
||||
displayedFlag.setVisibility(View.VISIBLE);
|
||||
flagToBeDisplayed.setVisibility(View.GONE);
|
||||
}else{
|
||||
if (golfFlagDisplayed) {
|
||||
displayedFlag.setVisibility(View.VISIBLE);
|
||||
flagToBeDisplayed.setVisibility(View.GONE);
|
||||
} else {
|
||||
displayedFlag.setVisibility(View.GONE);
|
||||
flagToBeDisplayed.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void showDisplayGeneralRecallDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setMessage(getActivity().getResources().getString(R.string.confirmation_first_substitute_display))
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(getActivity().getResources().getString(R.string.yes), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.RACE_RUNNING_GENERAL_RECALL_YES, getRace().getId().toString(), getActivity());
|
||||
getRace().getState().getStartProcedure().setGeneralRecall(MillisecondsTimePoint.now());
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getActivity().getResources().getString(R.string.no), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.RACE_RUNNING_GENERAL_RECALL_NO, getRace().getId().toString(), getActivity());
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(getActivity().getResources().getString(R.string.yes),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.RACE_RUNNING_GENERAL_RECALL_YES, getRace().getId().toString(),
|
||||
getActivity());
|
||||
getRace().getState().getStartProcedure().setGeneralRecall(MillisecondsTimePoint.now());
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getActivity().getResources().getString(R.string.no),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.RACE_RUNNING_GENERAL_RECALL_NO, getRace().getId().toString(),
|
||||
getActivity());
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
@@ -128,41 +132,44 @@ public class GateStartRunningRaceFragment extends RaceFragment implements GateSt
|
||||
private void showDisplayBlueFlagDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setMessage(getActivity().getResources().getString(R.string.confirmation_blue_flag_display))
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(getActivity().getResources().getString(R.string.yes), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.FLAG_BLUE_SET, getRace().getId().toString(), getActivity());
|
||||
getRace().getState().getStartProcedure().setFinishing(MillisecondsTimePoint.now());
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getActivity().getResources().getString(R.string.no), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.FLAG_BLUE_SET_NO, getRace().getId().toString(), getActivity());
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(getActivity().getResources().getString(R.string.yes),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.FLAG_BLUE_SET, getRace().getId().toString(), getActivity());
|
||||
getRace().getState().getStartProcedure().setFinishing(MillisecondsTimePoint.now());
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getActivity().getResources().getString(R.string.no),
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
ExLog.i(ExLog.FLAG_BLUE_SET_NO, getRace().getId().toString(), getActivity());
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
ExLog.i(GateStartRunningRaceFragment.class.getName(), String.format("Fragment %s is now shown", GateStartRunningRaceFragment.class.getName()));
|
||||
ExLog.i(GateStartRunningRaceFragment.class.getName(),
|
||||
String.format("Fragment %s is now shown", GateStartRunningRaceFragment.class.getName()));
|
||||
}
|
||||
|
||||
|
||||
public void notifyTick() {
|
||||
if (getRace().getState().getStartTime() == null)
|
||||
return;
|
||||
|
||||
long millisSinceStart = System.currentTimeMillis() - getRace().getState().getStartTime().asMillis();
|
||||
setStarttimeCountupLabel(millisSinceStart);
|
||||
//TODO: implement count down label text when individual recall is displayed
|
||||
// TODO: implement count down label text when individual recall is displayed
|
||||
}
|
||||
|
||||
|
||||
private void setStarttimeCountupLabel(long millisecondsSinceStart) {
|
||||
countUpTextView.setText(String.format(getString(R.string.race_running_since_template), prettyTimeString(millisecondsSinceStart), getRace().getName()));
|
||||
countUpTextView.setText(String.format(getString(R.string.race_running_since_template),
|
||||
prettyTimeString(millisecondsSinceStart), getRace().getName()));
|
||||
}
|
||||
|
||||
protected CharSequence prettyTimeString(long time) {
|
||||
@@ -192,7 +199,7 @@ public class GateStartRunningRaceFragment extends RaceFragment implements GateSt
|
||||
public void onGolfDown() {
|
||||
displayGolfFlag(false);
|
||||
}
|
||||
|
||||
|
||||
private void showPathFinderDialog() {
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
RaceDialogFragment fragment = new RaceChoosePathFinderDialog();
|
||||
|
||||
+19
-22
@@ -2,7 +2,6 @@ package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import android.app.DatePickerDialog.OnDateSetListener;
|
||||
import android.app.FragmentManager;
|
||||
@@ -52,7 +51,7 @@ public class SetStartTimeRaceFragment extends RaceFragment implements UserRequir
|
||||
protected Button btSetTime;
|
||||
protected Button btPostpone;
|
||||
protected TextView textInfoText;
|
||||
|
||||
|
||||
protected DatePickerFragment datePicker;
|
||||
|
||||
@Override
|
||||
@@ -64,7 +63,7 @@ public class SetStartTimeRaceFragment extends RaceFragment implements UserRequir
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
isReset = getArguments().getBoolean(AppConstants.RESET_TIME_FRAGMENT_IS_RESET);
|
||||
|
||||
|
||||
datePicker = new DatePickerFragment();
|
||||
setupDatePicker();
|
||||
|
||||
@@ -109,7 +108,7 @@ public class SetStartTimeRaceFragment extends RaceFragment implements UserRequir
|
||||
Calendar startDate = Calendar.getInstance();
|
||||
startDate.set(year, month, day);
|
||||
Calendar today = Calendar.getInstance();
|
||||
|
||||
|
||||
if (startDate.get(Calendar.YEAR) == today.get(Calendar.YEAR)
|
||||
&& startDate.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR)) {
|
||||
btSetDate.setText("Today");
|
||||
@@ -240,30 +239,28 @@ public class SetStartTimeRaceFragment extends RaceFragment implements UserRequir
|
||||
|
||||
private void setStartTime(Date newStartTime) {
|
||||
getRace().getState().createNewStartProcedure(selectedStartProcedureType);
|
||||
List<Class<? extends RaceDialogFragment>> actionList = getRace().getState().getStartProcedure()
|
||||
Class<? extends RaceDialogFragment> action = getRace().getState().getStartProcedure()
|
||||
.checkForUserActionRequiredActions(new MillisecondsTimePoint(newStartTime), this);
|
||||
if (actionList.isEmpty()) {
|
||||
if (action == null) {
|
||||
getRace().getState().setStartTime(new MillisecondsTimePoint(newStartTime));
|
||||
} else {
|
||||
for (Class<? extends RaceDialogFragment> actionFragment : actionList) {
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
|
||||
RaceDialogFragment fragment;
|
||||
try {
|
||||
fragment = actionFragment.newInstance();
|
||||
Bundle args = getRecentArguments();
|
||||
fragment.setArguments(args);
|
||||
|
||||
fragment.show(fragmentManager, "userActionRequiredDialog");
|
||||
} catch (java.lang.InstantiationException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
RaceDialogFragment fragment;
|
||||
try {
|
||||
fragment = action.newInstance();
|
||||
Bundle args = getRecentArguments();
|
||||
fragment.setArguments(args);
|
||||
|
||||
fragment.show(fragmentManager, "userActionRequiredDialog");
|
||||
} catch (java.lang.InstantiationException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user