Merge branch 'master' into ubilabs--rcapp--master

This commit is contained in:
Peter Siegmund committed 2015-06-19 08:36:31 +02:00
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>
@@ -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();
}
}
@@ -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);
@@ -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);
}
@@ -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);
@@ -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);
}
@@ -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,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,8 +1,5 @@
package com.sap.sailing.racecommittee.app.domain;
public interface ManagedRaceIdentifier extends FleetIdentifier {
public String getRaceName();
public String getRaceName();
}
@@ -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,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,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();
}
@@ -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);
@@ -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 "
@@ -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);
}
@@ -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;
}
@@ -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
@@ -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()));
}
@@ -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;
}
@@ -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());
@@ -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));
}
}
@@ -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;
}
}
@@ -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();
}
}
}
@@ -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();