diff --git a/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml b/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml
index b42fd500b2f..34390ae2114 100644
--- a/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml
@@ -17,6 +17,7 @@
+
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml b/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml
index 132c995d6a3..89082985253 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml
@@ -8,7 +8,7 @@
Einstellungen
Checkout
General
- Verbindung
+ Andere Einstellungen
Der QR-Code befindet sich auf Ihrer Teilnahmebestätigung
Server
Geräte-ID
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml b/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml
index 92f1a381dcd..be7d612f471 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values/preferences.xml
@@ -1,7 +1,7 @@
deviceIdentifier
- 147d8230-4db0-11e4-916c-0800200c9a66
+
tracking
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml b/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml
index cbebb878075..430af7cb180 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml
@@ -9,7 +9,7 @@
Settings
General
Checkout
- Connection
+ Other Settings
Server
Device Identifier
Google Play services is available
diff --git a/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml b/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml
index 0cc132abe6d..d3b518f23d9 100644
--- a/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml
+++ b/mobile/com.sap.sailing.android.tracking.app/res/xml/preference_general.xml
@@ -14,25 +14,12 @@
-
+
-
-
-
+ android:title="@string/device_identifier" android:selectable="false"/>
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java
index b75c481299f..fbdf9b7ca45 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java
@@ -34,6 +34,7 @@ import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.SensorGps;
import com.sap.sailing.android.tracking.app.ui.activities.RegattaActivity;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
+import com.sap.sailing.android.tracking.app.utils.UniqueDeviceUuid;
import com.sap.sailing.server.gateway.deserialization.impl.FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer;
public class TrackingService extends Service implements ConnectionCallbacks, OnConnectionFailedListener,
@@ -159,8 +160,7 @@ public class TrackingService extends Service implements ConnectionCallbacks, OnC
JSONObject json = new JSONObject();
try {
- json.put(FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.DEVICE_UUID,
- prefs.getDeviceIdentifier());
+ json.put(FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.DEVICE_UUID, UniqueDeviceUuid.getUniqueId(this));
JSONArray fixes = new JSONArray();
JSONObject fix = new JSONObject();
fix.put(FlatSmartphoneUuidAndGPSFixMovingJsonDeserializer.LAT_DEG, location.getLatitude());
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java
index 869bbfe08fe..442c5d68d75 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java
@@ -35,6 +35,7 @@ import com.sap.sailing.android.tracking.app.services.TrackingService.GPSQualityL
import com.sap.sailing.android.tracking.app.services.TrackingService.TrackingBinder;
import com.sap.sailing.android.tracking.app.services.sending.ConnectivityChangedReceiver;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
+import com.sap.sailing.android.tracking.app.utils.UniqueDeviceUuid;
import com.sap.sailing.android.tracking.app.utils.VolleyHelper;
/**
@@ -299,7 +300,7 @@ public class TransmittingService extends Service {
try {
requestObject.put("fixes", jsonArray);
- requestObject.put("deviceUuid", prefs.getDeviceIdentifier());
+ requestObject.put("deviceUuid", UniqueDeviceUuid.getUniqueId(this));
} catch (JSONException e) {
e.printStackTrace();
}
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/RegattaActivity.java
index 4a44ce74036..2228d7be3f6 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/RegattaActivity.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/RegattaActivity.java
@@ -47,6 +47,7 @@ import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Competito
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
import com.sap.sailing.android.tracking.app.ui.fragments.RegattaFragment;
+import com.sap.sailing.android.tracking.app.utils.UniqueDeviceUuid;
import com.sap.sailing.android.tracking.app.utils.VolleyHelper;
public class RegattaActivity extends BaseActivity {
@@ -348,7 +349,7 @@ public class RegattaActivity extends BaseActivity {
JSONObject checkoutData = new JSONObject();
try {
checkoutData.put("competitorId", competitorId);
- checkoutData.put("deviceUuid", prefs.getDeviceIdentifier());
+ checkoutData.put("deviceUuid", UniqueDeviceUuid.getUniqueId(this));
checkoutData.put("toMillis", String.valueOf(System.currentTimeMillis()));
} catch (JSONException e) {
showErrorPopup(
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/HomeFragment.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/HomeFragment.java
index b8d9f9444ce..f6b675c35c3 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/HomeFragment.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/HomeFragment.java
@@ -56,6 +56,7 @@ import com.sap.sailing.android.tracking.app.ui.activities.RegattaActivity;
import com.sap.sailing.android.tracking.app.ui.activities.StartActivity;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
import com.sap.sailing.android.tracking.app.utils.CheckinHelper;
+import com.sap.sailing.android.tracking.app.utils.UniqueDeviceUuid;
import com.sap.sailing.android.tracking.app.utils.VolleyHelper;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.impl.SmartphoneUUIDIdentifierImpl;
@@ -192,7 +193,7 @@ public class HomeFragment extends BaseFragment implements
final String leaderboardName = leaderboardNameFromQR;
final DeviceIdentifier deviceUuid = new SmartphoneUUIDIdentifierImpl(
- UUID.fromString(prefs.getDeviceIdentifier()));
+ UUID.fromString(UniqueDeviceUuid.getUniqueId(this.getActivity())));
// There are 5 Stages after the QR-Code scan is complete:
// 1. Get Event
@@ -227,6 +228,7 @@ public class HomeFragment extends BaseFragment implements
"Error getting data from call on URL: "
+ getLeaderboardUrl + ", Error: "
+ e.getMessage());
+ startActivity.dismissProgressDialog();
displayAPIErrorRecommendRetry();
return;
}
@@ -346,7 +348,9 @@ public class HomeFragment extends BaseFragment implements
TAG,
"Failed to get competitor from API: "
+ error.getMessage());
+ startActivity.dismissProgressDialog();
displayAPIErrorRecommendRetry();
+ return;
}
});
@@ -361,7 +365,9 @@ public class HomeFragment extends BaseFragment implements
ExLog.e(getActivity(), TAG,
"Failed to get leaderboard from API: "
+ error.getMessage());
+ startActivity.dismissProgressDialog();
displayAPIErrorRecommendRetry();
+ return;
}
});
@@ -375,6 +381,7 @@ public class HomeFragment extends BaseFragment implements
TAG,
"Failed to get event from API: "
+ error.getMessage());
+ startActivity.dismissProgressDialog();
displayAPIErrorRecommendRetry();
}
});
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/preference/GeneralPreferenceFragment.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/preference/GeneralPreferenceFragment.java
index 8036339364d..9635fadfc94 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/preference/GeneralPreferenceFragment.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/preference/GeneralPreferenceFragment.java
@@ -2,18 +2,36 @@ package com.sap.sailing.android.tracking.app.ui.fragments.preference;
import android.os.Bundle;
+import android.preference.Preference;
import com.sap.sailing.android.shared.ui.fragments.preference.BasePreferenceFragment;
import com.sap.sailing.android.tracking.app.R;
+import com.sap.sailing.android.tracking.app.utils.AppPreferences;
+import com.sap.sailing.android.tracking.app.utils.UniqueDeviceUuid;
public class GeneralPreferenceFragment extends BasePreferenceFragment {
-
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_general);
- bindPreferenceSummaryToValue(findPreference(R.string.preference_device_identifier_key));
- bindPreferenceSummaryToValue(findPreference(R.string.preference_server_url_key));
- bindPreferenceSummaryToValue(findPreference(R.string.preference_gps_fix_interval_ms_key));
+
+ AppPreferences prefs = new AppPreferences(getActivity());
+ String currentDeviceId = prefs.getDeviceIdentifier();
+
+ Preference deviceIdPreference = (Preference) findPreference(getString(R.string.preference_device_identifier_key));
+
+ if (currentDeviceId != null && currentDeviceId.length() > 0)
+ {
+ deviceIdPreference.setSummary(currentDeviceId);
+ }
+ else
+ {
+ // this would, in most caes, be set elsewhere, but since we don't want to show an empty summary,
+ // we can just set it here. (UniqueDeviceUuid.getUniqueId sets it in prefs.)
+ String newDeviceId = UniqueDeviceUuid.getUniqueId(getActivity());
+ deviceIdPreference.setSummary(newDeviceId);
+ }
}
+
}
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java
index 74816326327..398ece6fc45 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/AppPreferences.java
@@ -18,10 +18,17 @@ public class AppPreferences {
this.context = context;
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
}
+
+ public void setDeviceIdentifier(String deviceId)
+ {
+ preferences.edit().putString(context.getString(R.string.preference_device_identifier_key), deviceId).commit();
+ }
public String getDeviceIdentifier() {
- return PrefUtils.getString(context, R.string.preference_device_identifier_key,
+ String DeviceIdentifier = PrefUtils.getString(context, R.string.preference_device_identifier_key,
R.string.preference_device_identifier_default);
+ System.out.println("Get DEVice Identifier: " + DeviceIdentifier);
+ return DeviceIdentifier;
}
public String getServerURL() {
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/UniqueDeviceUuid.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/UniqueDeviceUuid.java
new file mode 100644
index 00000000000..3c7df0474a4
--- /dev/null
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/utils/UniqueDeviceUuid.java
@@ -0,0 +1,39 @@
+package com.sap.sailing.android.tracking.app.utils;
+
+import java.util.UUID;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+
+/**
+ * I'm picking a device id based on this reply on Stack Overflow: http://stackoverflow.com/a/2853253/3589281
+ * @author lukas
+ *
+ */
+public class UniqueDeviceUuid {
+
+ public static String getUniqueId(Context context)
+ {
+ AppPreferences prefs = new AppPreferences(context);
+ String existingDeviceIdentifier = prefs.getDeviceIdentifier();
+
+ if (existingDeviceIdentifier != null && existingDeviceIdentifier.length() > 0)
+ {
+ return existingDeviceIdentifier;
+ }
+
+ final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+
+ final String tmDevice, tmSerial, androidId;
+ tmDevice = "" + tm.getDeviceId();
+ tmSerial = "" + tm.getSimSerialNumber();
+ androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
+
+ UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
+ String deviceId = deviceUuid.toString();
+
+ prefs.setDeviceIdentifier(deviceId);
+
+ return deviceId;
+ }
+}