Merge branch 'ubilabs--rcapp--feature--phone-login' of ssh://sapsailing.com/home/trac/git into ubilabs--rcapp--feature--phone-login

This commit is contained in:
Bennet Brunsen committed 2015-08-12 09:46:50 +02:00
commit 26646a5afc
1110 files changed
+8836 -42989

No files matched your search

@@ -36,7 +36,6 @@ public class NetworkHelper {
public void executeHttpJsonRequestAsnchronously(HttpRequest request, NetworkHelperSuccessListener successListener,
NetworkHelperFailureListener failureListener) {
NetworkRequestTask task = new NetworkRequestTask(successListener, failureListener);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, request);
}
@@ -62,13 +61,10 @@ public class NetworkHelper {
try {
stream = request.execute();
String responseStr = readStream(stream);
response = null;
if (responseStr.length() > 0) {
response = new JSONObject(responseStr);
}
isSuccess = true;
} catch (IOException e) {
error = new NetworkHelperError(e.getMessage());
@@ -76,7 +72,6 @@ public class NetworkHelper {
error = new NetworkHelperError(e.getMessage());
ExLog.e(mContext, TAG, "Failed to parse JSON: " + e.getMessage());
}
return null;
}
@@ -58,13 +58,11 @@ public class CheckinManager {
public void callServerAndGenerateCheckinData() {
Uri uri = Uri.parse(url);
// TODO: assuming scheme is http, is this valid?
String scheme = uri.getScheme();
if (scheme != "http" && scheme != "https") {
scheme = "http";
}
final URLData urlData = extractRequestParametersFromUri(uri, scheme);
if (urlData == null) {
setCheckinData(null);
@@ -76,7 +74,6 @@ public class CheckinManager {
try {
HttpGetRequest getLeaderboardRequest = new HttpGetRequest(new URL(urlData.getLeaderboardUrl), mContext);
getLeaderBoardFromServer(urlData, getLeaderboardRequest);
} catch (MalformedURLException e) {
ExLog.e(mContext, TAG,
"Error: Failed to perform checking due to a MalformedURLException: " + e.getMessage());
@@ -115,13 +112,9 @@ public class CheckinManager {
private void getLeaderBoardFromServer(final URLData urlData, HttpGetRequest getLeaderboardRequest) {
NetworkHelper.getInstance(mContext).executeHttpJsonRequestAsnchronously(getLeaderboardRequest,
new NetworkHelper.NetworkHelperSuccessListener() {
@Override
public void performAction(JSONObject response) {
// TODO Auto-generated method stub
final String leaderboardName;
try {
leaderboardName = response.getString("name");
urlData.getMarkUrl = urlData.hostWithPort + prefs.getServerMarkPath(leaderboardName);
@@ -143,9 +136,7 @@ public class CheckinManager {
ExLog.e(mContext, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e1.getMessage());
}
}
}, new NetworkHelper.NetworkHelperFailureListener() {
@Override
public void performAction(NetworkHelper.NetworkHelperError e) {
ExLog.e(mContext, TAG, "Failed to get event from API: " + e.getMessage());
@@ -5,6 +5,7 @@
<item name="android:colorPrimary">@color/light_colorPrimary</item>
<item name="android:colorPrimaryDark">@color/light_colorPrimaryDark</item>
<item name="android:colorAccent">@color/light_colorAccent</item>
<item name="android:textColorPrimary">@color/light_colorPrimary</item>
<item name="android:windowTranslucentStatus">true</item>
@@ -73,4 +73,6 @@ public class AppConstants {
public final static String INTENT_ACTION_IS_TRACKING = PACKAGE_NAME + "action.is.tracking";
public final static String INTENT_ACTION_IS_TRACKING_EXTRA = PACKAGE_NAME + "action.is.tracking.extra";
public final static String GWT_MAP_AND_WIND_CHART_HTML = "gwt/EmbeddedMapAndWindChart.html";
}
@@ -49,4 +49,5 @@ public interface DataStore {
UUID getCourseUUID();
void setCourseUUID(UUID uuid);
}
@@ -1,12 +1,11 @@
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 java.net.MalformedURLException;
import java.util.*;
import android.content.Context;
import android.util.Log;
import com.sap.sailing.android.shared.util.CollectionUtils;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
@@ -17,14 +16,18 @@ 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.AppConstants;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl;
import com.sap.sailing.racecommittee.app.utils.UrlHelper;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Triple;
public enum InMemoryDataStore implements DataStore {
INSTANCE;
private static String TAG = InMemoryDataStore.class.getName();
private HashMap<Serializable, EventBase> eventsById;
private HashMap<SimpleRaceLogIdentifier, ManagedRace> managedRaceById;
private HashMap<Serializable, Mark> marksById;
@@ -170,7 +173,7 @@ public enum InMemoryDataStore implements DataStore {
* 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
* @param escapedId
* serialized version of a ManagedRaceIdentifier
* @return
* corresponding SimpleRaceLogIdentifier
@@ -260,4 +263,5 @@ public enum InMemoryDataStore implements DataStore {
public void setCourseUUID(UUID uuid) {
courseUUID = uuid;
}
}
@@ -242,6 +242,12 @@ public class OfflineDataManager extends DataManager {
});
}
@Override
public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation,
boolean showMapControls) {
throw new IllegalStateException("No wind map in offline mode.");
}
@Override
public LoaderCallbacks<DataLoaderResult<Collection<CoursePosition>>> createPositionLoader(
PositionListFragment positionListFragment) {
@@ -1,9 +1,12 @@
package com.sap.sailing.racecommittee.app.data;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import android.app.LoaderManager.LoaderCallbacks;
@@ -11,8 +14,11 @@ import android.content.Context;
import android.content.Loader;
import android.os.Bundle;
import android.util.Log;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.services.sending.MessageSendingService;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.CourseBase;
@@ -24,6 +30,8 @@ import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.common.racelog.RaceLogServletConstants;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.data.handlers.CompetitorsDataHandler;
import com.sap.sailing.racecommittee.app.data.handlers.CourseBaseHandler;
@@ -48,7 +56,9 @@ import com.sap.sailing.racecommittee.app.domain.CoursePosition;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesRegattaConfigurationLoader;
import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl;
import com.sap.sailing.racecommittee.app.ui.fragments.lists.PositionListFragment;
import com.sap.sailing.racecommittee.app.utils.UrlHelper;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.ControlPointDeserializer;
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer;
@@ -68,6 +78,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.RegattaConfigurationJ
import com.sap.sailing.server.gateway.deserialization.impl.TeamJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.racegroup.impl.RaceGroupDeserializer;
import com.sap.sse.common.Util;
/**
* Enables accessing of data.
@@ -111,8 +122,9 @@ public class OnlineDataManager extends DataManager {
// ExLog.i(context, TAG, "getEventsLoader created new loader...");
return new OnlineDataLoader<Collection<EventBase>>(context, new URL(preferences.getServerBaseURL()
+ "/sailingserver/events"), parser, handler);
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/events", new ArrayList<Util.Pair>());
return new OnlineDataLoader<Collection<EventBase>>(context,
url, parser, handler);
}
}, getContext());
}
@@ -166,10 +178,11 @@ public class OnlineDataManager extends DataManager {
globalConfiguration, RaceGroupDeserializer.create(domainFactory,
RegattaConfigurationJsonDeserializer.create()));
DataHandler<Collection<ManagedRace>> handler = new ManagedRacesDataHandler(OnlineDataManager.this);
return new OnlineDataLoader<Collection<ManagedRace>>(context, new URL(preferences.getServerBaseURL()
+ "/sailingserver/rc/racegroups?" + RaceLogServletConstants.PARAM_COURSE_AREA_FILTER + "="
+ courseAreaId.toString() + "&" + RaceLogServletConstants.PARAMS_CLIENT_UUID + "="
+ MessageSendingService.uuid), parser, handler);
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair(RaceLogServletConstants.PARAM_COURSE_AREA_FILTER, courseAreaId.toString()));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_CLIENT_UUID, MessageSendingService.uuid));
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/racegroups",params);
return new OnlineDataLoader<Collection<ManagedRace>>(context, url, parser, handler);
}
}, getContext());
}
@@ -191,10 +204,12 @@ public class OnlineDataManager extends DataManager {
String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName);
String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName);
return new OnlineDataLoader<Collection<Mark>>(context, new URL(preferences.getServerBaseURL()
+ "/sailingserver/rc/marks?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "="
+ raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName
+ "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler);
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName));
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/marks", params);
return new OnlineDataLoader<Collection<Mark>>(context, url, parser, handler);
}
}, getContext());
}
@@ -218,10 +233,13 @@ public class OnlineDataManager extends DataManager {
String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName);
String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName);
return new OnlineDataLoader<CourseBase>(context, new URL(preferences.getServerBaseURL()
+ "/sailingserver/rc/currentcourse?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "="
+ raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName
+ "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler);
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName));
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/currentcourse", params);
return new OnlineDataLoader<CourseBase>(context, url, parser, handler);
}
}, getContext());
}
@@ -247,10 +265,12 @@ public class OnlineDataManager extends DataManager {
String raceColumnName = URLEncoder.encode(identifier.getRaceName(), MessageSendingService.charsetName);
String fleetName = URLEncoder.encode(identifier.getFleet().getName(), MessageSendingService.charsetName);
return new OnlineDataLoader<Collection<Competitor>>(context, new URL(preferences.getServerBaseURL()
+ "/sailingserver/rc/competitors?" + RaceLogServletConstants.PARAMS_LEADERBOARD_NAME + "="
+ raceGroupName + "&" + RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME + "=" + raceColumnName
+ "&" + RaceLogServletConstants.PARAMS_RACE_FLEET_NAME + "=" + fleetName), parser, handler);
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_LEADERBOARD_NAME, raceGroupName));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_COLUMN_NAME, raceColumnName));
params.add(new Util.Pair(RaceLogServletConstants.PARAMS_RACE_FLEET_NAME, fleetName));
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/competitors", params);
return new OnlineDataLoader<Collection<Competitor>>(context, url, parser, handler);
}
}, getContext());
}
@@ -270,8 +290,11 @@ public class OnlineDataManager extends DataManager {
String encodedIdentifier = URLEncoder.encode(identifier.getClientIdentifier(), MessageSendingService.charsetName);
encodedIdentifier = encodedIdentifier.replace("+", "%20");
return new OnlineDataLoader<DeviceConfiguration>(context, new URL(preferences.getServerBaseURL()
+ "/sailingserver/rc/configuration?client=" + encodedIdentifier), parser, handler);
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair("client", encodedIdentifier));
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/configuration", params);
return new OnlineDataLoader<DeviceConfiguration>(context,
url, parser, handler);
}
}, getContext());
}
@@ -282,4 +305,30 @@ public class OnlineDataManager extends DataManager {
// TODO Auto-generated method stub
return null;
}
@Override
public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls) {
String url = "";
// get simple race log identifier
Util.Triple<String, String, String> triple = FleetIdentifierImpl.unescape(race.getId());
SimpleRaceLogIdentifier identifier = new SimpleRaceLogIdentifierImpl(triple.getA(), triple.getB(), triple.getC());
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair("regattaLikeName", identifier.getRegattaLikeParentName()));
params.add(new Util.Pair("raceColumnName", identifier.getRaceColumnName()));
params.add(new Util.Pair("fleetName", identifier.getFleetName()));
params.add(new Util.Pair("eventId", eventId));
params.add(new Util.Pair("viewShowWindChart", showWindCharts));
params.add(new Util.Pair("viewShowStreamlets", showStreamlets));
params.add(new Util.Pair("viewShowSimulation", showSimulation));
params.add(new Util.Pair("viewShowMapControls", showMapControls));
try {
url = UrlHelper.generateUrl(AppPreferences.on(context).getServerBaseURL(), AppConstants.GWT_MAP_AND_WIND_CHART_HTML, params).toString();
} catch (MalformedURLException e) {
Log.e(TAG, "An error occured while generating the map url: " + e.getMessage());
}
return url;
}
}
@@ -149,4 +149,6 @@ public interface ReadonlyDataManager {
*/
public LoaderCallbacks<DataLoaderResult<DeviceConfiguration>> createConfigurationLoader(DeviceConfigurationIdentifier identifier,
LoadClient<DeviceConfiguration> callback);
public String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls);
}
@@ -116,7 +116,7 @@ public class DependentRaceSpinnerAdapter implements SpinnerAdapter {
@Override
public int getViewTypeCount() {
return 2;
return 1;
}
@Override
@@ -30,6 +30,7 @@ public class MainPreferenceFragment extends LoggableFragment implements OnClickL
for (int i = 0; i < layout.getChildCount(); i++) {
Button button = (Button) layout.getChildAt(i);
button.setTextColor(getResources().getColor(R.color.white));
if (button != null) {
button.setOnClickListener(this);
}
@@ -32,7 +32,7 @@ public class UrlEditTextPreference extends EditTextPreference {
private String normalizeUrl(String url) {
// add missing protocol
if (!url.startsWith("http://") && !url.startsWith("https://")) {
if (!url.startsWith("http://") || !url.startsWith("https://")) {
url = "http://" + url;
}
@@ -0,0 +1,19 @@
package com.sap.sailing.racecommittee.app.utils;
import android.net.Uri;
import com.sap.sse.common.Util;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
public class UrlHelper {
public static URL generateUrl(String baseURL, String path, List<Util.Pair> params) throws MalformedURLException {
Uri.Builder builder = Uri.parse(baseURL).buildUpon();
builder.path(path);
for (Util.Pair param : params){
builder.appendQueryParameter("" + param.getA(), "" + param.getB());
}
return new URL(builder.build().toString());
}
}
@@ -6,12 +6,12 @@ import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import com.sap.sailing.android.shared.data.http.HttpGetRequest;
import com.sap.sailing.android.shared.util.NetworkHelper;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.impl.SimpleRaceLogIdentifierImpl;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.DataStore;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.impl.FleetIdentifierImpl;
import com.sap.sse.common.Util;
@@ -21,22 +21,19 @@ import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class WindHelper {
private static String TAG = WindHelper.class.getName();
private final static String GWT_MAP_AND_WIND_CHART_HTML = "/gwt/EmbeddedMapAndWindChart.html";
public static void isTrackedRace(final Context context, final ManagedRace race){
try {
Util.Triple<String, String, String> triple = FleetIdentifierImpl.unescape(race.getId());
StringBuilder builder = new StringBuilder();
builder.append(getBaseUrl(context));
builder.append("/sailingserver/api/v1/events/");
builder.append(getEventId(context));
builder.append("/racestates");
builder.append("?filterByLeaderboard=" + triple.getA());
URL serverUrl = new URL(builder.toString());
String path = "/sailingserver/api/v1/events/"+ getEventId(context) + "/racestates";
List<Util.Pair> params = new ArrayList<>();
params.add(new Util.Pair("filterByLeaderboard", triple.getA()));
URL serverUrl = UrlHelper.generateUrl(getBaseUrl(context), path, params);
HttpGetRequest request = new HttpGetRequest(serverUrl, context);
NetworkHelper.getInstance(context).executeHttpJsonRequestAsnchronously(request, new NetworkHelper.NetworkHelperSuccessListener() {
@@ -103,22 +100,7 @@ public class WindHelper {
}
public static String generateMapURL(Context context, ManagedRace race ,boolean showWindCharts, boolean showStreamlets, boolean showSimulation, boolean showMapControls){
StringBuilder builder = new StringBuilder();
// get simple race log identifier
Util.Triple<String, String, String> triple = FleetIdentifierImpl.unescape(race.getId());
SimpleRaceLogIdentifier identifier = new SimpleRaceLogIdentifierImpl(triple.getA(), triple.getB(), triple.getC());
builder.append(getBaseUrl(context));
builder.append(GWT_MAP_AND_WIND_CHART_HTML);
builder.append("?regattaLikeName=" + identifier.getRegattaLikeParentName());
builder.append("&raceColumnName=" + identifier.getRaceColumnName());
builder.append("&fleetName=" + identifier.getFleetName());
builder.append("&eventId=" + getEventId(context));
builder.append("&viewShowWindChart=" + showWindCharts);
builder.append("&viewShowStreamlets=" + showStreamlets);
builder.append("&viewShowSimulation=" + showSimulation);
builder.append("&viewShowMapControls=" + showMapControls);
return builder.toString();
ReadonlyDataManager dataManager = OnlineDataManager.create(context);
return dataManager.getMapUrl(AppPreferences.on(context).getServerBaseURL(), race, getEventId(context), showWindCharts, showStreamlets, showSimulation, showMapControls);
}
}