mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-10 14:20:55 +00:00
Merge branch 'master' into ubilabs--rcapp--master
This commit is contained in:
commit
4337655aaf
105 files changed
+1767
-532
No files matched your search
@@ -239,6 +239,7 @@
|
||||
<string name="toggle_group_race_mode">Gruppenrennen?</string>
|
||||
<string name="toggle_group_race_mode_off">Kein Gruppenrennen</string>
|
||||
<string name="toggle_group_race_mode_on">Gruppenrennen</string>
|
||||
<string name="the_selected_time_is_before_the_race_start_">Die ausgewählte Zeit liegt vor dem Rennbeginn.</string>
|
||||
<string name="welcome">WILLKOMMEN</string>
|
||||
<string name="races_all">ALLE RENNEN</string>
|
||||
<string name="races_current">AKTUELLE RENNEN</string>
|
||||
@@ -421,5 +422,4 @@
|
||||
<string name="send_mail">Sende Email...</string>
|
||||
<string name="data_reload_title">Daten wurden extern verändert</string>
|
||||
<string name="data_reload_message">Daten müssen neu geladen werden. Eventueller Datenverlust ist möglich.</string>
|
||||
|
||||
</resources>
|
||||
@@ -255,6 +255,7 @@
|
||||
<string name="toggle_group_race_mode">Group Race?</string>
|
||||
<string name="toggle_group_race_mode_off">No Group Racing</string>
|
||||
<string name="toggle_group_race_mode_on">Group Racing</string>
|
||||
<string name="the_selected_time_is_before_the_race_start_">The selected time is before the race start.</string>
|
||||
|
||||
<string name="confirm_start_time">Confirm Start Time</string>
|
||||
<string name="confirm_start_mode">Confirm Start Mode</string>
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
|
||||
public class AndroidRaceLogResolver implements RaceLogResolver {
|
||||
|
||||
@Override
|
||||
public RaceLog resolve(SimpleRaceLogIdentifier identifier) {
|
||||
return InMemoryDataStore.INSTANCE.getRace(identifier).getRaceLog();
|
||||
}
|
||||
|
||||
}
|
||||
+5
-2
@@ -8,6 +8,7 @@ import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
|
||||
|
||||
public interface DataStore {
|
||||
|
||||
@@ -27,8 +28,10 @@ public interface DataStore {
|
||||
|
||||
Collection<ManagedRace> getRaces();
|
||||
void addRace(ManagedRace race);
|
||||
ManagedRace getRace(Serializable id);
|
||||
boolean hasRace(Serializable id);
|
||||
public ManagedRace getRace(String id);
|
||||
public ManagedRace getRace(SimpleRaceLogIdentifier id);
|
||||
public boolean hasRace(String id);
|
||||
public boolean hasRace(SimpleRaceLogIdentifier id);
|
||||
|
||||
Collection<Mark> getMarks();
|
||||
Mark getMark(Serializable id);
|
||||
|
||||
+55
-8
@@ -1,19 +1,32 @@
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.android.shared.util.CollectionUtils;
|
||||
import com.sap.sailing.domain.base.*;
|
||||
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.impl.SharedDomainFactoryImpl;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl;
|
||||
import com.sap.sse.common.Util.Triple;
|
||||
|
||||
public enum InMemoryDataStore implements DataStore {
|
||||
INSTANCE;
|
||||
|
||||
private HashMap<Serializable, EventBase> eventsById;
|
||||
private HashMap<Serializable, ManagedRace> managedRaceById;
|
||||
private HashMap<SimpleRaceLogIdentifier, ManagedRace> managedRaceById;
|
||||
private HashMap<Serializable, Mark> marksById;
|
||||
private CourseBase courseData;
|
||||
private SharedDomainFactory domainFactory;
|
||||
@@ -128,14 +141,48 @@ public enum InMemoryDataStore implements DataStore {
|
||||
}
|
||||
|
||||
public void addRace(ManagedRace race) {
|
||||
managedRaceById.put(race.getId(), race);
|
||||
managedRaceById.put(convertManagedRaceIdentiferToSimpleRaceLogIdentifier(race.getIdentifier()), race);
|
||||
}
|
||||
|
||||
public ManagedRace getRace(Serializable id) {
|
||||
private SimpleRaceLogIdentifier convertManagedRaceIdentiferToSimpleRaceLogIdentifier(ManagedRaceIdentifier id) {
|
||||
return new SimpleRaceLogIdentifierImpl(id.getRaceGroup().getName(), id.getRaceName(), id.getFleet().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManagedRace getRace(String id) {
|
||||
return managedRaceById.get(parseManagedRaceLogIdentifier(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManagedRace getRace(SimpleRaceLogIdentifier id) {
|
||||
return managedRaceById.get(id);
|
||||
}
|
||||
|
||||
public boolean hasRace(Serializable id) {
|
||||
@Override
|
||||
public boolean hasRace(String id) {
|
||||
return managedRaceById.containsKey(parseManagedRaceLogIdentifier(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a serialized version of a ManagedRaceIdentifier and creates a SimpleRaceLogIdentifier
|
||||
* this is needed as the serialized version is passed around in the bundle context, but the
|
||||
* InMemoryDataStore now has to use SimpleRaceLogIdentifier as key in the managedRaces HashMap in
|
||||
* order to allow for retrieving a managed race with exclusively the information provided by a
|
||||
* SimpleRaceLogIdentifier (which is less than the information provided by a ManagedRaceIdentifier)
|
||||
*
|
||||
* @param id
|
||||
* serialized version of a ManagedRaceIdentifier
|
||||
* @return
|
||||
* corresponding SimpleRaceLogIdentifier
|
||||
*/
|
||||
public SimpleRaceLogIdentifier parseManagedRaceLogIdentifier(final String escapedId) {
|
||||
//Undo escaping
|
||||
final Triple<String, String, String> id = FleetIdentifierImpl.unescape(escapedId);
|
||||
return new SimpleRaceLogIdentifierImpl(id.getA(), id.getB(), id.getC());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasRace(SimpleRaceLogIdentifier id) {
|
||||
return managedRaceById.containsKey(id);
|
||||
}
|
||||
|
||||
|
||||
Executable → Regular
+6
-6
@@ -110,8 +110,8 @@ public class OfflineDataManager extends DataManager {
|
||||
log.add(factory.createRaceStatusEvent(new MillisecondsTimePoint(new Date().getTime()),
|
||||
AppPreferences.on(context).getAuthor(), 1, RaceLogRaceStatus.FINISHING));
|
||||
|
||||
ManagedRace q1 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("A.B", new FleetImpl("A"), qualifying,
|
||||
raceGroup), RaceStateImpl.create(log, AppPreferences.on(context).getAuthor(), configuration));
|
||||
ManagedRace q1 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("A.B", new FleetImpl("A"), qualifying, raceGroup),
|
||||
RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration));
|
||||
|
||||
log = new RaceLogImpl(UUID.randomUUID());
|
||||
/*
|
||||
@@ -119,16 +119,16 @@ public class OfflineDataManager extends DataManager {
|
||||
* new MillisecondsTimePoint(new Date().getTime() + 100000)));
|
||||
*/
|
||||
|
||||
ManagedRace q2 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("B", new FleetImpl("A.A"), qualifying,
|
||||
raceGroup), RaceStateImpl.create(log, AppPreferences.on(context).getAuthor(), configuration));
|
||||
ManagedRace q2 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("B", new FleetImpl("A.A"), qualifying, raceGroup),
|
||||
RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration));
|
||||
|
||||
log = new RaceLogImpl(UUID.randomUUID());
|
||||
/*
|
||||
* log.add(factory.createRaceStatusEvent( new MillisecondsTimePoint(new Date()), 5,
|
||||
* RaceLogRaceStatus.FINISHED));
|
||||
*/
|
||||
ManagedRace q3 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("Q3", new FleetImpl("Default"), qualifying,
|
||||
raceGroup), RaceStateImpl.create(log, AppPreferences.on(context).getAuthor(), configuration));
|
||||
ManagedRace q3 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("Q3", new FleetImpl("Default"), qualifying, raceGroup),
|
||||
RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration));
|
||||
/*
|
||||
* ManagedRace m1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl( "M1", new FleetImpl("Default"), medal,
|
||||
* raceGroup), null);
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ import com.sap.sailing.domain.base.racegroup.RaceCell;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceRow;
|
||||
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
|
||||
import com.sap.sailing.racecommittee.app.data.AndroidRaceLogResolver;
|
||||
import com.sap.sailing.racecommittee.app.domain.FleetIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
@@ -79,7 +80,7 @@ public class ManagedRacesDataParser implements DataParser<Collection<ManagedRace
|
||||
}
|
||||
FleetIdentifier fleetIdentifier = new FleetIdentifierImpl(fleet, series, raceGroup);
|
||||
ManagedRaceIdentifier identifier = new ManagedRaceIdentifierImpl(name, fleetIdentifier);
|
||||
RaceState state = RaceStateImpl.create(raceLog, author, configurationLoader);
|
||||
RaceState state = RaceStateImpl.create(new AndroidRaceLogResolver(), raceLog, author, configurationLoader);
|
||||
return new ManagedRaceImpl(identifier, state);
|
||||
}
|
||||
|
||||
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
package com.sap.sailing.racecommittee.app.data.parsers;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.simple.JSONValue;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public class RaceLogsDataParser implements
|
||||
DataParser<Map<ManagedRace, Collection<RaceLogEvent>>> {
|
||||
|
||||
public Map<ManagedRace, Collection<RaceLogEvent>> parse(Reader reader)
|
||||
throws Exception {
|
||||
Object parsedResult = JSONValue.parse(reader);
|
||||
System.out.println(parsedResult);
|
||||
return new HashMap<ManagedRace, Collection<RaceLogEvent>>();
|
||||
}
|
||||
|
||||
}
|
||||
+1
-3
@@ -1,7 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
@@ -14,5 +12,5 @@ public interface FleetIdentifier {
|
||||
|
||||
public RaceGroup getRaceGroup();
|
||||
|
||||
public Serializable getId();
|
||||
public String getId();
|
||||
}
|
||||
+1
-4
@@ -1,8 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.domain;
|
||||
|
||||
|
||||
public interface ManagedRaceIdentifier extends FleetIdentifier {
|
||||
|
||||
public String getRaceName();
|
||||
|
||||
public String getRaceName();
|
||||
}
|
||||
+29
-3
@@ -1,11 +1,10 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.racecommittee.app.domain.FleetIdentifier;
|
||||
import com.sap.sse.common.Util.Triple;
|
||||
|
||||
public class FleetIdentifierImpl implements FleetIdentifier {
|
||||
|
||||
@@ -31,7 +30,7 @@ public class FleetIdentifierImpl implements FleetIdentifier {
|
||||
return raceGroup;
|
||||
}
|
||||
|
||||
public Serializable getId() {
|
||||
public String getId() {
|
||||
return String.format("%s.%s.%s",
|
||||
escapeIdentifierFragment(getRaceGroup().getName()),
|
||||
escapeIdentifierFragment(getSeries().getName()),
|
||||
@@ -42,4 +41,31 @@ public class FleetIdentifierImpl implements FleetIdentifier {
|
||||
return fragment.replace("\\", "\\\\").replace(".", "\\.");
|
||||
}
|
||||
|
||||
public static Triple<String, String, String> unescape(String escapedId) {
|
||||
int arrayIndex = 0;
|
||||
StringBuilder[] split = new StringBuilder[3];
|
||||
for (int i=0; i<split.length; i++) {
|
||||
split[i] = new StringBuilder();
|
||||
}
|
||||
boolean escaped = false;
|
||||
for (int i=0; i<escapedId.length(); i++) {
|
||||
if (escaped) {
|
||||
split[arrayIndex].append(escapedId.charAt(i));
|
||||
escaped = false;
|
||||
} else if (escapedId.charAt(i) == '\\') {
|
||||
escaped = true; // next character is escaped
|
||||
} else if (escapedId.charAt(i) == '.') {
|
||||
// an unescaped dot
|
||||
arrayIndex++;
|
||||
} else {
|
||||
// unescaped non-escape, non-dot character
|
||||
split[arrayIndex].append(escapedId.charAt(i));
|
||||
}
|
||||
}
|
||||
String leaderboardName = split[0].toString();
|
||||
String raceColumnName = split[1].toString();
|
||||
String fleetName = split[2].toString();
|
||||
return new Triple<>(leaderboardName, raceColumnName, fleetName);
|
||||
}
|
||||
|
||||
}
|
||||
+1
-3
@@ -1,7 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
@@ -26,7 +24,7 @@ public class ManagedRaceIdentifierImpl extends FleetIdentifierImpl implements Ma
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable getId() {
|
||||
public String getId() {
|
||||
return String.format("%s.%s", super.getId(), escapeIdentifierFragment(getRaceName()));
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -41,7 +40,7 @@ public class ManagedRaceImpl implements ManagedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable getId() {
|
||||
public String getId() {
|
||||
return identifier.getId();
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -2,7 +2,6 @@ package com.sap.sailing.racecommittee.app.domain.racelog.impl;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -76,7 +75,7 @@ public class RaceLogEventsCallback implements ServerReplyCallback {
|
||||
return eventsToAdd;
|
||||
}
|
||||
|
||||
private void addEvents(Context context, Serializable raceId, ReadonlyDataManager dataManager,
|
||||
private void addEvents(Context context, String raceId, ReadonlyDataManager dataManager,
|
||||
List<RaceLogEvent> eventsToAdd) {
|
||||
if (eventsToAdd.isEmpty()) {
|
||||
ExLog.i(context, TAG, "No server-side events to add for race " + raceId);
|
||||
|
||||
+1
-2
@@ -2,7 +2,6 @@ package com.sap.sailing.racecommittee.app.domain.racelog.impl;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@@ -89,7 +88,7 @@ public class RacePositionsCallback implements ServerReplyCallback {
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void addPositions(Context context, Serializable raceId,
|
||||
private void addPositions(Context context, String raceId,
|
||||
ReadonlyDataManager dataManager, List<MapMarker> markersToAdd) {
|
||||
if (markersToAdd.isEmpty()) {
|
||||
ExLog.i(context, TAG, "No server-side markers to add for race "
|
||||
|
||||
+2
-3
@@ -172,7 +172,7 @@ public class RaceStateService extends Service {
|
||||
return;
|
||||
}
|
||||
|
||||
Serializable id = intent.getSerializableExtra(AppConstants.RACE_ID_KEY);
|
||||
String id = intent.getStringExtra(AppConstants.RACE_ID_KEY);
|
||||
ManagedRace race = dataManager.getDataStore().getRace(id);
|
||||
if (race == null) {
|
||||
ExLog.w(this, TAG, "No race for id " + id);
|
||||
@@ -218,8 +218,7 @@ public class RaceStateService extends Service {
|
||||
if (intent.getExtras() == null || !intent.getExtras().containsKey(AppConstants.RACE_ID_KEY)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Serializable raceId = intent.getExtras().getSerializable(AppConstants.RACE_ID_KEY);
|
||||
String raceId = intent.getExtras().getString(AppConstants.RACE_ID_KEY);
|
||||
return dataManager.getDataStore().getRace(raceId);
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -1,15 +1,14 @@
|
||||
package com.sap.sailing.racecommittee.app.services.polling;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class PollingResult {
|
||||
public final boolean isSuccess;
|
||||
public final Util.Pair<Serializable, InputStream> resultStreamForRaceId;
|
||||
public final Util.Pair<String, InputStream> resultStreamForRaceId;
|
||||
|
||||
public PollingResult(boolean isSuccess, Util.Pair<Serializable, InputStream> resultStreamForRaceId) {
|
||||
public PollingResult(boolean isSuccess, Util.Pair<String, InputStream> resultStreamForRaceId) {
|
||||
this.isSuccess = isSuccess;
|
||||
this.resultStreamForRaceId = resultStreamForRaceId;
|
||||
}
|
||||
|
||||
+4
-5
@@ -2,7 +2,6 @@ package com.sap.sailing.racecommittee.app.services.polling;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.net.URL;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -12,7 +11,7 @@ import com.sap.sailing.android.shared.data.http.HttpJsonPostRequest;
|
||||
import com.sap.sailing.android.shared.data.http.HttpRequest;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class RaceLogPollerTask extends AsyncTask<Util.Pair<Serializable, URL>, PollingResult, Void> {
|
||||
public class RaceLogPollerTask extends AsyncTask<Util.Pair<String, URL>, PollingResult, Void> {
|
||||
|
||||
public interface PollingResultListener {
|
||||
public void onPollingResult(PollingResult result);
|
||||
@@ -29,8 +28,8 @@ public class RaceLogPollerTask extends AsyncTask<Util.Pair<Serializable, URL>, P
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected Void doInBackground(Util.Pair<Serializable, URL>... queries) {
|
||||
for (Util.Pair<Serializable, URL> query : queries) {
|
||||
protected Void doInBackground(Util.Pair<String, URL>... queries) {
|
||||
for (Util.Pair<String, URL> query : queries) {
|
||||
if (isCancelled()) {
|
||||
return null;
|
||||
}
|
||||
@@ -40,7 +39,7 @@ public class RaceLogPollerTask extends AsyncTask<Util.Pair<Serializable, URL>, P
|
||||
try {
|
||||
responseStream = request.execute();
|
||||
publishProgress(new PollingResult(true,
|
||||
new Util.Pair<Serializable, InputStream>(query.getA(), responseStream)));
|
||||
new Util.Pair<String, InputStream>(query.getA(), responseStream)));
|
||||
} catch (IOException e) {
|
||||
// don't need to close responseStream as it still must
|
||||
// be null because the only call that may throw an
|
||||
|
||||
+5
-6
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.racecommittee.app.services.polling;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
@@ -168,7 +167,7 @@ public class RacePositionsPoller implements PollingActiveChangedListener {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Util.Pair<Serializable, URL>> queries = getPollingQueries();
|
||||
List<Util.Pair<String, URL>> queries = getPollingQueries();
|
||||
task = new RacePositionsPollerTask(this, context);
|
||||
task.execute(queries.toArray(new Util.Pair[0]));
|
||||
}
|
||||
@@ -181,9 +180,9 @@ public class RacePositionsPoller implements PollingActiveChangedListener {
|
||||
return;
|
||||
}
|
||||
if (result.isSuccess) {
|
||||
Serializable raceId = result.resultStreamForRaceId.getA();
|
||||
String raceId = result.resultStreamForRaceId.getA();
|
||||
InputStream responseStream = result.resultStreamForRaceId.getB();
|
||||
processor.processResponse(poller.context, responseStream, raceId.toString());
|
||||
processor.processResponse(poller.context, responseStream, raceId);
|
||||
} else {
|
||||
ExLog.i(context, TAG, "Polling attempt not successful.");
|
||||
}
|
||||
@@ -200,8 +199,8 @@ public class RacePositionsPoller implements PollingActiveChangedListener {
|
||||
poller.pollingHandler.postDelayed(this, pollingInterval);
|
||||
}
|
||||
|
||||
private List<Util.Pair<Serializable, URL>> getPollingQueries() {
|
||||
List<Util.Pair<Serializable, URL>> queries = new ArrayList<>();
|
||||
private List<Util.Pair<String, URL>> getPollingQueries() {
|
||||
List<Util.Pair<String, URL>> queries = new ArrayList<>();
|
||||
for (Entry<ManagedRace, URL> entry : poller.races.entrySet()) {
|
||||
queries.add(new Util.Pair<>(entry.getKey().getId(), entry.getValue()));
|
||||
}
|
||||
|
||||
+8
-8
@@ -1,17 +1,17 @@
|
||||
package com.sap.sailing.racecommittee.app.services.polling;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.sap.sailing.android.shared.data.http.HttpJsonGetRequest;
|
||||
import com.sap.sailing.android.shared.data.http.HttpRequest;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.net.URL;
|
||||
|
||||
public class RacePositionsPollerTask extends AsyncTask<Util.Pair<Serializable, URL>, PollingResult, Void> {
|
||||
public class RacePositionsPollerTask extends AsyncTask<Util.Pair<String, URL>, PollingResult, Void> {
|
||||
|
||||
private final PollingResultListener listener;
|
||||
private final Context context;
|
||||
@@ -23,8 +23,8 @@ public class RacePositionsPollerTask extends AsyncTask<Util.Pair<Serializable, U
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected Void doInBackground(Util.Pair<Serializable, URL>... queries) {
|
||||
for (Util.Pair<Serializable, URL> query : queries) {
|
||||
protected Void doInBackground(Util.Pair<String, URL>... queries) {
|
||||
for (Util.Pair<String, URL> query : queries) {
|
||||
if (isCancelled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Executable → Regular
+4
-6
@@ -4,6 +4,7 @@ import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
@@ -19,15 +20,13 @@ import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public abstract class RaceFragment extends LoggableFragment implements TickListener {
|
||||
|
||||
private static final String TAG = RaceFragment.class.getName();
|
||||
|
||||
public static Bundle createArguments(ManagedRace race) {
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putSerializable(AppConstants.RACE_ID_KEY, race.getId());
|
||||
arguments.putString(AppConstants.RACE_ID_KEY, race.getId());
|
||||
return arguments;
|
||||
}
|
||||
|
||||
@@ -50,7 +49,7 @@ public abstract class RaceFragment extends LoggableFragment implements TickListe
|
||||
*/
|
||||
protected Bundle getRecentArguments() {
|
||||
Bundle args = new Bundle();
|
||||
args.putSerializable(AppConstants.RACE_ID_KEY, managedRace.getId());
|
||||
args.putString(AppConstants.RACE_ID_KEY, managedRace.getId());
|
||||
return args;
|
||||
}
|
||||
|
||||
@@ -66,9 +65,8 @@ public abstract class RaceFragment extends LoggableFragment implements TickListe
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
if (getArguments() != null) {
|
||||
Serializable raceId = getArguments().getSerializable(AppConstants.RACE_ID_KEY);
|
||||
String raceId = getArguments().getString(AppConstants.RACE_ID_KEY);
|
||||
managedRace = OnlineDataManager.create(getActivity()).getDataStore().getRace(raceId);
|
||||
if (managedRace == null && !(getClass() == RaceFlagViewerFragment.class)) {
|
||||
throw new IllegalStateException("Unable to obtain ManagedRace from datastore on start of " + getClass().getName());
|
||||
|
||||
+4
-8
@@ -1,6 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.dialogs;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -35,13 +34,12 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment {
|
||||
private static String ARGS_RACE_IDS = ProtestTimeDialogFragment.class.getSimpleName() + ".raceids";
|
||||
|
||||
public static ProtestTimeDialogFragment newInstance(List<ManagedRace> races) {
|
||||
ArrayList<Serializable> raceIds = new ArrayList<>();
|
||||
ArrayList<String> raceIds = new ArrayList<>();
|
||||
for (ManagedRace race : races) {
|
||||
raceIds.add(race.getId());
|
||||
}
|
||||
Bundle args = new Bundle();
|
||||
args.putSerializable(ARGS_RACE_IDS, raceIds);
|
||||
|
||||
args.putStringArrayList(ARGS_RACE_IDS, raceIds);
|
||||
ProtestTimeDialogFragment fragment = new ProtestTimeDialogFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
@@ -196,11 +194,9 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment {
|
||||
if (args == null) {
|
||||
throw new IllegalStateException("Arguments needed!");
|
||||
}
|
||||
|
||||
ReadonlyDataManager manager = DataManager.create(getActivity());
|
||||
@SuppressWarnings("unchecked")
|
||||
ArrayList<Serializable> raceIds = (ArrayList<Serializable>) args.getSerializable(ARGS_RACE_IDS);
|
||||
for (Serializable id : raceIds) {
|
||||
ArrayList<String> raceIds = args.getStringArrayList(ARGS_RACE_IDS);
|
||||
for (String id : raceIds) {
|
||||
races.add(manager.getDataStore().getRace(id));
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -1,7 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.dialogs;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
@@ -19,7 +17,7 @@ public abstract class RaceDialogFragment extends LoggableDialogFragment implemen
|
||||
|
||||
public static Bundle createArguments(ManagedRace race) {
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putSerializable(AppConstants.RACE_ID_KEY, race.getId());
|
||||
arguments.putString(AppConstants.RACE_ID_KEY, race.getId());
|
||||
return arguments;
|
||||
}
|
||||
|
||||
@@ -35,8 +33,7 @@ public abstract class RaceDialogFragment extends LoggableDialogFragment implemen
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
Serializable raceId = getArguments().getSerializable(AppConstants.RACE_ID_KEY);
|
||||
String raceId = getArguments().getString(AppConstants.RACE_ID_KEY);
|
||||
managedRace = OnlineDataManager.create(getActivity()).getDataStore().getRace(raceId);
|
||||
if (managedRace == null) {
|
||||
throw new IllegalStateException(
|
||||
@@ -77,7 +74,7 @@ public abstract class RaceDialogFragment extends LoggableDialogFragment implemen
|
||||
*/
|
||||
protected Bundle getParameterBundle() {
|
||||
Bundle args = new Bundle();
|
||||
args.putSerializable(AppConstants.RACE_ID_KEY, managedRace.getId());
|
||||
args.putString(AppConstants.RACE_ID_KEY, managedRace.getId());
|
||||
return args;
|
||||
}
|
||||
}
|
||||
+7
-5
@@ -14,6 +14,7 @@ import android.widget.Toast;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.data.AndroidRaceLogResolver;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
@@ -32,13 +33,14 @@ public class RaceFinishingTimeDialog extends RaceDialogFragment {
|
||||
|
||||
private void setAndAnnounceFinishedTime() {
|
||||
TimePoint finishingTime = getFinishingTime();
|
||||
StartTimeFinder stf = new StartTimeFinder(getRace().getRaceLog());
|
||||
if (stf.analyze() != null && getRace().getStatus().equals(RaceLogRaceStatus.RUNNING)) {
|
||||
if (stf.analyze().before(finishingTime)) {
|
||||
StartTimeFinder stf = new StartTimeFinder(new AndroidRaceLogResolver(), getRace().getRaceLog());
|
||||
TimePoint startTime = stf.analyze().getStartTime();
|
||||
if (getRace().getStatus().equals(RaceLogRaceStatus.RUNNING)) {
|
||||
if (startTime.before(finishingTime)) {
|
||||
getRace().getState().setFinishingTime(finishingTime);
|
||||
dismiss();
|
||||
}else{
|
||||
Toast.makeText(getActivity(), getString(R.string.error_time_before_finish), Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
Toast.makeText(getActivity(), getString(R.string.the_selected_time_is_before_the_race_start_), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-6
@@ -1,17 +1,26 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.TimePicker;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.util.ViewHolder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.data.AndroidRaceLogResolver;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.MoreFlagsAdapter;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.MoreFlagsAdapter.MoreFlag;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.MoreFlagsAdapter.MoreFlagItemClick;
|
||||
@@ -20,9 +29,6 @@ import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick {
|
||||
|
||||
private MoreFlagsAdapter mAdapter;
|
||||
@@ -223,12 +229,12 @@ public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick
|
||||
}
|
||||
|
||||
private void setFinishingTime(TimePoint finishTime) {
|
||||
StartTimeFinder stf = new StartTimeFinder(getRace().getRaceLog());
|
||||
StartTimeFinder stf = new StartTimeFinder(new AndroidRaceLogResolver(), getRace().getRaceLog());
|
||||
if (stf.analyze() != null && getRace().getStatus().equals(RaceLogRaceStatus.RUNNING)) {
|
||||
if (finishTime.after(MillisecondsTimePoint.now())) {
|
||||
Toast.makeText(getActivity(), "The selected time is in the future. Please recheck the time.", Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
if (stf.analyze().before(finishTime)) {
|
||||
if (stf.analyze().getStartTime().before(finishTime)) {
|
||||
getRaceState().setFinishingTime(finishTime);
|
||||
} else {
|
||||
Toast.makeText(getActivity(), "The selected time is before the race start.", Toast.LENGTH_LONG).show();
|
||||
|
||||
Reference in new issue
Block a user