trying to include DeviceConfiguration UUID handling in Race Manager App

Change-Id: Iee95cf0ce14c340018b369621a7d50c5a90f4150
This commit is contained in:
Axel Uhl
2019-03-01 18:06:55 +01:00
parent 0fcfe1ee3f
commit 4ad7872967
25 changed files with 47 additions and 22 deletions
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.common.impl;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* This class is used by our backend, in GWT-client code and by the Android app. Therefore we cannot use classes like
@@ -16,19 +17,20 @@ public class DeviceConfigurationQRCodeUtils {
public static class DeviceConfigurationDetails {
private final String apkUrl;
private final String deviceIdentifier;
private final UUID uuid;
private final String accessToken;
public DeviceConfigurationDetails(String apkUrl, String deviceIdentifier, String accessToken) {
public DeviceConfigurationDetails(String apkUrl, UUID uuid, String deviceConfigurationName, String accessToken) {
super();
this.apkUrl = apkUrl;
this.deviceIdentifier = deviceIdentifier;
this.uuid = uuid;
this.deviceIdentifier = deviceConfigurationName;
this.accessToken = accessToken;
}
public String getApkUrl() {
return apkUrl;
}
public String getDeviceIdentifier() {
return deviceIdentifier;
}
public UUID getUuid() { return uuid; }
public String getDeviceIdentifier() { return deviceIdentifier; }
public String getAccessToken() {
return accessToken;
}
@@ -61,7 +63,10 @@ public class DeviceConfigurationQRCodeUtils {
throw new IllegalArgumentException("Device identifier missing from QR code contents");
}
String apkUrl = qrCodeContent.substring(0, fragmentIndex);
return new DeviceConfigurationDetails(apkUrl, paramMap.get(deviceIdentifierKey), paramMap.get(accessTokenKey));
return new DeviceConfigurationDetails(apkUrl,
paramMap.get(deviceUuidKey) == null ? null : UUID.fromString(paramMap.get(deviceUuidKey)),
paramMap.get(deviceIdentifierKey) == null ? null : paramMap.get(deviceIdentifierKey),
paramMap.get(accessTokenKey));
}
}
@@ -14,7 +14,7 @@
but there can be other i18n bundles.
the build script switches references to *AllPermutations*
to *SinglePermutation* in gwt modules with the "-b" option.
to *AllPermutations* in gwt modules with the "-b" option.
-->
View File
View File
+1
View File
@@ -2,6 +2,7 @@
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="preference_identifier_key" translatable="false">identifierPreference</string>
<string name="preference_config_uuid_key" translatable="false">configUuidPreference</string>
<string name="preference_sync_key" translatable="false">syncConnectionPreference</string>
<string name="preference_update_key" translatable="false">forceUpdatePreference</string>
@@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
/**
* Wrapper for {@link SharedPreferences} for all hidden and non-hidden preferences and state variables.
@@ -166,6 +167,11 @@ public class AppPreferences {
return TextUtils.isEmpty(identifier) ? defaultValue : identifier;
}
public UUID getDeviceConfigurationUuid() {
final String uuidAsString = helper.getString(key(R.string.preference_config_uuid_key), "");
return TextUtils.isEmpty(uuidAsString) ? null : UUID.fromString(uuidAsString);
}
public boolean getGateStartHasAdditionalGolfDownTime() {
return helper.getBoolean(key(R.string.preference_racing_procedure_gatestart_hasadditionalgolfdowntime_key),
true);
@@ -277,7 +277,7 @@ public class OfflineDataManager extends DataManager {
@Override
public LoaderCallbacks<DataLoaderResult<DeviceConfiguration>> createConfigurationLoader(
String deviceConfigurationName, LoadClient<DeviceConfiguration> callback) {
String deviceConfigurationName, UUID deviceConfigurationUuid, LoadClient<DeviceConfiguration> callback) {
return new ImmediateDataLoaderCallbacks<DeviceConfiguration>(context, callback,
new Callable<DeviceConfiguration>() {
@Override
@@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Callable;
import com.sap.sailing.android.shared.logging.ExLog;
@@ -337,7 +338,7 @@ public class OnlineDataManager extends DataManager {
@Override
public LoaderCallbacks<DataLoaderResult<DeviceConfiguration>> createConfigurationLoader(
final String deviceConfigurationName, LoadClient<DeviceConfiguration> callback) {
final String deviceConfigurationName, UUID deviceConfigurationUuid, LoadClient<DeviceConfiguration> callback) {
return new DataLoaderCallbacks<>(callback, new LoaderCreator<DeviceConfiguration>() {
@Override
public Loader<DataLoaderResult<DeviceConfiguration>> create(int id, Bundle args) throws Exception {
@@ -346,7 +347,12 @@ public class OnlineDataManager extends DataManager {
DataParser<DeviceConfiguration> parser = new DeviceConfigurationParser(
DeviceConfigurationJsonDeserializer.create());
List<Util.Pair<String, Object>> params = new ArrayList<>();
params.add(new Util.Pair<String, Object>("client", deviceConfigurationName));
if (deviceConfigurationName != null) {
params.add(new Util.Pair<String, Object>("client", deviceConfigurationName));
}
if (deviceConfigurationUuid != null) {
params.add(new Util.Pair<String, Object>("uuid", deviceConfigurationUuid.toString()));
}
URL url = UrlHelper.generateUrl(preferences.getServerBaseURL(), "/sailingserver/rc/configuration", params);
return new OnlineDataLoader<>(context, url, parser, handler);
}
@@ -3,6 +3,7 @@ package com.sap.sailing.racecommittee.app.data;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.UUID;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
@@ -167,6 +168,8 @@ public interface ReadonlyDataManager {
/**
* Creates a new {@link LoaderCallbacks} object for loading a client's configuration.
*
*
* @param deviceConfigurationUuid
* @param callback
* {@link LoadClient} implementing your data handling code.
* @return {@link LoaderCallbacks} to be used in
@@ -174,7 +177,7 @@ public interface ReadonlyDataManager {
* {@link LoaderManager#restartLoader(int, android.os.Bundle, LoaderCallbacks)}.
*/
LoaderCallbacks<DataLoaderResult<DeviceConfiguration>> createConfigurationLoader(
String configurationName, LoadClient<DeviceConfiguration> callback);
String deviceConfigurationName, UUID deviceConfigurationUuid, LoadClient<DeviceConfiguration> callback);
String getMapUrl(String baseUrl, ManagedRace race, String eventId, boolean showWindCharts, boolean showStreamlets,
boolean showSimulation, boolean showMapControls);
@@ -401,8 +401,9 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener
private void setupDataManager() {
showProgressSpinner();
String deviceConfigurationName = AppPreferences.on(getApplicationContext()).getDeviceConfigurationName();
UUID deviceConfigurationUuid = AppPreferences.on(getApplicationContext()).getDeviceConfigurationUuid();
LoaderCallbacks<?> configurationLoader = dataManager.createConfigurationLoader(deviceConfigurationName,
new LoadClient<DeviceConfiguration>() {
deviceConfigurationUuid, new LoadClient<DeviceConfiguration>() {
@Override
public void onLoadFailed(Exception reason) {
dismissProgressSpinner();
@@ -40,6 +40,7 @@ import com.sap.sailing.racecommittee.app.ui.views.decoration.PreferenceMarginIte
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class MainPreferenceFragment extends LoggableFragment {
@@ -72,9 +73,10 @@ public class MainPreferenceFragment extends LoggableFragment {
new Runnable() {
@Override
public void run() {
String configurationName = AppPreferences.on(getActivity()).getDeviceConfigurationName();
String deviceConfigurationName = AppPreferences.on(getActivity()).getDeviceConfigurationName();
UUID deviceConfigurationUuid = AppPreferences.on(getActivity()).getDeviceConfigurationUuid();
LoaderManager.LoaderCallbacks<?> configurationLoader = DataManager.create(getActivity())
.createConfigurationLoader(configurationName, new LoadClient<DeviceConfiguration>() {
.createConfigurationLoader(deviceConfigurationName, deviceConfigurationUuid, new LoadClient<DeviceConfiguration>() {
@Override
public void onLoadFailed(Exception reason) {
@@ -1,7 +1,9 @@
package com.sap.sailing.racecommittee.app.utils;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.widget.Toast;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.domain.common.impl.DeviceConfigurationQRCodeUtils;
@@ -10,10 +12,9 @@ import com.sap.sailing.domain.common.impl.DeviceConfigurationQRCodeUtils.URLDeco
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.utils.autoupdate.AutoUpdater;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.UUID;
public class QRHelper {
private static final String TAG = QRHelper.class.getName();
@@ -43,19 +44,19 @@ public class QRHelper {
});
String identifier = connectionConfiguration.getDeviceIdentifier();
UUID uuid = connectionConfiguration.getUuid();
URL apkUrl = UrlHelper.tryConvertToURL(connectionConfiguration.getApkUrl());
String accessToken = connectionConfiguration.getAccessToken();
if (apkUrl != null) {
String serverUrl = UrlHelper.getServerUrl(apkUrl);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(mContext.getString(R.string.preference_identifier_key), identifier);
editor.putString(mContext.getString(R.string.preference_config_uuid_key), uuid==null?null:uuid.toString());
editor.putString(mContext.getString(R.string.preference_server_url_key), serverUrl);
editor.putString(mContext.getString(R.string.preference_access_token_key), accessToken);
editor.apply();
new AutoUpdater(mContext).checkForUpdate(false);
return true;
} else {