mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-27 06:17:27 +00:00
TRACKING APP: Unique device id
This commit is contained in:
1 parent
14c460ac56
commit
57160e427b
12 files changed
+89
-28
No files matched your search
@@ -17,6 +17,7 @@
|
||||
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
||||
<uses-permission android:name="com.sap.sailing.android.tracking.app.permission.C2D_MESSAGE" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<string name="options_menu_settings">Einstellungen</string>
|
||||
<string name="options_menu_checkout">Checkout</string>
|
||||
<string name="settings_category_general">General</string>
|
||||
<string name="settings_category_connection">Verbindung</string>
|
||||
<string name="settings_category_other">Andere Einstellungen</string>
|
||||
<string name="scan_hint">Der QR-Code befindet sich auf Ihrer Teilnahmebestätigung</string>
|
||||
<string name="server_url">Server</string>
|
||||
<string name="device_identifier">Geräte-ID</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
|
||||
<string name="preference_device_identifier_key">deviceIdentifier</string>
|
||||
<string name="preference_device_identifier_default">147d8230-4db0-11e4-916c-0800200c9a66</string>
|
||||
<string name="preference_device_identifier_default"></string>
|
||||
|
||||
<!-- override default values of android.shared -->
|
||||
<string name="app_folder">tracking</string>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<string name="options_menu_settings">Settings</string>
|
||||
<string name="settings_category_general">General</string>
|
||||
<string name="options_menu_checkout">Checkout</string>
|
||||
<string name="settings_category_connection">Connection</string>
|
||||
<string name="settings_category_other">Other Settings</string>
|
||||
<string name="server_url">Server</string>
|
||||
<string name="device_identifier">Device Identifier</string>
|
||||
<string name="play_services_available">Google Play services is available</string>
|
||||
|
||||
@@ -14,25 +14,12 @@
|
||||
</PreferenceCategory>
|
||||
|
||||
<!-- Connection -->
|
||||
<PreferenceCategory android:title="@string/settings_category_connection" >
|
||||
<PreferenceCategory android:title="@string/settings_category_other" >
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/preference_device_identifier_default"
|
||||
android:key="@string/preference_device_identifier_key"
|
||||
android:summary="@string/empty"
|
||||
android:title="@string/device_identifier" />
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/preference_server_url_default"
|
||||
android:key="@string/preference_server_url_key"
|
||||
android:summary="@string/empty"
|
||||
android:title="@string/server_url" />
|
||||
|
||||
<EditTextPreference
|
||||
android:defaultValue="@string/preference_gps_fix_interval_ms_default"
|
||||
android:key="@string/preference_gps_fix_interval_ms_key"
|
||||
android:summary="@string/empty"
|
||||
android:title="@string/gps_fix_interval"
|
||||
android:inputType="number"
|
||||
/>
|
||||
android:title="@string/device_identifier" android:selectable="false"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
+2
-2
@@ -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());
|
||||
|
||||
+2
-1
@@ -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();
|
||||
}
|
||||
|
||||
+2
-1
@@ -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(
|
||||
|
||||
+8
-1
@@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
+22
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+8
-1
@@ -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() {
|
||||
|
||||
+39
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user