diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index 514dbac3b93..1e4a99334b7 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -1464,7 +1464,13 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { private RaceLogEvent loadRaceLogProtestStartTimeEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List competitors, DBObject dbObject) { TimePoint protestStartTime = loadTimePoint(dbObject, FieldNames.RACE_LOG_PROTEST_START_TIME); - return new RaceLogProtestStartTimeEventImpl(createdAt, logicalTimePoint, author, id, passId, protestStartTime); + TimePoint protestEndTime = loadTimePoint(dbObject, FieldNames.RACE_LOG_PROTEST_END_TIME); + if (protestEndTime == null) { + // fallback old data + protestEndTime = protestStartTime.plus(Duration.ONE_MINUTE.times(90)); + } + TimeRange protestTime = new TimeRangeImpl(protestStartTime, protestEndTime); + return new RaceLogProtestStartTimeEventImpl(createdAt, logicalTimePoint, author, id, passId, protestTime); } private RaceLogEvent loadRaceLogStartProcedureChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author, diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java index 78175a56ade..29be4a55816 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java @@ -97,8 +97,8 @@ public enum FieldNames { WAYPOINT_PASSINGINSTRUCTIONS, CONTROLPOINT, CONTROLPOINT_CLASS, MARK_ID, MARK_COLOR, MARK_NAME, MARK_PATTERN, MARK_SHAPE, MARK_TYPE, CONTROLPOINT_VALUE, CONTROLPOINTWITHTWOMARKS_ID, CONTROLPOINTWITHTWOMARKS_NAME, CONTROLPOINTWITHTWOMARKS_LEFT, CONTROLPOINTWITHTWOMARKS_RIGHT, RACE_LOG_POSITIONED_COMPETITORS, RACE_LOG_PATHFINDER_ID, RACE_LOG_GATE_LINE_OPENING_TIME, RACE_LOG_GOLF_DOWN_TIME, RACE_LOG_START_PROCEDURE_TYPE, - RACE_LOG_PROTEST_START_TIME, RACE_LOG_COURSE_DESIGN_NAME, RACE_LOG_REVOKED_EVENT_ID, RACE_LOG_REVOKED_EVENT_TYPE, RACE_LOG_REVOKED_EVENT_SHORT_INFO, - RACE_LOG_REVOKED_REASON, RACE_LOG_DEVICE_MAPPING_EVENT_ID, + RACE_LOG_PROTEST_START_TIME, RACE_LOG_PROTEST_END_TIME, RACE_LOG_COURSE_DESIGN_NAME, RACE_LOG_REVOKED_EVENT_ID, RACE_LOG_REVOKED_EVENT_TYPE, + RACE_LOG_REVOKED_EVENT_SHORT_INFO, RACE_LOG_REVOKED_REASON, RACE_LOG_DEVICE_MAPPING_EVENT_ID, RACE_LOG_CLOSING_TIMEPOINT, TIMEPOINT_OF_FIXED_MARKPASSING, INDEX_OF_PASSED_WAYPOINT,INDEX_OF_FIRST_SUPPRESSED_WAYPOINT, MARK, RACE_LOG_COMPETITOR_ID, RACE_LOG_DEPDENDENT_ON_FLEET, RACE_LOG_DEPDENDENT_ON_RACECOLUMN, RACE_LOG_DEPDENDENT_ON_REGATTALIKE, RACE_LOG_START_TIME_DIFFERENCE_IN_MS, RACE_LOG_FINISHING_TIME_AS_MILLIS, diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 8e994a34922..2125d11ec08 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -924,7 +924,8 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { DBObject result = new BasicDBObject(); storeRaceLogEventProperties(event, result); result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogProtestStartTimeEvent.class.getSimpleName()); - storeTimePoint(event.getProtestStartTime(), result, FieldNames.RACE_LOG_PROTEST_START_TIME); + storeTimePoint(event.getProtestTime().from(), result, FieldNames.RACE_LOG_PROTEST_START_TIME); + storeTimePoint(event.getProtestTime().to(), result, FieldNames.RACE_LOG_PROTEST_END_TIME); return result; } diff --git a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/ProtestStartTimeFinderTest.java b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/ProtestStartTimeFinderTest.java index eb69169daee..a4e8eca1b2e 100644 --- a/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/ProtestStartTimeFinderTest.java +++ b/java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/analyzing/test/ProtestStartTimeFinderTest.java @@ -13,21 +13,21 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent; -import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ProtestStartTimeFinder; -import com.sap.sse.common.TimePoint; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ProtestTimeFinder; +import com.sap.sse.common.TimeRange; -public class ProtestStartTimeFinderTest extends PassAwareRaceLogAnalyzerTest { +public class ProtestStartTimeFinderTest extends PassAwareRaceLogAnalyzerTest { @Override - protected ProtestStartTimeFinder createAnalyzer(RaceLog raceLog) { - return new ProtestStartTimeFinder(raceLog); + protected ProtestTimeFinder createAnalyzer(RaceLog raceLog) { + return new ProtestTimeFinder(raceLog); } @Override protected TargetPair getTargetEventsAndResultForPassAwareTests(int passId, AbstractLogEventAuthor author) { RaceLogProtestStartTimeEvent event = createEvent(RaceLogProtestStartTimeEvent.class, 1, passId, author); - when(event.getProtestStartTime()).thenReturn(mock(TimePoint.class)); - return new TargetPair(Arrays.asList(event), event.getProtestStartTime()); + when(event.getProtestTime()).thenReturn(mock(TimeRange.class)); + return new TargetPair(Arrays.asList(event), event.getProtestTime()); } @Test @@ -40,13 +40,13 @@ public class ProtestStartTimeFinderTest extends PassAwareRaceLogAnalyzerTest { +public class ProtestTimeFinder extends RaceLogAnalyzer { - public ProtestStartTimeFinder(RaceLog raceLog) { + public ProtestTimeFinder(RaceLog raceLog) { super(raceLog); } @Override - protected TimePoint performAnalysis() { + protected TimeRange performAnalysis() { for (RaceLogEvent event : getPassEventsDescending()) { if (event instanceof RaceLogProtestStartTimeEvent) { - return ((RaceLogProtestStartTimeEvent) event).getProtestStartTime(); + RaceLogProtestStartTimeEvent protestEvent = (RaceLogProtestStartTimeEvent) event; + return protestEvent.getProtestTime(); } } return null; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java index 270d276792c..52a2fd089f4 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/impl/RaceLogProtestStartTimeEventImpl.java @@ -6,21 +6,23 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor; import com.sap.sailing.domain.abstractlog.race.RaceLogProtestStartTimeEvent; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; public class RaceLogProtestStartTimeEventImpl extends RaceLogEventImpl implements RaceLogProtestStartTimeEvent { private static final long serialVersionUID = -1800827552916395996L; - private final TimePoint protestStartTime; - + private final TimeRange protestTime; + public RaceLogProtestStartTimeEventImpl(TimePoint createdAt, TimePoint pTimePoint, AbstractLogEventAuthor author, - Serializable pId, int pPassId, TimePoint protestStartTime) { + Serializable pId, int pPassId, TimeRange protestTime) { super(createdAt, pTimePoint, author, pId, pPassId); - this.protestStartTime = protestStartTime; + assert protestTime != null && protestTime.from() != null && protestTime.to() != null; + this.protestTime = protestTime; } public RaceLogProtestStartTimeEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId, - TimePoint protestStartTime) { - this(now(), logicalTimePoint, author, randId(), pPassId, protestStartTime); + TimeRange protestTime) { + this(now(), logicalTimePoint, author, randId(), pPassId, protestTime); } @Override @@ -29,13 +31,13 @@ public class RaceLogProtestStartTimeEventImpl extends RaceLogEventImpl implement } @Override - public TimePoint getProtestStartTime() { - return protestStartTime; + public TimeRange getProtestTime() { + return protestTime; } @Override public String getShortInfo() { - return "protestStartTime=" + protestStartTime; + return "protestStartTime=" + protestTime.from() + ", protestEndTime=" + protestTime.to(); } } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java index 0b35b4d0b6f..fec6c05ab7e 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/RaceState.java @@ -19,6 +19,7 @@ import com.sap.sailing.domain.common.racelog.Flags; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; /** * Extension to the {@link ReadonlyRaceState} allowing write-access to the state of a race. @@ -142,9 +143,9 @@ public interface RaceState extends ReadonlyRaceState { void setFinishedTime(TimePoint now); /** - * Sets the protest (start) time. + * Sets the protest time. */ - void setProtestTime(TimePoint now, TimePoint protestStartTime); + void setProtestTime(TimePoint now, TimeRange protestTime); /** * Signals the abort of this race. diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/ReadonlyRaceState.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/ReadonlyRaceState.java index 52d346845c9..3b1649bfd03 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/ReadonlyRaceState.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/ReadonlyRaceState.java @@ -14,6 +14,7 @@ import com.sap.sailing.domain.base.configuration.RegattaConfiguration; import com.sap.sailing.domain.common.Wind; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; /** * This interface gives you reading access to the state of a race. You can query various properties of the race @@ -134,7 +135,7 @@ public interface ReadonlyRaceState extends RaceStateEventProcessor { /** * If there is a protest time set, returns the most recent one. Otherwise null. */ - TimePoint getProtestTime(); + TimeRange getProtestTime(); /** * If there is a course set, returns the most recent one. Otherwise null. diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java index 20b51d428f1..20501c69678 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/RaceStateImpl.java @@ -45,6 +45,7 @@ import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; /** * Write-enabled {@link RaceState}. @@ -169,8 +170,9 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState { } @Override - public void setProtestTime(TimePoint now, TimePoint timePoint) { - raceLog.add(new RaceLogProtestStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), timePoint)); + public void setProtestTime(TimePoint now, TimeRange protestTime) { + assert protestTime != null && protestTime.from() != null && protestTime.to() != null; + raceLog.add(new RaceLogProtestStartTimeEventImpl(now, author, raceLog.getCurrentPassId(), protestTime)); } @Override diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/ReadonlyRaceStateImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/ReadonlyRaceStateImpl.java index a8e31e0bea5..309815fb3de 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/ReadonlyRaceStateImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/impl/ReadonlyRaceStateImpl.java @@ -18,7 +18,7 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastPublishedCourseDesignFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastWindFixFinder; -import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ProtestStartTimeFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ProtestTimeFinder; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer; import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceStatusAnalyzer.Clock; @@ -42,6 +42,7 @@ import com.sap.sailing.domain.common.Wind; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; import com.sap.sse.common.Util; /** @@ -116,7 +117,7 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL private final StartTimeFinder startTimeAnalyzer; private final FinishingTimeFinder finishingTimeAnalyzer; private final FinishedTimeFinder finishedTimeAnalyzer; - private final ProtestStartTimeFinder protestTimeAnalyzer; + private final ProtestTimeFinder protestTimeAnalyzer; private final FinishPositioningListFinder finishPositioningListAnalyzer; private final ConfirmedFinishPositioningListFinder confirmedFinishPositioningListAnalyzer; @@ -141,7 +142,7 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL private StartTimeFinderResult cachedStartTimeFinderResult; private TimePoint cachedFinishingTime; private TimePoint cachedFinishedTime; - private TimePoint cachedProtestTime; + private TimeRange cachedProtest; private CompetitorResults cachedPositionedCompetitors; private CompetitorResults cachedConfirmedPositionedCompetitors; private CourseBase cachedCourseDesign; @@ -184,7 +185,7 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL this.startTimeAnalyzer = new StartTimeFinder(raceLogResolver, raceLog); this.finishingTimeAnalyzer = new FinishingTimeFinder(raceLog); this.finishedTimeAnalyzer = new FinishedTimeFinder(raceLog); - this.protestTimeAnalyzer = new ProtestStartTimeFinder(raceLog); + this.protestTimeAnalyzer = new ProtestTimeFinder(raceLog); this.finishPositioningListAnalyzer = new FinishPositioningListFinder(raceLog); this.confirmedFinishPositioningListAnalyzer = new ConfirmedFinishPositioningListFinder(raceLog); this.courseDesignerAnalyzer = new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ false); @@ -318,8 +319,8 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL } @Override - public TimePoint getProtestTime() { - return cachedProtestTime; + public TimeRange getProtestTime() { + return cachedProtest; } @Override @@ -459,9 +460,9 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL changedListeners.onFinishedTimeChanged(this); } - TimePoint protestTime = protestTimeAnalyzer.analyze(); - if (!Util.equalsWithNull(cachedProtestTime, protestTime)) { - cachedProtestTime = protestTime; + TimeRange protest = protestTimeAnalyzer.analyze(); + if (!Util.equalsWithNull(cachedProtest, protest)) { + cachedProtest = protest; changedListeners.onProtestTimeChanged(this); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/RaceContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/RaceContext.java index 80c8c500cb0..be4ba5cb018 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/RaceContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/RaceContext.java @@ -65,6 +65,7 @@ import com.sap.sailing.gwt.server.HomeServiceUtil; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.media.MediaType; @@ -287,8 +288,8 @@ public class RaceContext { } switch (state.getStatus()) { case FINISHED: - TimePoint protestStartTime = state.getProtestTime(); - if (protestStartTime != null) { + TimeRange protestTime = state.getProtestTime(); + if (protestTime != null) { lastUpperFlag = Flags.BRAVO; lastLowerFlag = Flags.NONE; lastFlagsAreDisplayed = true; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RaceDetailPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RaceDetailPanel.java index 15982eeea27..0fd289968aa 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RaceDetailPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RaceDetailPanel.java @@ -51,8 +51,10 @@ public class RaceDetailPanel extends SimplePanel { private final Label startDateLabel = new Label(); private final Label finishTimeLabel = new Label(); private final Label finishDurationLabel = new Label(); - private final Label protestTimeLabel = new Label(); - private final Label protestDateLabel = new Label(); + private final Label protestStartTimeLabel = new Label(); + private final Label protestFinishTimeLabel = new Label(); + private final Label protestStartDateLabel = new Label(); + private final Label protestFinishDateLabel = new Label(); private final Label updateTimeLabel = new Label(); private final Label updateDateLabel = new Label(); private final Label vesselPositionLabel = new Label(); @@ -88,17 +90,20 @@ public class RaceDetailPanel extends SimplePanel { int cellSpacing = 3; - Grid basicsGrid = new Grid(3, 3); + Grid basicsGrid = new Grid(4, 3); basicsGrid.setCellSpacing(cellSpacing); basicsGrid.setWidget(0, 0, new Label(stringMessages.startAt())); basicsGrid.setWidget(1, 0, new Label(stringMessages.finishAt())); - basicsGrid.setWidget(2, 0, new Label(stringMessages.protestEndsAt())); + basicsGrid.setWidget(2, 0, new Label(stringMessages.protestStartsAt())); + basicsGrid.setWidget(3, 0, new Label(stringMessages.protestEndsAt())); basicsGrid.setWidget(0, 1, startTimeLabel); basicsGrid.setWidget(1, 1, finishTimeLabel); - basicsGrid.setWidget(2, 1, protestTimeLabel); + basicsGrid.setWidget(2, 1, protestStartTimeLabel); + basicsGrid.setWidget(3, 1, protestFinishTimeLabel); basicsGrid.setWidget(0, 2, startDateLabel); basicsGrid.setWidget(1, 2, finishDurationLabel); - basicsGrid.setWidget(2, 2, protestDateLabel); + basicsGrid.setWidget(2, 2, protestStartDateLabel); + basicsGrid.setWidget(3, 2, protestFinishDateLabel); Grid managementGrid = new Grid(3, 3); managementGrid.setCellSpacing(cellSpacing); @@ -167,13 +172,21 @@ public class RaceDetailPanel extends SimplePanel { } finishDurationLabel.setText(finishDurationText); - String protestTimeText = data.raceInfo.protestFinishTime == null ? "-" : timeFormatter - .format(data.raceInfo.protestFinishTime); - protestTimeLabel.setText(protestTimeText); + String protestStartTimeText = data.raceInfo.protestStartTime == null ? "-" : timeFormatter + .format(data.raceInfo.protestStartTime); + protestStartTimeLabel.setText(protestStartTimeText); - String protestDateText = data.raceInfo.protestFinishTime == null ? "" : dateFormatter + String protestFinishTimeText = data.raceInfo.protestFinishTime == null ? "-" : timeFormatter .format(data.raceInfo.protestFinishTime); - protestDateLabel.setText(protestDateText); + protestFinishTimeLabel.setText(protestFinishTimeText); + + String protestStartDateText = data.raceInfo.protestStartTime == null ? "" : dateFormatter + .format(data.raceInfo.protestStartTime); + protestStartDateLabel.setText(protestStartDateText); + + String protestFinishDateText = data.raceInfo.protestFinishTime == null ? "" : dateFormatter + .format(data.raceInfo.protestFinishTime); + protestFinishDateLabel.setText(protestFinishDateText); String updateTimeText = data.raceInfo.lastUpdateTime == null ? "-" : timeFormatter .format(data.raceInfo.lastUpdateTime); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaOverviewEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaOverviewEntryPoint.java index 00827fb9fa8..08e1ff9a5da 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaOverviewEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaOverviewEntryPoint.java @@ -83,9 +83,8 @@ public class RegattaOverviewEntryPoint extends AbstractSailingEntryPoint { } private void toggleDetailPanel(boolean visibile) { - containerPanel.setWidgetSize(detailPanel, visibile ? 110 : 0); + containerPanel.setWidgetSize(detailPanel, visibile ? 125 : 0); containerPanel.animate(500); - // containerPanel.setWidgetHidden(detailPanel, !visibile); } private void createAndAddRegattaPanel(UUID eventId, boolean ignoreLocalSettings) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index b3fabd259e2..97cfbdaa895 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -811,6 +811,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, String showingDetailsOfRace(String raceName); String startAt(); String finishAt(); + String protestStartsAt(); String protestEndsAt(); String unknown(); String raceLog(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 67f1ad8ea60..67160bcc642 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -793,6 +793,7 @@ earlyStarters=Early starters showingDetailsOfRace=Showing details for race {0} startAt=Start at finishAt=Finish at +protestStartsAt=Protest starts at protestEndsAt=Protest ends at unknown=Unknown raceLog=Race log diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 69c4f8183c7..71d212ee68e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -786,6 +786,7 @@ earlyStarters=Frühstarter showingDetailsOfRace=Informationen zu Rennen {0} startAt=Start finishAt=Rennende +protestStartsAt=Protestzeit beginnt protestEndsAt=Protestzeit endet unknown=Unbekannt raceLog=RaceLog diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index c9af96ba985..40b27eda333 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -943,14 +943,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } if (raceInfoDTO.lastStatus.equals(RaceLogRaceStatus.FINISHED)) { - TimePoint protestStartTime = state.getProtestTime(); - if (protestStartTime != null) { - final Duration protestDuration = Duration.ONE_MINUTE.times(90); // 90 min protest duration; see bug 3089 (make protest time variable) - raceInfoDTO.protestFinishTime = protestStartTime.plus(protestDuration).asDate(); - raceInfoDTO.lastUpperFlag = Flags.BRAVO; - raceInfoDTO.lastLowerFlag = Flags.NONE; - raceInfoDTO.lastFlagsAreDisplayed = true; - raceInfoDTO.lastFlagsDisplayedStateChanged = true; + if (state.getProtestTime() != null) { + final TimePoint protestEndTime = state.getProtestTime().to(); + if (protestEndTime != null) { + final TimePoint protestStartTime = state.getProtestTime().from(); + raceInfoDTO.protestStartTime = protestStartTime == null ? null : protestStartTime.asDate(); + raceInfoDTO.protestFinishTime = protestEndTime.asDate(); + raceInfoDTO.lastUpperFlag = Flags.BRAVO; + raceInfoDTO.lastLowerFlag = Flags.NONE; + raceInfoDTO.lastFlagsAreDisplayed = true; + raceInfoDTO.lastFlagsDisplayedStateChanged = true; + } } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInfoDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInfoDTO.java index ae94b366c50..bb7d97c8bc9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInfoDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceInfoDTO.java @@ -45,6 +45,7 @@ public class RaceInfoDTO implements IsSerializable { public RaceLogRaceStatus lastStatus; public Date startTime; public Date finishedTime; + public Date protestStartTime; public Date protestFinishTime; public Date lastUpdateTime; public Flags lastUpperFlag; diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/home/solutions/RaceCommitteeAppNotes.html b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/home/solutions/RaceCommitteeAppNotes.html index b2cfb785b4e..397156acd74 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/home/solutions/RaceCommitteeAppNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/home/solutions/RaceCommitteeAppNotes.html @@ -4,6 +4,14 @@

What's New - SAP Sailing Race Manager

+
November 2016
+ +
    +
  • The protest time is now more configurable. You can set the start time and + the duration. The default protest duration is 90 min and the last duration is + stored in the settings, so you don't need to change it the next time.
  • +
+
October 2016
    diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestRaceLogRemovalInRegatta.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestRaceLogRemovalInRegatta.java index ecf424c8071..965f1e5bf81 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestRaceLogRemovalInRegatta.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestRaceLogRemovalInRegatta.java @@ -17,8 +17,11 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.base.impl.FleetImpl; +import com.sap.sse.common.Duration; +import com.sap.sse.common.TimeRange; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.common.impl.TimeRangeImpl; public class TestRaceLogRemovalInRegatta extends AbstractTestStoringAndRetrievingRaceLogInRegatta { private final String blueFleetName = "Blue"; @@ -51,7 +54,8 @@ public class TestRaceLogRemovalInRegatta extends AbstractTestStoringAndRetrievin Fleet blueFleet = qualification.getFleetByName(blueFleetName); RaceLog yellowLog = qualification.getRaceColumnByName(raceColumnName).getRaceLog(yellowFleet); RaceLog blueLog = qualification.getRaceColumnByName(raceColumnName).getRaceLog(blueFleet); - RaceLogProtestStartTimeEvent expectedEventYellow = new RaceLogProtestStartTimeEventImpl(now, author, 0, MillisecondsTimePoint.now()); + TimeRange protestTime = new TimeRangeImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now().plus(Duration.ONE_MINUTE.times(90))); + RaceLogProtestStartTimeEvent expectedEventYellow = new RaceLogProtestStartTimeEventImpl(now, author, 0, protestTime); yellowLog.add(expectedEventYellow); RaceLogStartTimeEvent expectedEventBlue = new RaceLogStartTimeEventImpl(now, author, 0, MillisecondsTimePoint.now()); blueLog.add(expectedEventBlue); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java index 519b83672b6..e0079a1f993 100644 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java @@ -81,8 +81,10 @@ import com.sap.sailing.server.impl.RacingEventServiceImpl; import com.sap.sse.common.Color; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.common.impl.TimeRangeImpl; public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoDBTest { @@ -121,8 +123,10 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD } @Test - public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogProtestStartTimeEvent() { - RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, MillisecondsTimePoint.now()); + public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogProtestStartTimeEvent() { + TimePoint now = MillisecondsTimePoint.now(); + TimeRange protestTime = new TimeRangeImpl(now, now.plus(Duration.ONE_MINUTE.times(90))); + RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, protestTime); addAndStoreRaceLogEvent(leaderboard, raceColumnName, expectedEvent); RaceLog loadedRaceLog = retrieveRaceLog(); loadedRaceLog.lockForRead(); @@ -132,7 +136,8 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD assertEquals(expectedEvent.getLogicalTimePoint(), actualEvent.getLogicalTimePoint()); assertEquals(expectedEvent.getPassId(), actualEvent.getPassId()); assertEquals(expectedEvent.getId(), actualEvent.getId()); - assertEquals(expectedEvent.getProtestStartTime(), actualEvent.getProtestStartTime()); + assertEquals(expectedEvent.getProtestTime().from(), actualEvent.getProtestTime().from()); + assertEquals(expectedEvent.getProtestTime().to(), actualEvent.getProtestTime().to()); assertEquals(1, Util.size(loadedRaceLog.getFixes())); } finally { loadedRaceLog.unlockAfterRead(); @@ -141,7 +146,9 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD @Test public void testThatRemoveRaceColumnAlsoRemovesPersistentRaceLog() { - RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, MillisecondsTimePoint.now()); + TimePoint now = MillisecondsTimePoint.now(); + TimeRange protestTime = new TimeRangeImpl(now, now.plus(Duration.ONE_MINUTE.times(90))); + RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, protestTime); Fleet defaultFleet = leaderboard.getFleet(null); RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); raceColumn.getRaceLog(defaultFleet).add(expectedEvent); @@ -167,7 +174,9 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD when(service.getMongoObjectFactory()).thenReturn(mongoObjectFactory); when(service.getLeaderboardByName(leaderboardName)).thenReturn(leaderboard); doCallRealMethod().when(service).renameLeaderboardColumn(Matchers.anyString(), Matchers.anyString(), Matchers.anyString()); - RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, MillisecondsTimePoint.now()); + TimePoint now = MillisecondsTimePoint.now(); + TimeRange protestTime = new TimeRangeImpl(now, now.plus(Duration.ONE_MINUTE.times(90))); + RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, protestTime); Fleet defaultFleet = leaderboard.getFleet(null); RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName); raceColumn.getRaceLog(defaultFleet).add(expectedEvent); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java index 8d7d476a755..c740139a6be 100644 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInRegatta.java @@ -63,8 +63,12 @@ import com.sap.sailing.domain.persistence.impl.FieldNames; import com.sap.sailing.domain.persistence.impl.MongoObjectFactoryImpl; import com.sap.sailing.domain.persistence.impl.TripleSerializer; import com.sap.sse.common.Color; +import com.sap.sse.common.Duration; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.common.impl.TimeRangeImpl; public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStoringAndRetrievingRaceLogInRegatta { public TestStoringAndRetrievingRaceLogInRegatta() throws UnknownHostException, MongoException { @@ -96,8 +100,10 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin } @Test - public void testStoreAndRetrieveRegattaWithRaceLogProtestStartTimeEvent() { - RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, MillisecondsTimePoint.now()); + public void testStoreAndRetrieveRegattaWithRaceLogProtestStartTimeEvent() { + TimePoint now = MillisecondsTimePoint.now(); + TimeRange protestTime = new TimeRangeImpl(now, now.plus(Duration.ONE_MINUTE.times(90))); + RaceLogProtestStartTimeEvent expectedEvent = new RaceLogProtestStartTimeEventImpl(now, author, 0, protestTime); addAndStoreRaceLogEvent(regatta, raceColumnName, expectedEvent); RaceLog loadedRaceLog = retrieveRaceLog(); loadedRaceLog.lockForRead(); @@ -107,7 +113,8 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin assertEquals(expectedEvent.getLogicalTimePoint(), actualEvent.getLogicalTimePoint()); assertEquals(expectedEvent.getPassId(), actualEvent.getPassId()); assertEquals(expectedEvent.getId(), actualEvent.getId()); - assertEquals(expectedEvent.getProtestStartTime(), actualEvent.getProtestStartTime()); + assertEquals(expectedEvent.getProtestTime().from(), actualEvent.getProtestTime().from()); + assertEquals(expectedEvent.getProtestTime().to(), actualEvent.getProtestTime().to()); assertEquals(1, Util.size(loadedRaceLog.getFixes())); } finally { loadedRaceLog.unlockAfterRead(); diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogProtestStartTimeEventDeserializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogProtestStartTimeEventDeserializer.java index 7fb40c04455..79c8e6c297b 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogProtestStartTimeEventDeserializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/deserialization/racelog/impl/RaceLogProtestStartTimeEventDeserializer.java @@ -13,7 +13,9 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializationExcepti import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogProtestStartTimeEventSerializer; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.TimeRange; import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.common.impl.TimeRangeImpl; public class RaceLogProtestStartTimeEventDeserializer extends BaseRaceLogEventDeserializer { @@ -24,9 +26,10 @@ public class RaceLogProtestStartTimeEventDeserializer extends BaseRaceLogEventDe @Override protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint createdAt, AbstractLogEventAuthor author, TimePoint timePoint, int passId, List competitors) throws JsonDeserializationException { - Long protestStartTime = (Long) object.get(RaceLogProtestStartTimeEventSerializer.FIELD_PROTEST_START_TIME); - return new RaceLogProtestStartTimeEventImpl(createdAt, timePoint, author, id, - passId, new MillisecondsTimePoint(protestStartTime)); + Long protestStart = (Long) object.get(RaceLogProtestStartTimeEventSerializer.FIELD_PROTEST_START_TIME); + Long protestEnd = (Long) object.get(RaceLogProtestStartTimeEventSerializer.FIELD_PROTEST_END_TIME); + TimeRange protestTime = new TimeRangeImpl(new MillisecondsTimePoint(protestStart), new MillisecondsTimePoint(protestEnd)); + return new RaceLogProtestStartTimeEventImpl(createdAt, timePoint, author, id, passId, protestTime); } } diff --git a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogProtestStartTimeEventSerializer.java b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogProtestStartTimeEventSerializer.java index b3811356b98..77b8ab053b3 100644 --- a/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogProtestStartTimeEventSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization.shared.android/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogProtestStartTimeEventSerializer.java @@ -11,6 +11,7 @@ public class RaceLogProtestStartTimeEventSerializer extends BaseRaceLogEventSeri public static final String VALUE_CLASS = RaceLogProtestStartTimeEvent.class.getSimpleName(); public static final String FIELD_PROTEST_START_TIME = "protestStartTime"; + public static final String FIELD_PROTEST_END_TIME = "protestEndTime"; public RaceLogProtestStartTimeEventSerializer(JsonSerializer competitorSerializer) { super(competitorSerializer); @@ -25,7 +26,8 @@ public class RaceLogProtestStartTimeEventSerializer extends BaseRaceLogEventSeri public JSONObject serialize(RaceLogEvent object) { RaceLogProtestStartTimeEvent event = (RaceLogProtestStartTimeEvent) object; JSONObject result = super.serialize(event); - result.put(FIELD_PROTEST_START_TIME, event.getProtestStartTime().asMillis()); + result.put(FIELD_PROTEST_START_TIME, event.getProtestTime().from().asMillis()); + result.put(FIELD_PROTEST_END_TIME, event.getProtestTime().to().asMillis()); return result; } diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_duration.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_duration.xml new file mode 100644 index 00000000000..1c57a96e505 --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_duration.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_dialog.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_dialog.xml index d986bfd0dbd..77f70855604 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_dialog.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_dialog.xml @@ -1,6 +1,6 @@ - + android:verticalSpacing="2dp" /> - + android:orientation="vertical"> - - + android:layout_marginLeft="@dimen/default_margin_twice" + android:paddingLeft="@dimen/default_padding" + android:paddingRight="@dimen/default_padding" + android:scaleX="@integer/picker_scale" + android:scaleY="@integer/picker_scale"> + + + + + + + + + + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml index 879244f0be1..71673dc88c1 100644 --- a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml @@ -1,6 +1,5 @@ - + android:src="?attr/chevron_left_24dp" /> + android:textAppearance="?attr/textHeader" /> + android:background="?attr/black" /> + android:background="?attr/sap_gray" />