mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
removed startprocedure specific code from RaceState.java etc. most things now only rely on the specific StartProcedure. now the start procedures have to be adapted and testet. see also #1140
This commit is contained in:
1 parent
3d1a94571c
commit
0afecb648a
21 files changed
+327
-553
No files matched your search
@@ -55,8 +55,7 @@
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.registerRace" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.clearRaces" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.alarmAction" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.automaticRaceEnd" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.automaticGateClose" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.startProcedureSpecificAction" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
<service
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
<string name="intentActionSendSavedIntents">com.sap.sailing.racecommittee.app.action.sendSavedIntents</string>
|
||||
<string name="intentActionSendEvent">com.sap.sailing.racecommittee.app.action.sendEvent</string>
|
||||
<string name="intentActionAlarmAction">com.sap.sailing.racecommittee.app.action.alarmAction</string>
|
||||
<string name="intentActionIndividualRecallRemoval">com.sap.sailing.racecommittee.app.action.individualrecallremovalaction</string>
|
||||
<string name="intentActionAutomaticRaceEnd">com.sap.sailing.racecommittee.app.action.automaticRaceEnd</string>
|
||||
<string name="intentActionAutomaticGateClose">com.sap.sailing.racecommittee.app.action.automaticGateClose</string>
|
||||
<string name="intenStartProcedureSpecificAction">com.sap.sailing.racecommittee.app.action.startProcedureSpecificAction</string>
|
||||
|
||||
<string name="hello">Hello World, RaceCommitteeActivity!</string>
|
||||
<string name="running_on_course">(on course %s)</string>
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ public class AppConstants {
|
||||
public final static String RACE_ID_KEY = "raceUuid";
|
||||
public final static String SERVICE_UNIQUE_ID = "serviceUID";
|
||||
public final static String RACING_EVENT_TIME = "racingEventTime";
|
||||
public final static String STARTPROCEDURE_SPECIFIC_EVENT_ID = "startProcedureSpecificEventId";
|
||||
public final static String EXTRAS_SERIALIZED_EVENT = "json";
|
||||
public final static String EXTRAS_URL = "url";
|
||||
public final static String FLAG_KEY = "raceFlag";
|
||||
|
||||
+4
-10
@@ -26,7 +26,9 @@ public interface StartProcedure {
|
||||
|
||||
void dispatchFiredEventTimePoint(TimePoint startTime, TimePoint eventTime);
|
||||
|
||||
void setChangeListener(StartProcedureListener listener);
|
||||
void setStartProcedureListener(StartProcedureListener listener);
|
||||
|
||||
void setRunningRaceEventListener(RunningRaceEventListener listener);
|
||||
|
||||
void setFinishing(TimePoint eventTime);
|
||||
|
||||
@@ -40,12 +42,6 @@ public interface StartProcedure {
|
||||
|
||||
void setGeneralRecall(TimePoint eventTime);
|
||||
|
||||
void setIndividualRecall(TimePoint eventTime);
|
||||
|
||||
void dispatchFiredIndividualRecallRemovalEvent(TimePoint individualRecallDisplayedTime, TimePoint eventTime);
|
||||
|
||||
void setIndividualRecallRemoval(TimePoint eventTime);
|
||||
|
||||
Class<? extends RaceFragment> getStartphaseFragment();
|
||||
|
||||
Class<? extends RaceFragment> getRunningRaceFragment();
|
||||
@@ -54,8 +50,6 @@ public interface StartProcedure {
|
||||
|
||||
Pair<String, Long> getNextFlagCountdownUiLabel(Context context, long millisecondsTillStart);
|
||||
|
||||
void dispatchAutomaticGateClose(TimePoint eventTime);
|
||||
|
||||
void setRunningRaceEventListener(RunningRaceEventListener listener);
|
||||
void handleStartProcedureSpecificEvent(TimePoint eventTime, Integer eventId);
|
||||
|
||||
}
|
||||
+4
-6
@@ -9,13 +9,11 @@ public interface StartProcedureListener {
|
||||
|
||||
void onRaceStarted(TimePoint eventTime);
|
||||
|
||||
void onRaceFinishing(TimePoint now);
|
||||
void onRaceFinishing(TimePoint eventTime);
|
||||
|
||||
void onRaceFinishing(TimePoint now, TimePoint automaticRaceEnd);
|
||||
void onRaceFinishing(TimePoint eventTime, TimePoint automaticRaceEnd);
|
||||
|
||||
void onRaceFinished(TimePoint now);
|
||||
void onRaceFinished(TimePoint eventTime);
|
||||
|
||||
void onIndividualRecall(TimePoint eventTime);
|
||||
|
||||
void onIndividualRecallRemoval();
|
||||
void onStartProcedureSpecificEvent(TimePoint eventTime, Integer eventId);
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.startprocedure.impl;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.RunningRaceEventListener;
|
||||
|
||||
public interface EssRunningRaceEventListener extends RunningRaceEventListener{
|
||||
|
||||
void onIndividualRecall();
|
||||
|
||||
void onIndividualRecallRemoval();
|
||||
}
|
||||
+24
-13
@@ -24,7 +24,7 @@ import com.sap.sailing.racecommittee.app.domain.startprocedure.StartPhaseEventLi
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedureListener;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RunningRaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.EssRunningRaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.startphase.EssStartPhaseFragment;
|
||||
|
||||
public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
@@ -39,16 +39,21 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
|
||||
private final static double essAutomaticRaceFinishMultiplyer = 0.75;
|
||||
|
||||
//list of start procedure specific event id's
|
||||
private static final Integer INDIVIDUAL_RECALL_REMOVAL_EVENT_ID = 1;
|
||||
|
||||
private List<Long> startProcedureEventIntervals;
|
||||
private PassAwareRaceLog raceLog;
|
||||
private StartProcedureListener raceStateChangedListener;
|
||||
private EssStartPhaseEventListener startPhaseEventListener;
|
||||
private EssRunningRaceEventListener runningRaceEventListener;
|
||||
|
||||
public ExtremeSailingSeriesStartProcedure(PassAwareRaceLog raceLog) {
|
||||
this.raceLog = raceLog;
|
||||
startProcedureEventIntervals = new ArrayList<Long>();
|
||||
raceStateChangedListener = null;
|
||||
startPhaseEventListener = null;
|
||||
runningRaceEventListener = null;
|
||||
|
||||
startProcedureEventIntervals.add(startPhaseAPDownInterval);
|
||||
startProcedureEventIntervals.add(startPhaseESSThreeUpInterval);
|
||||
@@ -155,7 +160,7 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChangeListener(StartProcedureListener raceStateChangedListener) {
|
||||
public void setStartProcedureListener(StartProcedureListener raceStateChangedListener) {
|
||||
this.raceStateChangedListener = raceStateChangedListener;
|
||||
}
|
||||
|
||||
@@ -267,7 +272,6 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIndividualRecall(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.XRAY, Flags.NONE, /*isDisplayed*/true);
|
||||
@@ -275,12 +279,16 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
|
||||
TimePoint individualRecallRemovalFireTimePoint = eventTime.plus(individualRecallRemovalInterval);
|
||||
|
||||
|
||||
if (runningRaceEventListener != null) {
|
||||
runningRaceEventListener.onIndividualRecall();
|
||||
}
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onIndividualRecall(individualRecallRemovalFireTimePoint);
|
||||
raceStateChangedListener.onStartProcedureSpecificEvent(individualRecallRemovalFireTimePoint, INDIVIDUAL_RECALL_REMOVAL_EVENT_ID);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchFiredIndividualRecallRemovalEvent(TimePoint individualRecallDisplayedTime, TimePoint eventTime) {
|
||||
if (individualRecallDisplayedTime != null) {
|
||||
long interval = eventTime.asMillis() - individualRecallDisplayedTime.asMillis();
|
||||
@@ -291,16 +299,20 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIndividualRecallRemoval(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.XRAY, Flags.NONE, /*isDisplayed*/false);
|
||||
raceLog.add(event);
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onIndividualRecallRemoval();
|
||||
if (runningRaceEventListener != null) {
|
||||
runningRaceEventListener.onIndividualRecallRemoval();
|
||||
}
|
||||
}
|
||||
|
||||
public Object getIndividualRecallDisplayedTime() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends RaceFragment> getStartphaseFragment() {
|
||||
@@ -309,7 +321,7 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
|
||||
@Override
|
||||
public Class<? extends RaceFragment> getRunningRaceFragment() {
|
||||
return RunningRaceFragment.class;
|
||||
return EssRunningRaceFragment.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -335,15 +347,14 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchAutomaticGateClose(TimePoint eventTime) {
|
||||
// TODO Auto-generated method stub
|
||||
public void setRunningRaceEventListener(RunningRaceEventListener listener) {
|
||||
this.runningRaceEventListener = (EssRunningRaceEventListener) listener;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRunningRaceEventListener(RunningRaceEventListener listener) {
|
||||
public void handleStartProcedureSpecificEvent(TimePoint eventTime, Integer eventId) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+25
-17
@@ -133,7 +133,7 @@ public class GateStartProcedure implements StartProcedure {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChangeListener(StartProcedureListener raceStateChangedListener) {
|
||||
public void setStartProcedureListener(StartProcedureListener raceStateChangedListener) {
|
||||
this.raceStateChangedListener = raceStateChangedListener;
|
||||
}
|
||||
|
||||
@@ -237,11 +237,6 @@ public class GateStartProcedure implements StartProcedure {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIndividualRecallRemoval(TimePoint eventTime) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends RaceFragment> getStartphaseFragment() {
|
||||
return GateStartPhaseFragment.class;
|
||||
@@ -277,17 +272,6 @@ public class GateStartProcedure implements StartProcedure {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIndividualRecall(TimePoint eventTime) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchFiredIndividualRecallRemovalEvent(TimePoint individualRecallDisplayedTime, TimePoint eventTime) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchAutomaticGateClose(TimePoint eventTime) {
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFlagEvent(eventTime, UUID.randomUUID(), Collections.<Competitor>emptyList(),
|
||||
raceLog.getCurrentPassId(), Flags.GOLF, Flags.NONE, /*isDisplayed*/false);
|
||||
@@ -297,5 +281,29 @@ public class GateStartProcedure implements StartProcedure {
|
||||
runningRaceEventListener.onGolfDown();
|
||||
}
|
||||
}
|
||||
|
||||
public void setGateLineOpeningTime(Long gateLineOpeningTimeInMinutes){
|
||||
//TODO
|
||||
}
|
||||
|
||||
public void setPathfinder(String sailingId){
|
||||
//TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleStartProcedureSpecificEvent(TimePoint eventTime, Integer eventId) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
public String getPathfinder() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
public Long getGateLineOpeningTime() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
-27
@@ -121,31 +121,4 @@ public interface RaceState extends StartProcedureListener {
|
||||
*/
|
||||
RaceLogRaceStatus getStatus();
|
||||
|
||||
/**
|
||||
* @return the timepoint at which the individual recall was displayed or null when the individual recall is already removed
|
||||
*/
|
||||
TimePoint getIndividualRecallDisplayedTime();
|
||||
|
||||
/**
|
||||
* @return the current pathfinder boat if it is a gate start race
|
||||
*/
|
||||
String getPathfinder();
|
||||
|
||||
/**
|
||||
* Set the current pathfinder boat if it is a gate start race
|
||||
* @param sailingId
|
||||
*/
|
||||
void setPathfinder(String sailingId);
|
||||
|
||||
/**
|
||||
* @return the current pathfinder boat if it is a gate start race
|
||||
*/
|
||||
Long getGateLineOpeningTime();
|
||||
|
||||
/**
|
||||
* Set the current pathfinder boat if it is a gate start race
|
||||
* @param sailingId
|
||||
*/
|
||||
void setGateLineOpeningTime(Long gateLineOpeningTimeInMillis);
|
||||
|
||||
}
|
||||
-13
@@ -8,17 +8,4 @@ public interface RaceStateChangedListener {
|
||||
void onStartTimeChanged(TimePoint startTime);
|
||||
|
||||
void onRaceAborted();
|
||||
|
||||
void onIndividualRecallDisplayed(TimePoint individualRecallRemovalFireTimePoint);
|
||||
|
||||
void onIndividualRecallRemoval();
|
||||
|
||||
void onAutomaticRaceEnd(TimePoint automaticRaceEnd);
|
||||
|
||||
void onPathfinderSelected();
|
||||
|
||||
void onGateLineOpeningTimeChanged();
|
||||
|
||||
void onGateLineOpeningTimeTrigger(TimePoint gateCloseTimePoint);
|
||||
|
||||
}
|
||||
+4
-107
@@ -22,17 +22,13 @@ import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.FinishPositioningListFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.FinishedTimeFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.FinishingTimeFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.GateLineOpeningTimeFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.IndividualRecallFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.LastPublishedCourseDesignFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.PathfinderFinder;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.RaceStatusAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.StartProcedureTypeAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.StartTimeFinder;
|
||||
import com.sap.sailing.racecommittee.app.domain.racelog.RaceLogChangedListener;
|
||||
import com.sap.sailing.racecommittee.app.domain.racelog.impl.RaceLogChangedVisitor;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.StartProcedureFactory;
|
||||
import com.sap.sailing.racecommittee.app.domain.state.RaceState;
|
||||
import com.sap.sailing.racecommittee.app.domain.state.RaceStateChangedListener;
|
||||
@@ -56,9 +52,6 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
private FinishingTimeFinder finishingTimeFinder;
|
||||
private LastPublishedCourseDesignFinder lastCourseDesignFinder;
|
||||
private FinishPositioningListFinder finishPositioningListFinder;
|
||||
private IndividualRecallFinder individualRecallFinder;
|
||||
private PathfinderFinder pathfinderFinder;
|
||||
private GateLineOpeningTimeFinder gateLineOpeningTimeFinder;
|
||||
private StartProcedureTypeAnalyzer startProcedureTypeAnalyzer;
|
||||
|
||||
public RaceStateImpl(StartProcedureType defaultStartProcedureType, PassAwareRaceLog raceLog) {
|
||||
@@ -77,9 +70,6 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
this.statusAnalyzer = new RaceStatusAnalyzer(raceLog);
|
||||
this.lastCourseDesignFinder = new LastPublishedCourseDesignFinder(raceLog);
|
||||
this.finishPositioningListFinder = new FinishPositioningListFinder(raceLog);
|
||||
this.individualRecallFinder = new IndividualRecallFinder(raceLog);
|
||||
this.pathfinderFinder = new PathfinderFinder(raceLog);
|
||||
this.gateLineOpeningTimeFinder = new GateLineOpeningTimeFinder(raceLog);
|
||||
this.startProcedureTypeAnalyzer = new StartProcedureTypeAnalyzer(raceLog);
|
||||
|
||||
registerStartProcedure();
|
||||
@@ -109,11 +99,11 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
|
||||
private void registerStartProcedure() {
|
||||
if (startProcedure != null) {
|
||||
startProcedure.setChangeListener(null);
|
||||
startProcedure.setStartProcedureListener(null);
|
||||
}
|
||||
StartProcedureType type = getStartProcedureType();
|
||||
startProcedure = StartProcedureFactory.create(type, raceLog);
|
||||
startProcedure.setChangeListener(this);
|
||||
startProcedure.setStartProcedureListener(this);
|
||||
}
|
||||
|
||||
private void setStatus(RaceLogRaceStatus newStatus) {
|
||||
@@ -221,9 +211,6 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
public void onRaceStarted(TimePoint eventTime) {
|
||||
RaceLogEvent statusEvent = RaceLogEventFactory.INSTANCE.createRaceStatusEvent(eventTime, raceLog.getCurrentPassId(), RaceLogRaceStatus.RUNNING);
|
||||
this.raceLog.add(statusEvent);
|
||||
if(getGateLineOpeningTime()!=null){
|
||||
notifyListenersAboutGateLineOpeningTimeTrigger();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -235,15 +222,8 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
@Override
|
||||
public void onRaceFinishing(TimePoint eventTime, TimePoint automaticRaceEnd) {
|
||||
onRaceFinishing(eventTime);
|
||||
notifyListenersAboutAutomaticRaceEnd(automaticRaceEnd);
|
||||
}
|
||||
|
||||
private void notifyListenersAboutAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
listener.onAutomaticRaceEnd(automaticRaceEnd);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceFinished(TimePoint eventTime) {
|
||||
@@ -287,91 +267,8 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecall(TimePoint individualRecallRemovalFireTimePoint) {
|
||||
notifyListenersAboutIndividualRecall(individualRecallRemovalFireTimePoint);
|
||||
}
|
||||
|
||||
private void notifyListenersAboutIndividualRecall(TimePoint individualRecallRemovalFireTimePoint) {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
listener.onIndividualRecallDisplayed(individualRecallRemovalFireTimePoint);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimePoint getIndividualRecallDisplayedTime() {
|
||||
return individualRecallFinder.getIndividualRecallDisplayedTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallRemoval() {
|
||||
notifyListenersAboutIndividualRecallRemoval();
|
||||
}
|
||||
|
||||
private void notifyListenersAboutIndividualRecallRemoval() {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
listener.onIndividualRecallRemoval();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPathfinder() {
|
||||
return pathfinderFinder.getPathfinderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPathfinder(String sailingId) {
|
||||
|
||||
TimePoint eventTime = MillisecondsTimePoint.now();
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createPathfinderEvent(eventTime, raceLog.getCurrentPassId(),
|
||||
sailingId);
|
||||
public void onStartProcedureSpecificEvent(TimePoint eventTime, Integer eventId) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
this.raceLog.add(event);
|
||||
|
||||
notifyListenersAboutPathFinderChange();
|
||||
}
|
||||
|
||||
private void notifyListenersAboutPathFinderChange() {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
listener.onPathfinderSelected();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getGateLineOpeningTime() {
|
||||
return gateLineOpeningTimeFinder.getGateLineOpeningTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGateLineOpeningTime(Long gateLineOpeningTimeInMillis) {
|
||||
TimePoint eventTime = MillisecondsTimePoint.now();
|
||||
|
||||
RaceLogEvent event = RaceLogEventFactory.INSTANCE.createGateLineOpeningTimeEvent(eventTime, raceLog.getCurrentPassId(),
|
||||
gateLineOpeningTimeInMillis);
|
||||
|
||||
this.raceLog.add(event);
|
||||
notifyListenersAboutGateLineOpeningTimeChanged();
|
||||
if(eventTime.after(getStartTime()) && getStatus().equals(RaceLogRaceStatus.RUNNING)){
|
||||
notifyListenersAboutGateLineOpeningTimeTrigger();
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyListenersAboutGateLineOpeningTimeChanged() {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
listener.onGateLineOpeningTimeChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyListenersAboutGateLineOpeningTimeTrigger() {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
Long gateLineOpeningTime = GateStartProcedure.startPhaseGolfDownStandardInterval;
|
||||
//this should not happen
|
||||
if(this.getGateLineOpeningTime()!=null){
|
||||
gateLineOpeningTime = this.getGateLineOpeningTime();
|
||||
}
|
||||
|
||||
listener.onGateLineOpeningTimeTrigger(this.getStartTime().plus(GateStartProcedure.startPhaseGolfDownStandardIntervalConstantSummand+gateLineOpeningTime));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
-30
@@ -30,34 +30,4 @@ public class RaceStateListener implements RaceStateChangedListener {
|
||||
public void onRaceAborted() {
|
||||
service.handleRaceAborted(race);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallDisplayed(TimePoint individualRecallRemovalFireTimePoint) {
|
||||
service.handleIndividualRecall(race, individualRecallRemovalFireTimePoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallRemoval() {
|
||||
service.handleIndividualRecallRemoved(race);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
service.handleAutomaticRaceEnd(race, automaticRaceEnd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPathfinderSelected() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGateLineOpeningTimeChanged() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGateLineOpeningTimeTrigger(TimePoint gateCloseTimePoint) {
|
||||
service.handleGateLineOpeningTimeChanged(race, gateCloseTimePoint);
|
||||
}
|
||||
}
|
||||
+5
-24
@@ -180,12 +180,9 @@ public class RaceStateService extends Service {
|
||||
}
|
||||
managedIntents.get(race.getId()).remove(intent);
|
||||
return;
|
||||
} else if (getString(R.string.intentActionIndividualRecallRemoval).equals(action)) {
|
||||
race.getState().getStartProcedure().dispatchFiredIndividualRecallRemovalEvent(race.getState().getIndividualRecallDisplayedTime(), eventTime);
|
||||
} else if (getString(R.string.intentActionAutomaticRaceEnd).equals(action)) {
|
||||
race.getState().getStartProcedure().dispatchAutomaticRaceEndEvent(eventTime);
|
||||
} else if (getString(R.string.intentActionAutomaticGateClose).equals(action)) {
|
||||
race.getState().getStartProcedure().dispatchAutomaticGateClose(eventTime);
|
||||
} else if (getString(R.string.intenStartProcedureSpecificAction).equals(action)) {
|
||||
Integer eventId =intent.getExtras().getInt(AppConstants.STARTPROCEDURE_SPECIFIC_EVENT_ID);
|
||||
race.getState().getStartProcedure().handleStartProcedureSpecificEvent(eventTime, eventId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,23 +312,7 @@ public class RaceStateService extends Service {
|
||||
clearAlarms(race.getId());
|
||||
}
|
||||
|
||||
public void handleIndividualRecall(ManagedRace race, TimePoint individualRecallRemovalFireTimePoint) {
|
||||
String action = getString(R.string.intentActionIndividualRecallRemoval);
|
||||
scheduleEventTime(action, race, individualRecallRemovalFireTimePoint);
|
||||
public void handleStartProcedureSpecificEvent(ManagedRace race, TimePoint startProcedureSpecificEventTimePoint, Integer eventId) {
|
||||
String action = getString(R.string.intenStartProcedureSpecificAction);
|
||||
}
|
||||
|
||||
public void handleIndividualRecallRemoved(ManagedRace race) {
|
||||
clearAlarms(race.getId());
|
||||
}
|
||||
|
||||
public void handleAutomaticRaceEnd(ManagedRace race, TimePoint automaticRaceEnd) {
|
||||
String action = getString(R.string.intentActionAutomaticRaceEnd);
|
||||
scheduleEventTime(action, race, automaticRaceEnd);
|
||||
}
|
||||
|
||||
public void handleGateLineOpeningTimeChanged(ManagedRace race, TimePoint gateCloseTimePoint) {
|
||||
String action = getString(R.string.intentActionAutomaticGateClose);
|
||||
scheduleEventTime(action, race, gateCloseTimePoint);
|
||||
}
|
||||
|
||||
}
|
||||
-42
@@ -24,8 +24,6 @@ import com.sap.sailing.racecommittee.app.domain.state.RaceStateChangedListener;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.chooser.RaceInfoFragmentChooser;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.CourseDesignDialogFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.IndividualRecallUiListener;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.GateStartUiListener;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceInfoListener;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.SetStartTimeRaceFragment;
|
||||
@@ -168,13 +166,6 @@ public class RaceInfoFragment extends RaceFragment implements RaceStateChangedLi
|
||||
//do nothing (onRaceStateChanged(RaceState) handles state change and fragment switch already
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallDisplayed(TimePoint individualRecallRemovalFireTimePoint) {
|
||||
if (infoFragment instanceof IndividualRecallUiListener) {
|
||||
((IndividualRecallUiListener) infoFragment).displayIndividualRecallFlag();
|
||||
}
|
||||
}
|
||||
|
||||
private void showRaceResetConfirmationDialog() {
|
||||
prepareResetRaceView();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
@@ -233,37 +224,4 @@ public class RaceInfoFragment extends RaceFragment implements RaceStateChangedLi
|
||||
//do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallRemoval() {
|
||||
if (infoFragment instanceof IndividualRecallUiListener) {
|
||||
((IndividualRecallUiListener) infoFragment).removeIndividualRecallFlag();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPathfinderSelected() {
|
||||
if (infoFragment instanceof GateStartUiListener) {
|
||||
((GateStartUiListener) infoFragment).updatePathfinderLabel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGateLineOpeningTimeChanged() {
|
||||
if (infoFragment instanceof GateStartUiListener) {
|
||||
((GateStartUiListener) infoFragment).updateGateLineOpeningTimeLabel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGateLineOpeningTimeTrigger(TimePoint gateCloseTimePoint) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.dialogs;
|
||||
|
||||
public interface IndividualRecallUiListener {
|
||||
|
||||
public void displayIndividualRecallFlag();
|
||||
|
||||
public void removeIndividualRecallFlag();
|
||||
|
||||
}
|
||||
+3
-1
@@ -53,7 +53,9 @@ public class RaceChooseLineOpeningTimeDialog extends RaceDialogFragment {
|
||||
protected void onChooseClicked(View view) {
|
||||
try{
|
||||
Integer lineOpeningTime = convertToInteger(lineOpeningTimeEditText.getText().toString());
|
||||
this.getRace().getState().setGateLineOpeningTime(Long.valueOf(60 * 1000 * lineOpeningTime));
|
||||
if(getRace().getState().getStartProcedure() instanceof GateStartProcedure){
|
||||
((GateStartProcedure) getRace().getState().getStartProcedure()).setGateLineOpeningTime(Long.valueOf(60 * 1000 * lineOpeningTime));
|
||||
}
|
||||
Log.i("RACE_SET_GATELINE_OPENING_TIME", String.valueOf(lineOpeningTime));
|
||||
dismiss();
|
||||
} catch(NumberFormatException nfe){
|
||||
|
||||
+4
-1
@@ -13,6 +13,7 @@ import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartProcedure;
|
||||
|
||||
public class RaceChoosePathFinderDialog extends RaceDialogFragment {
|
||||
|
||||
@@ -73,7 +74,9 @@ public class RaceChoosePathFinderDialog extends RaceDialogFragment {
|
||||
|
||||
protected void onChooseClicked(View view) {
|
||||
String sailingId = sailingNationalityEditText.getText().toString() + " " + sailingNumberEditText.getText().toString();
|
||||
this.getRace().getState().setPathfinder(sailingId);
|
||||
if(getRace().getState().getStartProcedure() instanceof GateStartProcedure){
|
||||
((GateStartProcedure) getRace().getState().getStartProcedure()).setPathfinder(sailingId);
|
||||
}
|
||||
Log.i("RACE_SET_PATHFINDER", sailingId);
|
||||
dismiss();
|
||||
}
|
||||
|
||||
-32
@@ -229,38 +229,6 @@ public class ManagedRaceListFragment extends ListFragment implements JuryFlagCli
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallDisplayed(TimePoint individualRecallRemovalFireTimePoint) {
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallRemoval() {
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
notifyDataChanged();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPathfinderSelected() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGateLineOpeningTimeChanged() {
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGateLineOpeningTimeTrigger(TimePoint gateCloseTimePoint) {
|
||||
// do nothing
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* public void notifyDataChanged() { List<RaceListDataType> list = adapter.getItems(); for (int i = 0; i <
|
||||
|
||||
+208
-202
@@ -1,202 +1,208 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.FragmentManager;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.RelativeLayout.LayoutParams;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.AbortTypeSelectionDialog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.IndividualRecallUiListener;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
|
||||
|
||||
public class RunningRaceFragment extends RaceFragment implements IndividualRecallUiListener {
|
||||
|
||||
private TextView countUpTextView;
|
||||
private ImageView individualRecallFlag;
|
||||
private TextView individualRecallLabel;
|
||||
ImageButton abortingFlagButton;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.race_running_view, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
countUpTextView = (TextView) getView().findViewById(R.id.raceCountUp);
|
||||
|
||||
individualRecallFlag = (ImageView) getView().findViewById(R.id.xrayFlag);
|
||||
individualRecallLabel = (TextView) getView().findViewById(R.id.individualRecallLabel);
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ImageButton individualRecallButton = (ImageButton) getView().findViewById(R.id.individualRecallButton);
|
||||
individualRecallButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
if (getRace().getState().getIndividualRecallDisplayedTime() == null) {
|
||||
getRace().getState().getStartProcedure().setIndividualRecall(now);
|
||||
} else {
|
||||
getRace().getState().getStartProcedure().setIndividualRecallRemoval(now);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
ExLog.w(RunningRaceFragment.class.getName(), String.format("Fragment %s is now shown", RunningRaceFragment.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
|
||||
}
|
||||
|
||||
|
||||
private void setStarttimeCountupLabel(long millisecondsSinceStart) {
|
||||
countUpTextView.setText(String.format(getString(R.string.race_running_since_template), prettyTimeString(millisecondsSinceStart), getRace().getName()));
|
||||
}
|
||||
|
||||
protected CharSequence prettyTimeString(long time) {
|
||||
int secondsStart = (int) (time / 1000);
|
||||
int hours = secondsStart / 3600;
|
||||
int minutes = (secondsStart % 3600) / 60;
|
||||
int seconds = (secondsStart % 60);
|
||||
String timePattern = "%s:%s:%s";
|
||||
String secondsString = seconds < 10 ? "0" + seconds : "" + seconds;
|
||||
String minutesString = minutes < 10 ? "0" + minutes : "" + minutes;
|
||||
String hoursString = hours < 10 ? "0" + hours : "" + hours;
|
||||
return String.format(timePattern, hoursString, minutesString, secondsString);
|
||||
}
|
||||
|
||||
private void showChooseAPNovemberDialog() {
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
|
||||
RaceDialogFragment fragment = new AbortTypeSelectionDialog();
|
||||
|
||||
Bundle args = getRecentArguments();
|
||||
fragment.setArguments(args);
|
||||
|
||||
fragment.show(fragmentManager, "dialogAPNovemberMode");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeIndividualRecallFlag() {
|
||||
setIndividualRecallRemovedInView();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void displayIndividualRecallFlag() {
|
||||
setIndividualRecallDisplayedInView();
|
||||
}
|
||||
|
||||
private void setIndividualRecallDisplayedInView() {
|
||||
moveImageUp(individualRecallFlag);
|
||||
String unsetXray = getActivity().getResources().getString(R.string.choose_xray_flag_down);
|
||||
individualRecallLabel.setText(unsetXray);
|
||||
}
|
||||
|
||||
private void setIndividualRecallRemovedInView() {
|
||||
moveImageDown(individualRecallFlag);
|
||||
//setXrayCountdownLabel();
|
||||
String setIndividualRecallUp = getActivity().getResources().getString(R.string.choose_xray_flag_up);
|
||||
individualRecallLabel.setText(setIndividualRecallUp);
|
||||
}
|
||||
|
||||
protected void moveImageUp(ImageView image) {
|
||||
moveImage(image, 1, 0);
|
||||
}
|
||||
|
||||
protected void moveImageDown(ImageView image) {
|
||||
moveImage(image, 0, 1);
|
||||
}
|
||||
|
||||
protected void moveImage(ImageView image, int parentTop, int parentBottom) {
|
||||
LayoutParams params = (RelativeLayout.LayoutParams) image.getLayoutParams();
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, parentTop);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, parentBottom);
|
||||
image.setLayoutParams(params);
|
||||
}
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.FragmentManager;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.RelativeLayout.LayoutParams;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.EssRunningRaceEventListener;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.ExtremeSailingSeriesStartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.AbortTypeSelectionDialog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
|
||||
|
||||
public class EssRunningRaceFragment extends RaceFragment implements EssRunningRaceEventListener {
|
||||
|
||||
private TextView countUpTextView;
|
||||
private ImageView individualRecallFlag;
|
||||
private TextView individualRecallLabel;
|
||||
ImageButton abortingFlagButton;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.race_running_view, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
countUpTextView = (TextView) getView().findViewById(R.id.raceCountUp);
|
||||
|
||||
individualRecallFlag = (ImageView) getView().findViewById(R.id.xrayFlag);
|
||||
individualRecallLabel = (TextView) getView().findViewById(R.id.individualRecallLabel);
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ImageButton individualRecallButton = (ImageButton) getView().findViewById(R.id.individualRecallButton);
|
||||
individualRecallButton.setOnClickListener(new OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
if (getRace().getState().getStartProcedure() instanceof ExtremeSailingSeriesStartProcedure) {
|
||||
ExtremeSailingSeriesStartProcedure essStartProcedure = ((ExtremeSailingSeriesStartProcedure) getRace().getState().getStartProcedure());
|
||||
if (essStartProcedure.getIndividualRecallDisplayedTime() == null) {
|
||||
essStartProcedure.setIndividualRecall(now);
|
||||
} else {
|
||||
essStartProcedure.setIndividualRecallRemoval(now);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
getRace().getState().getStartProcedure().setRunningRaceEventListener(this);
|
||||
ExLog.w(EssRunningRaceFragment.class.getName(), String.format("Fragment %s is now shown", EssRunningRaceFragment.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
|
||||
}
|
||||
|
||||
|
||||
private void setStarttimeCountupLabel(long millisecondsSinceStart) {
|
||||
countUpTextView.setText(String.format(getString(R.string.race_running_since_template), prettyTimeString(millisecondsSinceStart), getRace().getName()));
|
||||
}
|
||||
|
||||
protected CharSequence prettyTimeString(long time) {
|
||||
int secondsStart = (int) (time / 1000);
|
||||
int hours = secondsStart / 3600;
|
||||
int minutes = (secondsStart % 3600) / 60;
|
||||
int seconds = (secondsStart % 60);
|
||||
String timePattern = "%s:%s:%s";
|
||||
String secondsString = seconds < 10 ? "0" + seconds : "" + seconds;
|
||||
String minutesString = minutes < 10 ? "0" + minutes : "" + minutes;
|
||||
String hoursString = hours < 10 ? "0" + hours : "" + hours;
|
||||
return String.format(timePattern, hoursString, minutesString, secondsString);
|
||||
}
|
||||
|
||||
private void showChooseAPNovemberDialog() {
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
|
||||
RaceDialogFragment fragment = new AbortTypeSelectionDialog();
|
||||
|
||||
Bundle args = getRecentArguments();
|
||||
fragment.setArguments(args);
|
||||
|
||||
fragment.show(fragmentManager, "dialogAPNovemberMode");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecallRemoval() {
|
||||
setIndividualRecallRemovedInView();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIndividualRecall() {
|
||||
setIndividualRecallDisplayedInView();
|
||||
}
|
||||
|
||||
private void setIndividualRecallDisplayedInView() {
|
||||
moveImageUp(individualRecallFlag);
|
||||
String unsetXray = getActivity().getResources().getString(R.string.choose_xray_flag_down);
|
||||
individualRecallLabel.setText(unsetXray);
|
||||
}
|
||||
|
||||
private void setIndividualRecallRemovedInView() {
|
||||
moveImageDown(individualRecallFlag);
|
||||
//setXrayCountdownLabel();
|
||||
String setIndividualRecallUp = getActivity().getResources().getString(R.string.choose_xray_flag_up);
|
||||
individualRecallLabel.setText(setIndividualRecallUp);
|
||||
}
|
||||
|
||||
protected void moveImageUp(ImageView image) {
|
||||
moveImage(image, 1, 0);
|
||||
}
|
||||
|
||||
protected void moveImageDown(ImageView image) {
|
||||
moveImage(image, 0, 1);
|
||||
}
|
||||
|
||||
protected void moveImage(ImageView image, int parentTop, int parentBottom) {
|
||||
LayoutParams params = (RelativeLayout.LayoutParams) image.getLayoutParams();
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, parentTop);
|
||||
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, parentBottom);
|
||||
image.setLayoutParams(params);
|
||||
}
|
||||
|
||||
}
|
||||
+10
-5
@@ -16,6 +16,7 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.LastFlagFinder;
|
||||
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;
|
||||
@@ -75,12 +76,16 @@ public class GateStartRunningRaceFragment extends RaceFragment implements GateSt
|
||||
|
||||
getRace().getState().getStartProcedure().setRunningRaceEventListener(this);
|
||||
|
||||
if(getRace().getState().getPathfinder()==null){
|
||||
showPathFinderDialog();
|
||||
}
|
||||
if(getRace().getState().getGateLineOpeningTime()==null){
|
||||
showLineOpeningTimeDialog();
|
||||
if(getRace().getState().getStartProcedure() instanceof GateStartProcedure){
|
||||
if(((GateStartProcedure) getRace().getState().getStartProcedure()).getPathfinder()==null){
|
||||
showPathFinderDialog();
|
||||
}
|
||||
if(((GateStartProcedure) getRace().getState().getStartProcedure()).getGateLineOpeningTime()==null){
|
||||
showLineOpeningTimeDialog();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void displayGolfFlag(boolean golfFlagDisplayed) {
|
||||
|
||||
+23
-9
@@ -22,6 +22,7 @@ import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartPhaseEventListener;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.AbortModeSelectionDialog;
|
||||
@@ -95,13 +96,19 @@ public class GateStartPhaseFragment extends RaceFragment implements GateStartPha
|
||||
pathFinderButton = (Button) getView().findViewById(R.id.pathFinderButton);
|
||||
lineOpeningTimeButton = (Button) getView().findViewById(R.id.lineOpeningTimeButton);
|
||||
pathfinderLabel = (TextView) getView().findViewById(R.id.pathfinderLabel);
|
||||
if(getRace().getState().getPathfinder()!=null){
|
||||
pathfinderLabel.setText(getRace().getState().getPathfinder());
|
||||
}
|
||||
lineOpeningTimeLabel = (TextView) getView().findViewById(R.id.lineOpeningTimeLabel);
|
||||
if(getRace().getState().getGateLineOpeningTime()!=null){
|
||||
lineOpeningTimeLabel.setText(String.valueOf(getRace().getState().getGateLineOpeningTime()/(60 * 1000))+" minutes");
|
||||
|
||||
if(getRace().getState().getStartProcedure() instanceof GateStartProcedure){
|
||||
GateStartProcedure gateStartProcedure = ((GateStartProcedure) getRace().getState().getStartProcedure());
|
||||
if(gateStartProcedure.getPathfinder()!=null){
|
||||
pathfinderLabel.setText(gateStartProcedure.getPathfinder());
|
||||
}
|
||||
if(gateStartProcedure.getGateLineOpeningTime()!=null){
|
||||
lineOpeningTimeLabel.setText(String.valueOf(gateStartProcedure.getGateLineOpeningTime()/(60 * 1000))+" minutes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pathFinderButton.setOnClickListener(new OnClickListener() {
|
||||
|
||||
public void onClick(View v) {
|
||||
@@ -233,15 +240,22 @@ public class GateStartPhaseFragment extends RaceFragment implements GateStartPha
|
||||
|
||||
@Override
|
||||
public void updatePathfinderLabel() {
|
||||
if (getRace().getState().getPathfinder() != null) {
|
||||
pathfinderLabel.setText(getRace().getState().getPathfinder());
|
||||
if (getRace().getState().getStartProcedure() instanceof GateStartProcedure) {
|
||||
GateStartProcedure gateStartProcedure = ((GateStartProcedure) getRace().getState().getStartProcedure());
|
||||
if (gateStartProcedure.getPathfinder() != null) {
|
||||
pathfinderLabel.setText(gateStartProcedure.getPathfinder());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateGateLineOpeningTimeLabel() {
|
||||
if (getRace().getState().getGateLineOpeningTime() != null) {
|
||||
lineOpeningTimeLabel.setText(String.valueOf(getRace().getState().getGateLineOpeningTime()/(60 * 1000))+" minutes");
|
||||
if (getRace().getState().getStartProcedure() instanceof GateStartProcedure) {
|
||||
GateStartProcedure gateStartProcedure = ((GateStartProcedure) getRace().getState().getStartProcedure());
|
||||
if (gateStartProcedure.getGateLineOpeningTime() != null) {
|
||||
lineOpeningTimeLabel.setText(String.valueOf(gateStartProcedure.getGateLineOpeningTime() / (60 * 1000))
|
||||
+ " minutes");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user