diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml
index 960e631e9..ca42cc92d 100644
--- a/MyTracks/res/values/keys.xml
+++ b/MyTracks/res/values/keys.xml
@@ -55,8 +55,8 @@ limitations under the License.
autoResumeTrackCurrentRetry
- recordingTrack
- selectedTrack
+ recordingTrackId
+ selectedTrackId
antOptions
diff --git a/MyTracks/src/com/google/android/apps/mytracks/ExportAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/ExportAsyncTask.java
index 71d8a6e08..1ac312a6c 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/ExportAsyncTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/ExportAsyncTask.java
@@ -21,11 +21,11 @@ import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.io.file.TrackWriter;
import com.google.android.apps.mytracks.io.file.TrackWriterFactory;
import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileFormat;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.SystemUtils;
import com.google.android.maps.mytracks.R;
import android.content.Context;
-import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.PowerManager.WakeLock;
@@ -65,13 +65,8 @@ public class ExportAsyncTask extends AsyncTask {
context = exportActivity.getApplicationContext();
myTracksProviderUtils = MyTracksProviderUtils.Factory.get(exportActivity);
- SharedPreferences sharedPreferences = exportActivity.getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- long recordingTrackId = sharedPreferences.getLong(
- exportActivity.getString(R.string.recording_track_key), -1L);
-
// Get the wake lock if not recording
- if (recordingTrackId == -1L) {
+ if (PreferencesUtils.getRecordingTrackId(exportActivity) == -1L) {
wakeLock = SystemUtils.acquireWakeLock(exportActivity, wakeLock);
}
success = false;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/ImportAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/ImportAsyncTask.java
index e5c82a2b4..7c6d69927 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/ImportAsyncTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/ImportAsyncTask.java
@@ -19,11 +19,9 @@ package com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.io.file.GpxImporter;
import com.google.android.apps.mytracks.util.FileUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.SystemUtils;
-import com.google.android.maps.mytracks.R;
-import android.content.Context;
-import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.PowerManager.WakeLock;
import android.util.Log;
@@ -82,13 +80,9 @@ public class ImportAsyncTask extends AsyncTask {
this.path = path;
myTracksProviderUtils = MyTracksProviderUtils.Factory.get(importActivity);
- SharedPreferences sharedPreferences = importActivity.getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- long recordingTrackId = sharedPreferences.getLong(
- importActivity.getString(R.string.recording_track_key), -1L);
// Get the wake lock if not recording
- if (recordingTrackId == -1L) {
+ if (PreferencesUtils.getRecordingTrackId(importActivity) == -1L) {
wakeLock = SystemUtils.acquireWakeLock(importActivity, wakeLock);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java
index e049148ac..e45475ede 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java
@@ -24,6 +24,7 @@ import com.google.android.apps.mytracks.services.sensors.ant.AntUtils;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.BluetoothDeviceUtils;
import com.google.android.apps.mytracks.util.DialogUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R;
@@ -345,8 +346,7 @@ public class SettingsActivity extends PreferenceActivity {
// If recording, disable backup/restore/reset
// (we don't want to get to inconsistent states)
- boolean recording =
- preferences.getLong(getString(R.string.recording_track_key), -1) != -1;
+ boolean recording = PreferencesUtils.getRecordingTrackId(this) != -1;
backupNowPreference.setEnabled(!recording);
restoreNowPreference.setEnabled(!recording);
resetPreference.setEnabled(!recording);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index 8f4a31024..01d0b151b 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -37,6 +37,7 @@ import com.google.android.apps.mytracks.services.ServiceUtils;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.util.AnalyticsUtils;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -102,7 +103,7 @@ public class TrackDetailActivity extends FragmentActivity {
@Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
// Note that key can be null
- if (getString(R.string.recording_track_key).equals(key)) {
+ if (PreferencesUtils.getRecordingTrackIdKey(TrackDetailActivity.this).equals(key)) {
updateMenu();
}
}
@@ -446,8 +447,7 @@ public class TrackDetailActivity extends FragmentActivity {
* Updates the menu.
*/
private void updateMenu() {
- updateMenuItems(
- trackId == sharedPreferences.getLong(getString(R.string.recording_track_key), -1L));
+ updateMenuItems(trackId == PreferencesUtils.getRecordingTrackId(this));
}
/**
@@ -508,8 +508,7 @@ public class TrackDetailActivity extends FragmentActivity {
* Returns true if recording.
*/
private boolean isRecording() {
- return ServiceUtils.isRecording(
- this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences);
+ return ServiceUtils.isRecording(this, trackRecordingServiceConnection.getServiceIfBound());
}
/**
@@ -528,7 +527,7 @@ public class TrackDetailActivity extends FragmentActivity {
}
trackRecordingServiceConnection.stop();
- long recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L);
+ long recordingTrackId = PreferencesUtils.getRecordingTrackId(this);
if (recordingTrackId != -1L) {
Intent intent = new Intent(this, TrackEditActivity.class)
.putExtra(TrackEditActivity.EXTRA_SHOW_CANCEL, false)
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
index 0e35293e5..1a47a3f0c 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
@@ -26,6 +26,7 @@ import com.google.android.apps.mytracks.services.ServiceUtils;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.EulaUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
@@ -115,8 +116,8 @@ public class TrackListActivity extends FragmentActivity {
if (getString(R.string.metric_units_key).equals(key)) {
metricUnits = preferences.getBoolean(getString(R.string.metric_units_key), true);
}
- if (getString(R.string.recording_track_key).equals(key)) {
- recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L);
+ if (PreferencesUtils.getRecordingTrackIdKey(TrackListActivity.this).equals(key)) {
+ recordingTrackId = PreferencesUtils.getRecordingTrackId(TrackListActivity.this);
if (isRecording()) {
trackRecordingServiceConnection.startAndBind();
}
@@ -136,7 +137,6 @@ public class TrackListActivity extends FragmentActivity {
};
private TrackRecordingServiceConnection trackRecordingServiceConnection;
- private SharedPreferences sharedPreferences;
private boolean metricUnits;
private long recordingTrackId;
private ListView listView;
@@ -162,10 +162,11 @@ public class TrackListActivity extends FragmentActivity {
trackRecordingServiceConnection = new TrackRecordingServiceConnection(
this, bindChangedCallback);
- sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ SharedPreferences sharedPreferences = getSharedPreferences(
+ Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
metricUnits = sharedPreferences.getBoolean(getString(R.string.metric_units_key), true);
- recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L);
+ recordingTrackId = PreferencesUtils.getRecordingTrackId(this);
listView = (ListView) findViewById(R.id.track_list);
listView.setOnItemClickListener(new OnItemClickListener() {
@@ -421,8 +422,7 @@ public class TrackListActivity extends FragmentActivity {
* Returns true if recording.
*/
private boolean isRecording() {
- return ServiceUtils.isRecording(
- this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences);
+ return ServiceUtils.isRecording(this, trackRecordingServiceConnection.getServiceIfBound());
}
/**
diff --git a/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java b/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java
index 7ef0dae1f..e761e9947 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/WaypointsList.java
@@ -25,15 +25,14 @@ import com.google.android.apps.mytracks.content.WaypointsColumns;
import com.google.android.apps.mytracks.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.util.DialogUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
import android.app.Dialog;
import android.app.ListActivity;
-import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.os.RemoteException;
@@ -156,19 +155,11 @@ public class WaypointsList extends ListActivity implements View.OnClickListener
insertStatisticsButton =
(Button) findViewById(R.id.waypointslist_btn_insert_statistics);
insertStatisticsButton.setOnClickListener(this);
- SharedPreferences preferences = getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- // TODO: Get rid of selected and recording track IDs
- long selectedTrackId = -1;
- if (preferences != null) {
- recordingTrackId =
- preferences.getLong(getString(R.string.recording_track_key), -1);
- selectedTrackId =
- preferences.getLong(getString(R.string.selected_track_key), -1);
- }
- boolean selectedRecording = selectedTrackId > 0
- && selectedTrackId == recordingTrackId;
+ recordingTrackId = PreferencesUtils.getRecordingTrackId(this);
+
+ long selectedTrackId = PreferencesUtils.getSelectedTrackId(this);
+ boolean selectedRecording = selectedTrackId != -1L && selectedTrackId == recordingTrackId;
insertWaypointButton.setEnabled(selectedRecording);
insertStatisticsButton.setEnabled(selectedRecording);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java
index 4060acff8..297d29258 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java
@@ -28,8 +28,8 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils.DoubleBuff
import com.google.android.apps.mytracks.content.MyTracksProviderUtils.LocationIterator;
import com.google.android.apps.mytracks.content.TrackDataListener.ProviderState;
import com.google.android.apps.mytracks.content.TrackDataListeners.ListenerRegistration;
-import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.LocationUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -59,8 +59,6 @@ import java.util.Set;
public class TrackDataHub {
// Preference keys
- private final String SELECTED_TRACK_KEY;
- private final String RECORDING_TRACK_KEY;
private final String MIN_REQUIRED_ACCURACY_KEY;
private final String METRIC_UNITS_KEY;
private final String SPEED_REPORTING_KEY;
@@ -223,8 +221,6 @@ public class TrackDataHub {
this.targetNumPoints = targetNumPoints;
this.locationFactory = new DoubleBufferedLocationFactory();
- SELECTED_TRACK_KEY = context.getString(R.string.selected_track_key);
- RECORDING_TRACK_KEY = context.getString(R.string.recording_track_key);
MIN_REQUIRED_ACCURACY_KEY = context.getString(R.string.min_required_accuracy_key);
METRIC_UNITS_KEY = context.getString(R.string.metric_units_key);
SPEED_REPORTING_KEY = context.getString(R.string.report_speed_key);
@@ -302,7 +298,7 @@ public class TrackDataHub {
}
private void loadSharedPreferences() {
- selectedTrackId = preferences.getLong(SELECTED_TRACK_KEY, -1);
+ selectedTrackId = PreferencesUtils.getSelectedTrackId(context);
useMetricUnits = preferences.getBoolean(METRIC_UNITS_KEY, true);
reportSpeed = preferences.getBoolean(SPEED_REPORTING_KEY, true);
minRequiredAccuracy = preferences.getInt(MIN_REQUIRED_ACCURACY_KEY,
@@ -380,8 +376,8 @@ public class TrackDataHub {
if (!isStarted()) {
loadSharedPreferences();
}
- long recordingTrackId = preferences.getLong(RECORDING_TRACK_KEY, -1);
- return recordingTrackId > 0 && recordingTrackId == selectedTrackId;
+ long recordingTrackId = PreferencesUtils.getRecordingTrackId(context);
+ return recordingTrackId != -1L && recordingTrackId == selectedTrackId;
}
/**
@@ -399,8 +395,7 @@ public class TrackDataHub {
// Save the selection to memory and flush.
selectedTrackId = trackId;
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(
- preferences.edit().putLong(SELECTED_TRACK_KEY, trackId));
+ PreferencesUtils.setSelectedTrackId(context, selectedTrackId);
// Force it to reload data from the beginning.
Log.d(TAG, "Loading track");
@@ -627,9 +622,8 @@ public class TrackDataHub {
} else if (SPEED_REPORTING_KEY.equals(key)) {
reportSpeed = preferences.getBoolean(SPEED_REPORTING_KEY, true);
notifySpeedReportingChanged();
- } else if (SELECTED_TRACK_KEY.equals(key)) {
- long trackId = preferences.getLong(SELECTED_TRACK_KEY, -1);
- loadTrack(trackId);
+ } else if (PreferencesUtils.getSelectedTrackIdKey(context).equals(key)) {
+ loadTrack(PreferencesUtils.getSelectedTrackId(context));
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java
index 8cae95a57..13d14418c 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/StatsFragment.java
@@ -16,7 +16,6 @@
package com.google.android.apps.mytracks.fragments;
-import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.MyTracksApplication;
import com.google.android.apps.mytracks.StatsUtilities;
import com.google.android.apps.mytracks.content.Track;
@@ -28,8 +27,6 @@ import com.google.android.apps.mytracks.services.ServiceUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R;
-import android.content.Context;
-import android.content.SharedPreferences;
import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -51,7 +48,6 @@ public class StatsFragment extends Fragment implements TrackDataListener {
private static final String TAG = StatsFragment.class.getSimpleName();
- private SharedPreferences sharedPreferences;
private StatsUtilities statsUtilities;
private TrackDataHub trackDataHub;
private UiUpdateThread uiUpdateThread;
@@ -76,7 +72,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override
public void run() {
Log.d(TAG, "UI update thread started");
- while (ServiceUtils.isRecording(getActivity(), null, sharedPreferences)) {
+ while (ServiceUtils.isRecording(getActivity(), null)) {
getActivity().runOnUiThread(updateTotalTime);
try {
Thread.sleep(1000L);
@@ -92,8 +88,6 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- sharedPreferences = getActivity()
- .getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
statsUtilities = new StatsUtilities(getActivity());
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java
index 537ac38f8..e9edc790b 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java
@@ -21,6 +21,7 @@ import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.stats.TripStatistics;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting;
@@ -112,14 +113,12 @@ public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor,
@Override
public boolean needsRedraw() {
- SharedPreferences prefs = context.getSharedPreferences(Constants.SETTINGS_NAME,
- Context.MODE_PRIVATE);
- long currentTrackId = prefs.getLong(context.getString(R.string.selected_track_key), -1);
- if (currentTrackId == -1) {
+ long selectedTrackId = PreferencesUtils.getSelectedTrackId(context);
+ if (selectedTrackId == -1L) {
// Could not find track.
return false;
}
- Track track = MyTracksProviderUtils.Factory.get(context).getTrack(currentTrackId);
+ Track track = MyTracksProviderUtils.Factory.get(context).getTrack(selectedTrackId);
TripStatistics stats = track.getStatistics();
double newAverageMovingSpeed = (int) Math.floor(
stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java b/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java
index 9e9c90a35..123599e69 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java
@@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.services;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -41,8 +42,6 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
private final String minRecordingDistanceKey;
private final String minRecordingIntervalKey;
private final String minRequiredAccuracyKey;
- private final String recordingTrackKey;
- private final String selectedTrackKey;
private final String splitFrequencyKey;
public PreferenceManager(TrackRecordingService service) {
@@ -72,10 +71,6 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
service.getString(R.string.min_recording_interval_key);
minRequiredAccuracyKey =
service.getString(R.string.min_required_accuracy_key);
- recordingTrackKey =
- service.getString(R.string.recording_track_key);
- selectedTrackKey =
- service.getString(R.string.selected_track_key);
splitFrequencyKey =
service.getString(R.string.split_frequency_key);
@@ -152,12 +147,12 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
autoResumeTrackTimeoutKey,
Constants.DEFAULT_AUTO_RESUME_TRACK_TIMEOUT));
}
- if (key == null || key.equals(recordingTrackKey)) {
- long recordingTrackId = sharedPreferences.getLong(recordingTrackKey, -1);
+ if (key == null || key.equals(PreferencesUtils.getRecordingTrackIdKey(service))) {
+ long recordingTrackId = PreferencesUtils.getRecordingTrackId(service);
// Only read the id if it is valid.
// Setting it to -1 should only happen in
// TrackRecordingService.endCurrentTrack()
- if (recordingTrackId > 0) {
+ if (recordingTrackId != -1L) {
service.setRecordingTrackId(recordingTrackId);
}
}
@@ -177,18 +172,6 @@ public class PreferenceManager implements OnSharedPreferenceChangeListener {
ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
}
- public void setRecordingTrack(long id) {
- Editor editor = sharedPreferences.edit();
- editor.putLong(recordingTrackKey, id);
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
- }
-
- public void setSelectedTrack(long id) {
- Editor editor = sharedPreferences.edit();
- editor.putLong(selectedTrackKey, id);
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
- }
-
public void shutdown() {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
service = null;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/ServiceUtils.java b/MyTracks/src/com/google/android/apps/mytracks/services/ServiceUtils.java
index 13194b60a..aa9094e69 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/ServiceUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/ServiceUtils.java
@@ -17,14 +17,12 @@ package com.google.android.apps.mytracks.services;
import static com.google.android.apps.mytracks.Constants.TAG;
-import com.google.android.apps.mytracks.Constants;
-import com.google.android.maps.mytracks.R;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.ComponentName;
import android.content.Context;
-import android.content.SharedPreferences;
import android.os.RemoteException;
import android.util.Log;
@@ -38,16 +36,16 @@ import java.util.List;
public class ServiceUtils {
/**
- * Checks whether we're currently recording.
- * The checking is done by calling the service, if provided, or alternatively by reading
- * recording state saved to preferences.
- *
- * @param ctx the current context
+ * Checks whether we're currently recording. The checking is done by calling
+ * the service, if provided, or alternatively by reading recording state saved
+ * to preferences.
+ *
+ * @param context the current context
* @param service the service, or null if not bound to it
- * @param preferences the preferences, or null if not available
- * @return true if the service is recording (or supposed to be recording), false otherwise
+ * @return true if the service is recording (or supposed to be recording),
+ * false otherwise
*/
- public static boolean isRecording(Context ctx, ITrackRecordingService service, SharedPreferences preferences) {
+ public static boolean isRecording(Context context, ITrackRecordingService service) {
if (service != null) {
try {
return service.isRecording();
@@ -57,11 +55,7 @@ public class ServiceUtils {
Log.e(TAG, "Failed to check if service is recording", e);
}
}
-
- if (preferences == null) {
- preferences = ctx.getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- }
- return preferences.getLong(ctx.getString(R.string.recording_track_key), -1) > 0;
+ return PreferencesUtils.getRecordingTrackId(context) != -1L;
}
/**
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
index f92deabfc..543ac4c05 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
@@ -39,6 +39,7 @@ import com.google.android.apps.mytracks.services.tasks.StatusAnnouncerFactory;
import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder;
import com.google.android.apps.mytracks.util.LocationUtils;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting;
@@ -263,12 +264,13 @@ public class TrackRecordingService extends Service {
restoreStats(recordingTrack);
isRecording = true;
} else {
- if (recordingTrackId != -1) {
+ if (recordingTrackId != -1L) {
// Make sure we have consistent state in shared preferences.
Log.w(TAG, "TrackRecordingService.onCreate: "
+ "Resetting an orphaned recording track = " + recordingTrackId);
}
- prefManager.setRecordingTrack(recordingTrackId = -1);
+ recordingTrackId = -1L;
+ PreferencesUtils.setRecordingTrackId(this, recordingTrackId);
}
showNotification();
}
@@ -324,7 +326,8 @@ public class TrackRecordingService extends Service {
"TrackRecordingService: Not resuming, because the previous track ("
+ recordingTrack + ") doesn't exist or is too old");
isRecording = false;
- prefManager.setRecordingTrack(recordingTrackId = -1);
+ recordingTrackId = -1L;
+ PreferencesUtils.setRecordingTrackId(this, recordingTrackId);
stopSelfResult(startId);
return;
}
@@ -609,7 +612,7 @@ public class TrackRecordingService extends Service {
// Reset the number of auto-resume retries.
setAutoResumeTrackRetries(0);
// Persist the current recording track.
- prefManager.setRecordingTrack(recordingTrackId);
+ PreferencesUtils.setRecordingTrackId(this, recordingTrackId);
// Notify the world that we're now recording.
sendTrackBroadcast(
@@ -1035,7 +1038,8 @@ public class TrackRecordingService extends Service {
}
showNotification();
long recordedTrackId = recordingTrackId;
- prefManager.setRecordingTrack(recordingTrackId = -1);
+ recordingTrackId = -1L;
+ PreferencesUtils.setRecordingTrackId(this, recordingTrackId);
if (sensorManager != null) {
SensorManagerFactory.getInstance().releaseSensorManager(sensorManager);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
new file mode 100644
index 000000000..ad2c68ae5
--- /dev/null
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.android.apps.mytracks.util;
+
+import com.google.android.apps.mytracks.Constants;
+import com.google.android.maps.mytracks.R;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+
+/**
+ * Utilities to access preferences stored in {@link SharedPreferences}.
+ *
+ * @author Jimmy Shih
+ */
+public class PreferencesUtils {
+
+ private PreferencesUtils() {}
+
+ /**
+ * Gets the recording track id key.
+ *
+ * @param context the context
+ */
+ public static String getRecordingTrackIdKey(Context context) {
+ return getKey(context, R.string.recording_track_id_key);
+ }
+
+ /**
+ * Gets the recording track id.
+ *
+ * @param context the context
+ */
+ public static long getRecordingTrackId(Context context) {
+ return getLong(context, R.string.recording_track_id_key);
+ }
+
+ /**
+ * Sets the recording track id.
+ *
+ * @param context the context
+ * @param trackId the track id
+ */
+ public static void setRecordingTrackId(Context context, long trackId) {
+ setLong(context, R.string.recording_track_id_key, trackId);
+ }
+
+ /**
+ * Gets the selected track id key.
+ *
+ * @param context the context
+ */
+ public static String getSelectedTrackIdKey(Context context) {
+ return getKey(context, R.string.selected_track_id_key);
+ }
+
+ /**
+ * Gets the selected track id.
+ *
+ * @param context the context
+ */
+ public static long getSelectedTrackId(Context context) {
+ return getLong(context, R.string.selected_track_id_key);
+ }
+
+ /**
+ * Sets the selected track id.
+ *
+ * @param context the context
+ * @param trackId the track id
+ */
+ public static void setSelectedTrackId(Context context, long trackId) {
+ setLong(context, R.string.selected_track_id_key, trackId);
+ }
+
+ /**
+ * Gets a preference key
+ *
+ * @param context the context
+ * @param keyId the key id
+ */
+ private static String getKey(Context context, int keyId) {
+ return context.getString(keyId);
+ }
+
+ /**
+ * Gets a long preference value.
+ *
+ * @param context the context
+ * @param keyId the key id
+ */
+ private static long getLong(Context context, int keyId) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ return sharedPreferences.getLong(getKey(context, keyId), -1L);
+ }
+
+ /**
+ * Sets a long preference value.
+ *
+ * @param context the context
+ * @param keyId the key id
+ * @param value the value
+ */
+ private static void setLong(Context context, int keyId, long value) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ Editor editor = sharedPreferences.edit();
+ editor.putLong(getKey(context, keyId), value);
+ ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
+ }
+}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java
index c80bd6ca3..864ab4e60 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java
@@ -25,6 +25,7 @@ import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.services.ControlRecordingService;
import com.google.android.apps.mytracks.stats.TripStatistics;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
@@ -235,9 +236,8 @@ public class TrackWidgetProvider
reportSpeed = prefs.getBoolean(reportSpeedKey, true);
}
- String selectedTrackKey = context.getString(R.string.selected_track_key);
- if (key == null || key.equals(selectedTrackKey)) {
- selectedTrackId = prefs.getLong(selectedTrackKey, -1);
+ if (key == null || key.equals(PreferencesUtils.getSelectedTrackIdKey(context))) {
+ selectedTrackId = PreferencesUtils.getSelectedTrackId(context);
Log.d(TAG, "TrackWidgetProvider setting selecting track from preference: " + selectedTrackId);
}
}
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/content/TrackDataHubTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/content/TrackDataHubTest.java
index eae73f0e5..8c419d415 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/content/TrackDataHubTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/content/TrackDataHubTest.java
@@ -29,6 +29,7 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils.LocationIt
import com.google.android.apps.mytracks.content.TrackDataHub.ListenerDataType;
import com.google.android.apps.mytracks.content.TrackDataListener.ProviderState;
import com.google.android.apps.mytracks.services.TrackRecordingServiceTest.MockContext;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import com.google.android.testing.mocking.AndroidMock;
@@ -112,6 +113,8 @@ public class TrackDataHubTest extends AndroidTestCase {
listener1 = AndroidMock.createStrictMock("listener1", TrackDataListener.class);
listener2 = AndroidMock.createStrictMock("listener2", TrackDataListener.class);
+ PreferencesUtils.setRecordingTrackId(context, TRACK_ID);
+ PreferencesUtils.setSelectedTrackId(context, TRACK_ID);
}
@Override
@@ -138,8 +141,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testTrackListen() {
Capture observerCapture = new Capture();
Track track = new Track();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
expect(providerUtils.getTrack(TRACK_ID)).andStubReturn(track);
expectStart();
dataSources.registerContentObserver(
@@ -297,8 +298,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testWaypointListen() {
Capture observerCapture = new Capture();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
Waypoint wpt1 = new Waypoint(),
wpt2 = new Waypoint(),
@@ -411,8 +410,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen() {
Capture observerCapture = new Capture();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -498,8 +495,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_reRegister() {
Capture observerCapture = new Capture();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -570,8 +565,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_reRegisterTrackChanged() {
Capture observerCapture = new Capture();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -628,8 +621,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_largeTrackSampling() {
Capture observerCapture = new Capture();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
@@ -661,8 +652,6 @@ public class TrackDataHubTest extends AndroidTestCase {
public void testPointsListen_resampling() {
Capture observerCapture = new Capture();
- prefs.edit().putLong("recordingTrack", TRACK_ID)
- .putLong("selectedTrack", TRACK_ID).apply();
expectStart();
dataSources.registerContentObserver(
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java
index e4de6acc5..e95cf5da6 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptorTest.java
@@ -16,6 +16,7 @@
package com.google.android.apps.mytracks.maps;
import com.google.android.apps.mytracks.Constants;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -144,9 +145,7 @@ public class DynamicSpeedTrackPathDescriptorTest extends AndroidTestCase {
* id.
*/
public void testNeedsRedraw_WrongTrackId() {
- long trackId = -1;
- sharedPreferencesEditor.putLong(context.getString(R.string.selected_track_key), trackId);
- sharedPreferencesEditor.commit();
+ PreferencesUtils.setSelectedTrackId(context, -1L);
DynamicSpeedTrackPathDescriptor dynamicSpeedTrackPathDescriptor = new DynamicSpeedTrackPathDescriptor(
context);
assertEquals(false, dynamicSpeedTrackPathDescriptor.needsRedraw());
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
index 8de76d03f..02f9a19e8 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
@@ -24,6 +24,7 @@ import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.WaypointCreationRequest;
import com.google.android.apps.mytracks.stats.TripStatistics;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.content.BroadcastReceiver;
@@ -166,9 +167,7 @@ public class TrackRecordingServiceTest extends ServiceTestCase= 0);
providerUtils.insertTrack(track);
assertEquals(track.getId(), providerUtils.getTrack(track.getId()).getId());
- setRecordingTrack(isRecording ? track.getId() : -1);
- }
-
- private void setRecordingTrack(long id) {
- Editor editor = sharedPreferences.edit();
- editor.putLong(context.getString(R.string.recording_track_key), id);
- editor.apply();
+ PreferencesUtils.setRecordingTrackId(context, isRecording ? track.getId() : -1L);
}
// TODO: We support multiple values for readability, however this test's
@@ -721,8 +709,7 @@ public class TrackRecordingServiceTest extends ServiceTestCase