mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-28 14:57:12 +00:00
Merge branch 'master' into tw2015
This commit is contained in:
commit
6b661359f7
6 files changed
+72
-26
No files matched your search
+18
-22
@@ -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());
|
||||||
|
|||||||
+1
-1
@@ -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"/>
|
||||||
|
|||||||
+1
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-2
@@ -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() {
|
||||||
|
|||||||
+51
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user