Merge branch 'browser-detection'

This commit is contained in:
Axel Uhl committed 2012-07-30 15:44:26 +02:00
commit dd87237331
17 files changed
+254 -55

No files matched your search

+1
View File
@@ -6,3 +6,4 @@
manifest.txt
java/com.sap.sailing.gwt.ui/gwt-unitCache/*
java/com.sap.sailing.gwt.ui/war/WEB-INF/deploy/*
sailing_debug0*
@@ -0,0 +1,28 @@
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!-- -->
<!-- Consider inlining CSS to reduce the number of requested files -->
<!-- -->
<link rel="shortcut icon" type="image/x-icon" href="images/sap.ico" />
<link href="CommonControls.css" rel="stylesheet" type="text/css">
<!-- -->
<!-- Any title is fine -->
<!-- -->
<title>Your browser is unsupported</title>
</head>
<!-- -->
<!-- The body can have arbitrary html, or -->
<!-- you can leave the body empty if you want -->
<!-- to create a completely dynamic UI. -->
<!-- -->
<body>
<b>Your browser is unsupported.</b>
</body>
</html>
@@ -26,6 +26,9 @@
<!-- -->
<title>SAP Sailing Analytics Spectator Vision</title>
<!-- Browser detection -->
<script type="text/javascript" src="detection.js"></script>
<!-- -->
<!-- This script loads your compiled module. -->
<!-- If you add any GWT meta tags, they must -->
@@ -18,7 +18,6 @@ import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
@@ -26,7 +25,7 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
private HTML serverResponseLabel;
private Button dialogCloseButton;
protected StringMessages stringMessages;
protected UserAgentTypes userAgentType;
protected UserAgentDetails userAgent;
/**
* Create a remote service proxy to talk to the server-side sailing service.
@@ -48,8 +47,14 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
@Override
public void onModuleLoad() {
stringMessages = GWT.create(StringMessages.class);
errorDialogBox = createErrorDialog();
userAgentType = UserAgentChecker.INSTANCE.checkUserAgent(Window.Navigator.getUserAgent());
errorDialogBox = createErrorDialog(); /* TODO: Make this more generic (e.g. make it support all kinds of messages) */
userAgent = new UserAgentDetails(Window.Navigator.getUserAgent());
/* throw warning using alert if browser is unsupported */
if (!UserAgentChecker.INSTANCE.isUserAgentSupported(userAgent)) {
Window.alert(stringMessages.warningBrowserUnsupported());
}
ServiceDefTarget sailingServiceDef = (ServiceDefTarget) sailingService;
ServiceDefTarget userManagementServiceDef = (ServiceDefTarget) userManagementService;
String moduleBaseURL = GWT.getModuleBaseURL();
@@ -79,7 +84,6 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
public void createErrorPage(String message) {
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
RootPanel.get().add(logoAndTitlePanel);
RootPanel.get().add(new Label(message));
}
@@ -362,4 +362,5 @@ public interface StringMessages extends Messages {
String errorAddingFragUrl(String message);
String errorTryingToObtainLeaderboardContents(String message);
String lastScoreUpdate();
}
String warningBrowserUnsupported();
}
@@ -359,5 +359,10 @@ errorRemovingFregUrls=Error removing FREG URLs: {0}
pleaseEnterNonEmptyUrl=Please enter a non-empty URL
addFragUrl=Add FRAG Result URL
errorAddingFragUrl=Error adding FRAG URL: {0}
<<<<<<< HEAD
errorTryingToObtainLeaderboardContents=Error trying to obtain leaderboard contents: {0}
lastScoreUpdate=Last score update
lastScoreUpdate=Last score update
warningBrowserUnsupported=Your browser is currently not supported. Please switch to a newer one.
=======
warningBrowserUnsupported=Your browser is currently not supported. Please switch to a newer one.
>>>>>>> 90ad44fb95bfbb183e3fd7f3ecac4713904fcb0b
@@ -360,5 +360,10 @@ errorRemovingFregUrls=Fehler beim Löschen von FREG URLs: {0}
pleaseEnterNonEmptyUrl=Bitte eine nicht-leere URL eingeben
addFragUrl=FRAG Ergebnis-URL hinzufügen
errorAddingFragUrl=Fehler beim Hinzufügen einer FREG URL: {0}
<<<<<<< HEAD
errorTryingToObtainLeaderboardContents=Fehler beim Berechnen der Ergebnisliste: {0}
lastScoreUpdate=Letzte Ergebnisänderung
lastScoreUpdate=Letzte Ergebnisänderung
warningBrowserUnsupported=Ihr Browser wird nicht unterstützt. Wir empfehlen den Firefox in der neuesten Version.
=======
warningBrowserUnsupported=Ihr Browser wird nicht unterstützt. Wir empfehlen den Firefox in der neuesten Version.
>>>>>>> 90ad44fb95bfbb183e3fd7f3ecac4713904fcb0b
@@ -2,10 +2,14 @@ package com.sap.sailing.gwt.ui.client;
public interface UserAgentChecker {
public enum UserAgentTypes{ DESKTOP, MOBILE, UNKNOWN }
public final UserAgentCheckerImpl INSTANCE = new UserAgentCheckerImpl();
public UserAgentTypes checkUserAgent(String userAgent);
/**
* Returns false if the given userAgent is not supported.
*
* @param userAgent the user agent string as provided by Window.Navigator.getUserAgent()
* @return true if the agent is supported
*/
public boolean isUserAgentSupported(UserAgentDetails details);
}
@@ -1,25 +1,31 @@
package com.sap.sailing.gwt.ui.client;
import java.util.HashMap;
import com.sap.sailing.gwt.ui.client.UserAgentDetails.AgentTypes;
public class UserAgentCheckerImpl implements UserAgentChecker {
private static final String[] MOBILE_SPECIFIC_SUBSTRING = { "iPhone", "Android", "MIDP", "Opera Mobi", "iPad",
"Opera Mini", "BlackBerry", "HP iPAQ", "IEMobile", "MSIEMobile", "Windows Phone", "HTC", "LG", "MOT",
"Nokia", "Symbian", "Fennec", "Maemo", "Tear", "Midori", "armv", "Windows CE", "WindowsCE", "Smartphone",
"240x320", "176x220", "320x320", "160x160", "webOS", "Palm", "Sagem", "Samsung", "SGH", "SIE",
"SonyEricsson", "MMP", "UCWEB" };
@Override
public UserAgentTypes checkUserAgent(String userAgent) {
UserAgentTypes agentType = UserAgentTypes.DESKTOP;
for (String mobile : MOBILE_SPECIFIC_SUBSTRING) {
if (userAgent.contains(mobile) || userAgent.contains(mobile.toUpperCase())
|| userAgent.contains(mobile.toLowerCase())) {
agentType = UserAgentTypes.MOBILE;
break;
}
}
return agentType;
}
@SuppressWarnings("serial")
private static final HashMap<AgentTypes, Integer> UNSUPPORTED_AGENTS = new HashMap<AgentTypes, Integer>() {{
put(AgentTypes.MSIE, 9);
put(AgentTypes.SAFARI, 5);
put(AgentTypes.OPERA, 10);
put(AgentTypes.FIREFOX, 10);
put(AgentTypes.CHROME, 20);
}};
@Override
public boolean isUserAgentSupported(UserAgentDetails details) {
if (UNSUPPORTED_AGENTS.containsKey(details.getType())) {
if (details.getVersion()[0] < UNSUPPORTED_AGENTS.get(details.getType())) {
return false;
}
}
/* returning true for entries not listed */
return true;
}
}
@@ -0,0 +1,142 @@
package com.sap.sailing.gwt.ui.client;
/**
* This class holds user agent specific details like type and version.
*
* @author Simon Pamies (info@pamies.de)
* @since Jul 21, 2012
*/
public class UserAgentDetails {
public enum AgentTypes {
MSIE, FIREFOX, SAFARI, OPERA, CHROME, UNKNOWN
}
public static enum PlatformTypes {
DESKTOP, MOBILE, UNKNOWN
}
static final String[] MOBILE_SPECIFIC_SUBSTRING = { "iPhone", "Android", "MIDP", "Opera Mobi", "iPad",
"Opera Mini", "BlackBerry", "HP iPAQ", "IEMobile", "MSIEMobile", "Windows Phone", "HTC", "LG", "MOT",
"Nokia", "Symbian", "Fennec", "Maemo", "Tear", "Midori", "armv", "Windows CE", "WindowsCE", "Smartphone",
"240x320", "176x220", "320x320", "160x160", "webOS", "Palm", "Sagem", "Samsung", "SGH", "SIE",
"SonyEricsson", "MMP", "UCWEB" };
private AgentTypes type;
private Integer[] version;
private PlatformTypes platform;
private String userAgentRaw;
public UserAgentDetails(String userAgent) {
userAgent = userAgent.toLowerCase();
try {
if (userAgent.indexOf("msie") != -1 && !(userAgent.indexOf("opera") != -1)
&& (userAgent.indexOf("webtv") == -1)) {
String ieVersionString = userAgent.substring(userAgent.indexOf("msie ") + 5);
ieVersionString = safeSubstring(ieVersionString, 0, ieVersionString.indexOf(";"));
setType(AgentTypes.MSIE);
setVersion(parseVersionString(ieVersionString));
} else if (userAgent.indexOf(" firefox/") != -1) {
int i = userAgent.indexOf(" firefox/") + 9;
setType(AgentTypes.FIREFOX);
setVersion(parseVersionString(safeSubstring(userAgent, i, i + 5)));
} else if (userAgent.indexOf(" chrome/") != -1) {
int i = userAgent.indexOf(" chrome/") + 8;
setType(AgentTypes.CHROME);
setVersion(parseVersionString(safeSubstring(userAgent, i, i + 5)));
} else if (!(userAgent.indexOf(" chrome/") != -1) && userAgent.indexOf("safari") != -1) {
int i = userAgent.indexOf(" version/") + 9;
setType(AgentTypes.SAFARI);
setVersion(parseVersionString(safeSubstring(userAgent, i, i + 5)));
} else if (userAgent.indexOf("opera") != -1) {
int i = userAgent.indexOf(" version/");
if (i != -1) {
i += 9; /* " version/".length */
} else {
i = userAgent.indexOf("opera/") + 6;
}
setType(AgentTypes.OPERA);
setVersion(parseVersionString(safeSubstring(userAgent, i, i + 5)));
}
} catch (Exception e) {
/* Silently ignore but provide default values */
setType(AgentTypes.UNKNOWN);
setVersion(new Integer[] { -1, -1 });
}
userAgentRaw = userAgent;
}
/**
* Returns indicator if agent is mobile or desktop. Do NOT invoke this method repeatedly (e.g. at every request)
* because it has runtime of O(~20)!
*
* @return {@link PlatformTypes} describing if user agent is mobile or not
*/
public PlatformTypes isMobile() {
setPlatform(UserAgentDetails.PlatformTypes.DESKTOP);
for (String mobile : UserAgentDetails.MOBILE_SPECIFIC_SUBSTRING) {
if (userAgentRaw.contains(mobile) || userAgentRaw.contains(mobile.toUpperCase())
|| userAgentRaw.contains(mobile.toLowerCase())) {
setPlatform(UserAgentDetails.PlatformTypes.MOBILE);
break;
}
}
return getPlatform();
}
private Integer[] parseVersionString(String versionString) {
Integer[] version = new Integer[] { -1, -1 };
int idx = versionString.indexOf('.');
if (idx < 0) {
idx = versionString.length();
}
version[0] = Integer.parseInt(safeSubstring(versionString, 0, idx));
int idx2 = versionString.indexOf('.', idx + 1);
if (idx2 < 0) {
idx2 = versionString.length();
}
try {
version[1] = Integer.parseInt(safeSubstring(versionString, idx + 1, idx2).replaceAll("[^0-9].*", ""));
} catch (NumberFormatException e) {
// leave the minor version unmodified (-1 = unknown)
}
return version;
}
private String safeSubstring(String string, int beginIndex, int endIndex) {
if (beginIndex < 0) {
beginIndex = 0;
}
if (endIndex < 0 || endIndex > string.length()) {
endIndex = string.length();
}
return string.substring(beginIndex, endIndex);
}
public AgentTypes getType() {
return type;
}
public void setType(AgentTypes name) {
this.type = name;
}
public Integer[] getVersion() {
return version;
}
public void setVersion(Integer[] version) {
this.version = version;
}
public PlatformTypes getPlatform() {
return platform;
}
public void setPlatform(PlatformTypes platform) {
this.platform = platform;
}
}
@@ -85,7 +85,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint {
Timer timer = new Timer(PlayModes.Live, 1000l);
timer.setLivePlayDelayInMillis(delayToLiveMillis);
TVViewPanel tvViewPanel = new TVViewPanel(sailingService, stringMessages, this, leaderboardName,
userAgentType, null, timer, logoAndTitlePanel, mainPanel, showRaceDetails);
userAgent, null, timer, logoAndTitlePanel, mainPanel, showRaceDetails);
contentScrollPanel.setWidget(tvViewPanel);
} else {
Timer timer = new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l);
@@ -98,7 +98,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint {
leaderboardSettings,
getPreselectedRace(Window.Location.getParameterMap()), new CompetitorSelectionModel(
/* hasMultiSelection */true), timer, leaderboardName, leaderboardGroupName,
LeaderboardEntryPoint.this, stringMessages, userAgentType, showRaceDetails);
LeaderboardEntryPoint.this, stringMessages, userAgent, showRaceDetails);
contentScrollPanel.setWidget(leaderboardPanel);
}
@@ -68,7 +68,7 @@ import com.sap.sailing.gwt.ui.client.TimeListener;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
import com.sap.sailing.gwt.ui.client.UserAgentDetails;
import com.sap.sailing.gwt.ui.leaderboard.LegDetailColumn.LegDetailField;
import com.sap.sailing.gwt.ui.shared.AbstractLeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
@@ -962,21 +962,21 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
public LeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName,
String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages,
final UserAgentTypes userAgentType, boolean showRaceDetails) {
final UserAgentDetails userAgent, boolean showRaceDetails) {
this(sailingService, asyncActionsExecutor, settings, /* preSelectedRace */null, competitorSelectionProvider, leaderboardName,
leaderboardGroupName, errorReporter, stringMessages, userAgentType, showRaceDetails);
leaderboardGroupName, errorReporter, stringMessages, userAgent, showRaceDetails);
}
public LeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, RaceIdentifier preSelectedRace,
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName,
ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentTypes userAgentType, boolean showRaceDetails) {
ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentDetails userAgent, boolean showRaceDetails) {
this(sailingService, asyncActionsExecutor, settings, preSelectedRace, competitorSelectionProvider, new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l),
leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType, showRaceDetails);
leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgent, showRaceDetails);
}
public LeaderboardPanel(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, LeaderboardSettings settings, RaceIdentifier preSelectedRace,
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardName, String leaderboardGroupName,
ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentTypes userAgentType, boolean showRaceDetails) {
ErrorReporter errorReporter, final StringMessages stringMessages, final UserAgentDetails userAgent, boolean showRaceDetails) {
this.showRaceDetails = showRaceDetails;
this.sailingService = sailingService;
this.asyncActionsExecutor = asyncActionsExecutor;
@@ -1014,7 +1014,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
leaderboardTable = new CellTableWithStylableHeaders<LeaderboardRowDTO>(
/* pageSize */10000, tableResources);
getLeaderboardTable().setWidth("100%");
if (userAgentType == UserAgentTypes.MOBILE) {
if (userAgent.isMobile() == UserAgentDetails.PlatformTypes.MOBILE) {
leaderboardSelectionModel = new ToggleSelectionModel<LeaderboardRowDTO>();
} else {
leaderboardSelectionModel = new MultiSelectionModel<LeaderboardRowDTO>();
@@ -24,7 +24,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
import com.sap.sailing.gwt.ui.client.UserAgentDetails;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardPanel;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardViewModes;
import com.sap.sailing.gwt.ui.shared.FleetDTO;
@@ -38,7 +38,7 @@ public class TVViewPanel extends SimplePanel implements RaceTimesInfoProviderLis
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final ErrorReporter errorReporter;
private final UserAgentTypes userAgentType;
private final UserAgentDetails userAgent;
private final UserDTO userDTO;
private final LogoAndTitlePanel logoAndTitlePanel;
private final DockLayoutPanel dockPanel;
@@ -60,13 +60,13 @@ public class TVViewPanel extends SimplePanel implements RaceTimesInfoProviderLis
* @param logoAndTitlePanel allowed to be <code>null</code>
*/
public TVViewPanel(SailingServiceAsync sailingService, StringMessages stringMessages, ErrorReporter errorReporter,
String leaderboardName, UserAgentTypes userAgentType, UserDTO userDTO, Timer timer,
String leaderboardName, UserAgentDetails userAgent, UserDTO userDTO, Timer timer,
LogoAndTitlePanel logoAndTitlePanel, DockLayoutPanel dockPanel, boolean showRaceDetails) {
setSize("100%", "100%");
this.sailingService = sailingService;
this.stringMessages = stringMessages;
this.errorReporter = errorReporter;
this.userAgentType = userAgentType;
this.userAgent = userAgent;
this.userDTO = userDTO;
this.logoAndTitlePanel = logoAndTitlePanel;
this.dockPanel = dockPanel;
@@ -90,7 +90,7 @@ public class TVViewPanel extends SimplePanel implements RaceTimesInfoProviderLis
Timer timer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */3000l);
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, new AsyncActionsExecutor(), settings,
/* preSelectedRace */null, selectionModel, timer, leaderboardName, null, errorReporter, stringMessages,
userAgentType, showRaceDetails) {
userAgent, showRaceDetails) {
@Override
protected void setLeaderboard(LeaderboardDTO leaderboard) {
super.setLeaderboard(leaderboard);
@@ -122,7 +122,7 @@ public class TVViewPanel extends SimplePanel implements RaceTimesInfoProviderLis
List<RegattaAndRaceIdentifier> singletonList = Collections.singletonList(raceToShow);
raceSelectionModel.setSelection(singletonList);
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, userDTO, timer, raceSelectionModel, leaderboardName, null,
errorReporter, stringMessages, userAgentType, RaceBoardViewModes.ONESCREEN, raceTimesInfoProvider);
errorReporter, stringMessages, userAgent, RaceBoardViewModes.ONESCREEN, raceTimesInfoProvider);
return raceBoardPanel;
}
@@ -40,7 +40,7 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
import com.sap.sailing.gwt.ui.client.UserAgentDetails;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
@@ -370,11 +370,11 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
public EditableLeaderboardPanel(final SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
String leaderboardName, String leaderboardGroupName, final ErrorReporter errorReporter,
final StringMessages stringMessages, UserAgentTypes userAgentType) {
final StringMessages stringMessages, UserAgentDetails userAgent) {
super(sailingService, asyncActionsExecutor, LeaderboardSettingsFactory.getInstance().createNewDefaultSettings(
/* racesToShow */ null, /* namesOfRacesToShow */ null, null, /* autoExpandFirstRace */false),
new CompetitorSelectionModel(/* hasMultiSelection */true),
leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType, /* showRaceDetails */ true);
leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgent, /* showRaceDetails */ true);
ImageResource importIcon = resources.importIcon();
Anchor importAnchor = new Anchor(AbstractImagePrototype.create(importIcon).getSafeHtml());
getRefreshAndSettingsPanel().insert(importAnchor, 0);
@@ -22,7 +22,7 @@ public class LeaderboardEditPage extends AbstractEntryPoint {
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.editScores(), stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, new AsyncActionsExecutor(), leaderboardName, null,
LeaderboardEditPage.this, stringMessages, userAgentType);
LeaderboardEditPage.this, stringMessages, userAgent);
RootPanel.get().add(logoAndTitlePanel);
RootPanel.get().add(leaderboardPanel);
} else {
@@ -130,7 +130,7 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint {
Timer timer = new Timer(PlayModes.Replay, 1000l);
RaceTimesInfoProvider raceTimesInfoProvider = new RaceTimesInfoProvider(sailingService, this, singletonList, 5000l /* requestInterval*/);
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, user, timer, raceSelectionModel, leaderboardName, leaderboardGroupName,
RaceBoardEntryPoint.this, stringMessages, userAgentType, viewMode, raceTimesInfoProvider);
RaceBoardEntryPoint.this, stringMessages, userAgent, viewMode, raceTimesInfoProvider);
raceBoardPanel.fillRegattas(regattas);
switch (viewMode) {
@@ -35,7 +35,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.TimeListener;
import com.sap.sailing.gwt.ui.client.TimeZoomModel;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
import com.sap.sailing.gwt.ui.client.UserAgentDetails;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
@@ -82,7 +82,7 @@ public class RaceBoardPanel extends FormPanel implements RegattaDisplayer, RaceS
private RaceTimePanel timePanel;
private final Timer timer;
private final RaceSelectionProvider raceSelectionProvider;
private final UserAgentTypes userAgentType;
private final UserAgentDetails userAgent;
private final CompetitorSelectionModel competitorSelectionModel;
private final TimeZoomModel timeZoomModel;
private final RegattaAndRaceIdentifier selectedRaceIdentifier;
@@ -102,7 +102,7 @@ public class RaceBoardPanel extends FormPanel implements RegattaDisplayer, RaceS
public RaceBoardPanel(SailingServiceAsync sailingService, UserDTO theUser, Timer timer,
RaceSelectionProvider theRaceSelectionProvider, String leaderboardName, String leaderboardGroupName,
ErrorReporter errorReporter, final StringMessages stringMessages, UserAgentTypes userAgentType,
ErrorReporter errorReporter, final StringMessages stringMessages, UserAgentDetails userAgent,
RaceBoardViewModes viewMode, RaceTimesInfoProvider raceTimesInfoProvider) {
this.sailingService = sailingService;
this.stringMessages = stringMessages;
@@ -114,7 +114,7 @@ public class RaceBoardPanel extends FormPanel implements RegattaDisplayer, RaceS
selectedRaceIdentifier = raceSelectionProvider.getSelectedRaces().iterator().next();
this.setRaceBoardName(selectedRaceIdentifier.getRaceName());
this.errorReporter = errorReporter;
this.userAgentType = userAgentType;
this.userAgent = userAgent;
this.viewMode = viewMode;
asyncActionsExecutor = new AsyncActionsExecutor();
FlowPanel mainPanel = new FlowPanel();
@@ -199,7 +199,7 @@ public class RaceBoardPanel extends FormPanel implements RegattaDisplayer, RaceS
/* nameOfRaceColumnToShow */null, /* nameOfRaceToShow */selectedRaceIdentifier.getRaceName());
return new LeaderboardPanel(sailingService, asyncActionsExecutor, leaderBoardSettings, selectedRaceIdentifier,
competitorSelectionModel, timer, leaderboardName, leaderboardGroupName, errorReporter, stringMessages,
userAgentType, /* showRaceDetails */ true);
userAgent, /* showRaceDetails */ true);
}
private <SettingsType> void addComponentToNavigationMenu(final ComponentViewer componentViewer,