Merge branch 'master' into tw2015

This commit is contained in:
Axel Uhl committed 2015-07-18 17:58:30 +02:00
commit 6b661359f7
6 files changed
+72 -26

No files matched your search

@@ -1196,10 +1196,10 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
// this only works because the quickRanks are sorted // this only works because the quickRanks are sorted
for (Entry<CompetitorDTO, Integer> competitorsByWindwardDistanceTraveledAndOneBasedLegNumber : for (Entry<CompetitorDTO, Integer> competitorsByWindwardDistanceTraveledAndOneBasedLegNumber :
competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber.entrySet()) { competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber.entrySet()) {
if (Util.contains(competitorsToShow, competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey())) { if (Util.contains(competitorsToShow, competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey()) &&
competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue() != null) {
leadingCompetitorDTO = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey(); leadingCompetitorDTO = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey();
legOfLeaderCompetitor = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue() == null ? legOfLeaderCompetitor = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue();
0 : competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue();
return new com.sap.sse.common.Util.Pair<Integer, CompetitorDTO>(legOfLeaderCompetitor, leadingCompetitorDTO); return new com.sap.sse.common.Util.Pair<Integer, CompetitorDTO>(legOfLeaderCompetitor, leadingCompetitorDTO);
} }
} }
@@ -1378,14 +1378,12 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
private void showStartAndFinishAndCourseMiddleLines(final CoursePositionsDTO courseDTO) { private void showStartAndFinishAndCourseMiddleLines(final CoursePositionsDTO courseDTO) {
if (map != null && courseDTO != null && courseDTO.course != null && courseDTO.course.waypoints != null && if (map != null && courseDTO != null && courseDTO.course != null && courseDTO.course.waypoints != null &&
!courseDTO.course.waypoints.isEmpty()) { !courseDTO.course.waypoints.isEmpty()) {
com.sap.sse.common.Util.Pair<Integer, CompetitorDTO> leadingVisibleCompetitorInfo = getFarthestAheadVisibleCompetitorWithOneBasedLegNumber(getCompetitorsToShow());
int oneBasedLegOfLeadingCompetitor = leadingVisibleCompetitorInfo == null ? -1 : leadingVisibleCompetitorInfo.getA();
int numberOfLegs = courseDTO.course.waypoints.size()-1;
// draw the start line // draw the start line
final WaypointDTO startWaypoint = courseDTO.course.waypoints.get(0); final WaypointDTO startWaypoint = courseDTO.course.waypoints.get(0);
updateCountdownCanvas(startWaypoint); updateCountdownCanvas(startWaypoint);
final Position startLineLeftPosition = courseDTO.getStartMarkPositions().get(0); final int numberOfStartWaypointMarks = courseDTO.getStartMarkPositions() == null ? 0 : courseDTO.getStartMarkPositions().size();
final Position startLineRightPosition = courseDTO.getStartMarkPositions().get(1); final Position startLineLeftPosition = numberOfStartWaypointMarks == 0 ? null : courseDTO.getStartMarkPositions().get(0);
final Position startLineRightPosition = numberOfStartWaypointMarks < 2 ? null : courseDTO.getStartMarkPositions().get(1);
if (courseDTO.startLineAngleToCombinedWind != null) { if (courseDTO.startLineAngleToCombinedWind != null) {
startLineAdvantageText.replace(0, startLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage( startLineAdvantageText.replace(0, startLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage(
NumberFormat.getFormat("0.0").format(courseDTO.startLineLengthInMeters), NumberFormat.getFormat("0.0").format(courseDTO.startLineLengthInMeters),
@@ -1395,19 +1393,16 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
} else { } else {
startLineAdvantageText.delete(0, startLineAdvantageText.length()); startLineAdvantageText.delete(0, startLineAdvantageText.length());
} }
startLine = showOrRemoveOrUpdateLine(startLine, /* showLine */ courseDTO.getStartMarkPositions() != null && startLine = showOrRemoveOrUpdateLine(startLine, /* showLine */ numberOfStartWaypointMarks == 2 &&
courseDTO.getStartMarkPositions().size() == 2 && ((courseDTO.currentLegNumber <= 1 &&
((oneBasedLegOfLeadingCompetitor <= 1 && settings.getHelpLinesSettings().isVisible(HelpLineTypes.STARTLINE)) ||
settings.getHelpLinesSettings().isVisible(HelpLineTypes.STARTLINE)) ||
settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY)), settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY)),
startLineLeftPosition, startLineRightPosition, startLineInfoProvider, "#ffffff"); startLineLeftPosition, startLineRightPosition, startLineInfoProvider, "#ffffff");
// TODO bug3027: show SmallTransparentInfoOverlay in addition to tooltip if course geometry option is true; remove it if option is false
// TODO bug3027: show *all* course middle lines if course geometry option is true
// draw the finish line // draw the finish line
final Position finishLineLeftPosition = courseDTO.getFinishMarkPositions().get(0); final int numberOfFinishWaypointMarks = courseDTO.getFinishMarkPositions() == null ? 0 : courseDTO.getFinishMarkPositions().size();
final Position finishLineRightPosition = courseDTO.getFinishMarkPositions().get(1); final Position finishLineLeftPosition = numberOfFinishWaypointMarks == 0 ? null : courseDTO.getFinishMarkPositions().get(0);
if (courseDTO.startLineAngleToCombinedWind != null) { final Position finishLineRightPosition = numberOfFinishWaypointMarks < 2 ? null : courseDTO.getFinishMarkPositions().get(1);
if (courseDTO.finishLineAngleToCombinedWind != null) {
finishLineAdvantageText.replace(0, finishLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage( finishLineAdvantageText.replace(0, finishLineAdvantageText.length(), " "+stringMessages.lineAngleToWindAndAdvantage(
NumberFormat.getFormat("0.0").format(courseDTO.finishLineLengthInMeters), NumberFormat.getFormat("0.0").format(courseDTO.finishLineLengthInMeters),
NumberFormat.getFormat("0.0").format(Math.abs(courseDTO.finishLineAngleToCombinedWind)), NumberFormat.getFormat("0.0").format(Math.abs(courseDTO.finishLineAngleToCombinedWind)),
@@ -1416,8 +1411,9 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
} else { } else {
finishLineAdvantageText.delete(0, finishLineAdvantageText.length()); finishLineAdvantageText.delete(0, finishLineAdvantageText.length());
} }
finishLine = showOrRemoveOrUpdateLine(finishLine, /* showLine */ courseDTO.getFinishMarkPositions() != null && courseDTO.getFinishMarkPositions().size() == 2 && finishLine = showOrRemoveOrUpdateLine(finishLine, /* showLine */ numberOfFinishWaypointMarks == 2 &&
(oneBasedLegOfLeadingCompetitor > 0 && oneBasedLegOfLeadingCompetitor == numberOfLegs && settings.getHelpLinesSettings().isVisible(HelpLineTypes.FINISHLINE)) (courseDTO.currentLegNumber == courseDTO.totalLegsCount &&
settings.getHelpLinesSettings().isVisible(HelpLineTypes.FINISHLINE))
|| settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY), || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY),
finishLineLeftPosition, finishLineRightPosition, finishLineInfoProvider, "#000000"); finishLineLeftPosition, finishLineRightPosition, finishLineInfoProvider, "#000000");
// the control point pairs for which we already decided whether or not // the control point pairs for which we already decided whether or not
@@ -1430,8 +1426,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
boolean showCourseMiddleLine = keysAlreadyHandled.containsKey(key) && keysAlreadyHandled.get(key).getA() || boolean showCourseMiddleLine = keysAlreadyHandled.containsKey(key) && keysAlreadyHandled.get(key).getA() ||
settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY) || settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEGEOMETRY) ||
(settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEMIDDLELINE) (settings.getHelpLinesSettings().isVisible(HelpLineTypes.COURSEMIDDLELINE)
&& oneBasedLegOfLeadingCompetitor > 0 && courseDTO.currentLegNumber > 0
&& oneBasedLegOfLeadingCompetitor-1 == zeroBasedIndexOfStartWaypoint); && courseDTO.currentLegNumber-1 == zeroBasedIndexOfStartWaypoint);
keysAlreadyHandled.put(key, new Pair<>(showCourseMiddleLine, zeroBasedIndexOfStartWaypoint)); keysAlreadyHandled.put(key, new Pair<>(showCourseMiddleLine, zeroBasedIndexOfStartWaypoint));
} }
Set<Set<ControlPointDTO>> keysToConsider = new HashSet<>(keysAlreadyHandled.keySet()); Set<Set<ControlPointDTO>> keysToConsider = new HashSet<>(keysAlreadyHandled.keySet());
@@ -26,7 +26,7 @@ public class SimpleCompetitorDTO extends NamedDTO implements Serializable {
final Nationality nationality = competitor.getTeam().getNationality(); final Nationality nationality = competitor.getTeam().getNationality();
CountryCode countryCode = nationality == null ? null : nationality.getCountryCode(); CountryCode countryCode = nationality == null ? null : nationality.getCountryCode();
this.sailID = competitor.getBoat().getSailID(); this.sailID = competitor.getBoat().getSailID();
this.twoLetterIsoCountryCode = countryCode.getTwoLetterISOCode(); this.twoLetterIsoCountryCode = countryCode == null ? null : countryCode.getTwoLetterISOCode();
this.flagImageURL = competitor.getFlagImage() == null ? null : competitor.getFlagImage().toString(); this.flagImageURL = competitor.getFlagImage() == null ? null : competitor.getFlagImage().toString();
} }
@@ -10,7 +10,7 @@
android:defaultValue="@string/empty" android:defaultValue="@string/empty"
android:key="@string/preference_identifier_key" android:key="@string/preference_identifier_key"
android:title="@string/device_identifier"/> android:title="@string/device_identifier"/>
<EditTextPreference <com.sap.sailing.racecommittee.app.ui.views.UrlEditTextPreference
android:defaultValue="@string/preference_server_url_default" android:defaultValue="@string/preference_server_url_default"
android:key="@string/preference_server_url_key" android:key="@string/preference_server_url_key"
android:title="@string/settings_advanced_service_header"/> android:title="@string/settings_advanced_service_header"/>
@@ -250,6 +250,7 @@ public class AppPreferences {
if (value.equals("")) { if (value.equals("")) {
return "http://localhost:8889"; return "http://localhost:8889";
} }
return value; return value;
} }
@@ -88,8 +88,6 @@ public class GeneralPreferenceFragment extends BasePreferenceFragment {
setupServerUrlBox(); setupServerUrlBox();
setupSyncQRCodeButton(); setupSyncQRCodeButton();
setupForceUpdateButton(); setupForceUpdateButton();
bindPreferenceSummaryToValue(findPreference(R.string.preference_server_url_key));
} }
private void setupIdentifierBox() { private void setupIdentifierBox() {
@@ -0,0 +1,51 @@
package com.sap.sailing.racecommittee.app.ui.views;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.preference.EditTextPreference;
import android.util.AttributeSet;
public class UrlEditTextPreference extends EditTextPreference {
public UrlEditTextPreference(Context context) {
super(context);
}
public UrlEditTextPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UrlEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public UrlEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void setText(String text) {
super.setText(normalizeUrl(text));
}
private String normalizeUrl(String url) {
// add missing protocol
if (!url.startsWith("http://") && !url.startsWith("https://")) {
url = "http://" + url;
}
// remove trailing slash
if (url.endsWith("/")) {
url = url.substring(0, url.length() - 1);
}
return url;
}
@Override
public CharSequence getSummary() {
return getText();
}
}