TRACKING APP: Unique device id

This commit is contained in:
Lukas Zielinski committed 2014-11-26 14:08:01 +01:00
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>
@@ -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());
@@ -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();
}
@@ -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(
@@ -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();
}
});
@@ -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);
}
}
}
@@ -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() {
@@ -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;
}
}