diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml
index c7ea5b522..a60d7ea5f 100755
--- a/MyTracks/AndroidManifest.xml
+++ b/MyTracks/AndroidManifest.xml
@@ -208,6 +208,7 @@ limitations under the License.
+
diff --git a/MyTracks/res/values/arrays_do_not_translate.xml b/MyTracks/res/values/arrays_do_not_translate.xml
index 9f4c74502..9f62b977a 100644
--- a/MyTracks/res/values/arrays_do_not_translate.xml
+++ b/MyTracks/res/values/arrays_do_not_translate.xml
@@ -16,7 +16,6 @@ limitations under the License.
-->
-
- @string/activity_type_airplane
- @string/activity_type_atv
@@ -84,35 +83,38 @@ limitations under the License.
- @string/activity_type_water_skiing
- @string/activity_type_wind_surfing
-
-
- - @string/settings_display_track_color_single
- - @string/settings_display_track_color_fixed
- - @string/settings_display_track_color_dynamic
-
-
-
- - @string/display_track_color_value_none
- - @string/display_track_color_value_fixed
- - @string/display_track_color_value_dynamic
-
-
-
- - GPX
- - KML
- - CSV
- - TCX
-
-
-
+
- 0
- 5
- 10
- 15
- -1
-
-
+
+ - @string/settings_display_track_color_single
+ - @string/settings_display_track_color_fixed
+ - @string/settings_display_track_color_dynamic
+
+
+ - @string/display_track_color_value_none
+ - @string/display_track_color_value_fixed
+ - @string/display_track_color_value_dynamic
+
+
+ - GPX
+ - KML
+ - CSV
+ - TCX
+
+
+ - 50
+ - 100
+ - 200
+ - 500
+ - 1000
+ - 5000
+
+
- 1
- 2
- 3
@@ -121,20 +123,7 @@ limitations under the License.
- 10
- 100
-
-
- - 10
- - 20
- - 50
- - 100
- - 200
- - 500
- - 1000
- - 2000
- - 5000
-
-
-
+
- -2
- -1
- 0
@@ -152,38 +141,37 @@ limitations under the License.
- 900
- 1800
-
-
- - 0
- - -100
- - -50
- - -25
- - -10
- - -5
- - -1
- - 60
- - 30
- - 15
+
- 10
- - 5
- - 2
- - 1
-
-
-
+ - 20
- 50
- 100
- 200
- 500
- 1000
+ - 2000
- 5000
-
+
+ - 0
+ - 1
+ - 2
+ - 5
+ - 10
+ - 15
+ - 30
+ - 60
+ - -1
+ - -5
+ - -10
+ - -25
+ - -50
+ - -100
+
- @string/sensor_type_value_ant
- @string/sensor_type_value_srm_ant_bridge
-
- @string/settings_sensor_type_none
- @string/settings_sensor_type_ant
@@ -191,7 +179,6 @@ limitations under the License.
- @string/settings_sensor_type_polar
- @string/settings_sensor_type_zephyr
-
- @string/sensor_type_value_none
- @string/sensor_type_value_ant
@@ -199,19 +186,16 @@ limitations under the License.
- @string/sensor_type_value_polar
- @string/sensor_type_value_zephyr
-
-
+
- @string/settings_recording_track_name_date_local_option
- @string/settings_recording_track_name_date_iso_8601_option
- @string/settings_recording_track_name_number_option
-
-
+
- @string/settings_recording_track_name_date_local_value
- @string/settings_recording_track_name_date_iso_8601_value
- @string/settings_recording_track_name_number_value
-
- @string/waypoint_type_atm
- @string/waypoint_type_bank
diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml
index d5920ef68..68fef8646 100644
--- a/MyTracks/res/values/keys.xml
+++ b/MyTracks/res/values/keys.xml
@@ -66,6 +66,7 @@ limitations under the License.
restoreFromSd
sensorOptions
settingsBackup
+ settingsRecording
settingsSharing
trackColorModeFixedOptions
\ No newline at end of file
diff --git a/MyTracks/res/xml/preferences.xml b/MyTracks/res/xml/preferences.xml
index 9225bf93a..a7852614e 100644
--- a/MyTracks/res/xml/preferences.xml
+++ b/MyTracks/res/xml/preferences.xml
@@ -86,72 +86,12 @@ limitations under the License.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/AutoCompleteTextPreference.java b/MyTracks/src/com/google/android/apps/mytracks/AutoCompleteTextPreference.java
index 0469acf04..5c1a0581a 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/AutoCompleteTextPreference.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/AutoCompleteTextPreference.java
@@ -1,5 +1,6 @@
package com.google.android.apps.mytracks;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -31,9 +32,9 @@ public class AutoCompleteTextPreference extends EditTextPreference {
mEditText.setThreshold(0);
// Gets autocomplete values for 'Default Activity' preference
- if (getKey().equals(context.getString(R.string.default_activity_key))) {
- ArrayAdapter adapter = ArrayAdapter.createFromResource(context,
- R.array.activity_types, android.R.layout.simple_dropdown_item_1line);
+ if (PreferencesUtils.getKey(context, R.string.default_activity_key).equals(getKey())) {
+ ArrayAdapter adapter = ArrayAdapter.createFromResource(
+ context, R.array.activity_types, android.R.layout.simple_dropdown_item_1line);
mEditText.setAdapter(adapter);
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/Constants.java b/MyTracks/src/com/google/android/apps/mytracks/Constants.java
index 7b2da7c39..0d6a9eff3 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/Constants.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/Constants.java
@@ -121,23 +121,10 @@ public abstract class Constants {
* The name of extra intent property to indicate whether we want to resume
* a previously recorded track.
*/
- public static final String RESUME_TRACK_EXTRA_NAME =
- "com.google.android.apps.mytracks.RESUME_TRACK";
+ public static final String
+ RESUME_TRACK_EXTRA_NAME = "com.google.android.apps.mytracks.RESUME_TRACK";
- public static final String MAPSHOP_BASE_URL =
- "https://maps.google.com/maps/ms";
-
- /*
- * Default values - keep in sync with those in preferences.xml.
- */
-
- public static final int DEFAULT_ANNOUNCEMENT_FREQUENCY = -1;
- public static final int DEFAULT_AUTO_RESUME_TRACK_TIMEOUT = 10; // In min.
- public static final int DEFAULT_MAX_RECORDING_DISTANCE = 200;
- public static final int DEFAULT_MIN_RECORDING_DISTANCE = 5;
- public static final int DEFAULT_MIN_RECORDING_INTERVAL = 0;
- public static final int DEFAULT_MIN_REQUIRED_ACCURACY = 200;
- public static final int DEFAULT_SPLIT_FREQUENCY = 0;
+ public static final String MAPSHOP_BASE_URL = "https://maps.google.com/maps/ms";
public static final String SETTINGS_NAME = "SettingsActivity";
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 296a8750c..4ee4c5977 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/content/TrackDataHub.java
@@ -15,7 +15,6 @@
*/
package com.google.android.apps.mytracks.content;
-import static com.google.android.apps.mytracks.Constants.DEFAULT_MIN_REQUIRED_ACCURACY;
import static com.google.android.apps.mytracks.Constants.MAX_DISPLAYED_WAYPOINTS_POINTS;
import static com.google.android.apps.mytracks.Constants.MAX_LOCATION_AGE_MS;
import static com.google.android.apps.mytracks.Constants.MAX_NETWORK_AGE_MS;
@@ -58,9 +57,6 @@ import java.util.Set;
*/
public class TrackDataHub {
- // Preference keys
- private final String MIN_REQUIRED_ACCURACY_KEY;
-
// Overridable constants
private final int targetNumPoints;
@@ -219,8 +215,6 @@ public class TrackDataHub {
this.targetNumPoints = targetNumPoints;
this.locationFactory = new DoubleBufferedLocationFactory();
- MIN_REQUIRED_ACCURACY_KEY = context.getString(R.string.min_required_accuracy_key);
-
resetState();
}
@@ -297,8 +291,8 @@ public class TrackDataHub {
selectedTrackId = PreferencesUtils.getLong(context, R.string.selected_track_id_key);
metricUnits = PreferencesUtils.getBoolean(context, R.string.metric_units_key, true);
reportSpeed = PreferencesUtils.getBoolean(context, R.string.report_speed_key, true);
- minRequiredAccuracy = preferences.getInt(MIN_REQUIRED_ACCURACY_KEY,
- DEFAULT_MIN_REQUIRED_ACCURACY);
+ minRequiredAccuracy = PreferencesUtils.getInt(context, R.string.min_required_accuracy_key,
+ PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT);
}
/** Updates known magnetic declination if needed. */
@@ -605,13 +599,13 @@ public class TrackDataHub {
/**
* Called when a preference changes.
- *
+ *
* @param key the key to the preference that changed
*/
private void notifyPreferenceChanged(String key) {
- if (MIN_REQUIRED_ACCURACY_KEY.equals(key)) {
- minRequiredAccuracy = preferences.getInt(MIN_REQUIRED_ACCURACY_KEY,
- DEFAULT_MIN_REQUIRED_ACCURACY);
+ if (PreferencesUtils.getKey(context, R.string.min_required_accuracy_key).equals(key)) {
+ minRequiredAccuracy = PreferencesUtils.getInt(context, R.string.min_required_accuracy_key,
+ PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT);
} else if (PreferencesUtils.getKey(context, R.string.metric_units_key).equals(key)) {
metricUnits = PreferencesUtils.getBoolean(context, R.string.metric_units_key, true);
notifyUnitsChanged();
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java b/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java
index be33b7e61..42a360a6c 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/DefaultTrackNameFactory.java
@@ -15,13 +15,12 @@
*/
package com.google.android.apps.mytracks.services;
-import com.google.android.apps.mytracks.Constants;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting;
import android.content.Context;
-import android.content.SharedPreferences;
import java.text.SimpleDateFormat;
@@ -59,7 +58,7 @@ public class DefaultTrackNameFactory {
} else {
// trackNameSetting equals
// R.string.settings_recording_track_name_number_value
- return String.format(context.getString(R.string.track_name_format), trackId);
+ return context.getString(R.string.track_name_format, trackId);
}
}
@@ -68,10 +67,7 @@ public class DefaultTrackNameFactory {
*/
@VisibleForTesting
String getTrackNameSetting() {
- SharedPreferences sharedPreferences = context.getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- return sharedPreferences.getString(
- context.getString(R.string.track_name_key),
+ return PreferencesUtils.getString(context, R.string.track_name_key,
context.getString(R.string.settings_recording_track_name_date_local_value));
}
}
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 af84a408f..795ed5dad 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/PreferenceManager.java
@@ -16,156 +16,119 @@
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;
import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.util.Log;
/**
* A class that manages reading the shared preferences for the service.
- *
+ *
* @author Sandor Dornbush
*/
public class PreferenceManager implements OnSharedPreferenceChangeListener {
private TrackRecordingService service;
private SharedPreferences sharedPreferences;
- private final String announcementFrequencyKey;
- private final String autoResumeTrackCurrentRetryKey;
- private final String autoResumeTrackTimeoutKey;
- private final String maxRecordingDistanceKey;
- private final String minRecordingDistanceKey;
- private final String minRecordingIntervalKey;
- private final String minRequiredAccuracyKey;
- private final String splitFrequencyKey;
public PreferenceManager(TrackRecordingService service) {
this.service = service;
this.sharedPreferences = service.getSharedPreferences(
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- if (sharedPreferences == null) {
- Log.w(Constants.TAG,
- "TrackRecordingService: Couldn't get shared preferences.");
- throw new IllegalStateException("Couldn't get shared preferences");
- }
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
- announcementFrequencyKey =
- service.getString(R.string.announcement_frequency_key);
- autoResumeTrackCurrentRetryKey =
- service.getString(R.string.auto_resume_track_current_retry_key);
- autoResumeTrackTimeoutKey =
- service.getString(R.string.auto_resume_track_timeout_key);
- maxRecordingDistanceKey =
- service.getString(R.string.max_recording_distance_key);
- minRecordingDistanceKey =
- service.getString(R.string.min_recording_distance_key);
- minRecordingIntervalKey =
- service.getString(R.string.min_recording_interval_key);
- minRequiredAccuracyKey =
- service.getString(R.string.min_required_accuracy_key);
- splitFrequencyKey =
- service.getString(R.string.split_frequency_key);
-
// Refresh all properties.
onSharedPreferenceChanged(sharedPreferences, null);
}
/**
- * Notifies that preferences have changed.
- * Call this with key == null to update all preferences in one call.
- *
+ * Notifies that preferences have changed. Call this with key == null to
+ * update all preferences in one call.
+ *
* @param key the key that changed (may be null to update all preferences)
*/
@Override
- public void onSharedPreferenceChanged(SharedPreferences preferences,
- String key) {
+ public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (service == null) {
- Log.w(Constants.TAG,
- "onSharedPreferenceChanged: a preference change (key = " + key
+ Log.w(Constants.TAG, "onSharedPreferenceChanged: a preference change (key = " + key
+ ") after a call to shutdown()");
return;
}
- if (key == null || key.equals(minRecordingDistanceKey)) {
- int minRecordingDistance = sharedPreferences.getInt(
- minRecordingDistanceKey,
- Constants.DEFAULT_MIN_RECORDING_DISTANCE);
- service.setMinRecordingDistance(minRecordingDistance);
- Log.d(Constants.TAG,
- "TrackRecordingService: minRecordingDistance = "
- + minRecordingDistance);
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.recording_track_id_key).equals(key)) {
+ long recordingTrackId = PreferencesUtils.getLong(service, R.string.recording_track_id_key);
+ /*
+ * Only set the id if it is valid. Setting it to -1L should only happen
+ * in TrackRecordingService.endCurrentTrack()
+ */
+ if (recordingTrackId != -1L) {
+ service.setRecordingTrackId(recordingTrackId);
+ }
}
- if (key == null || key.equals(maxRecordingDistanceKey)) {
- service.setMaxRecordingDistance(sharedPreferences.getInt(
- maxRecordingDistanceKey,
- Constants.DEFAULT_MAX_RECORDING_DISTANCE));
+ if (key == null || PreferencesUtils.getKey(service, R.string.metric_units_key).equals(key)) {
+ service.setMetricUnits(PreferencesUtils.getBoolean(service, R.string.metric_units_key, true));
}
- if (key == null || key.equals(minRecordingIntervalKey)) {
- int minRecordingInterval = sharedPreferences.getInt(
- minRecordingIntervalKey,
- Constants.DEFAULT_MIN_RECORDING_INTERVAL);
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.announcement_frequency_key).equals(key)) {
+ service.setAnnouncementFrequency(PreferencesUtils.getInt(
+ service, R.string.announcement_frequency_key,
+ PreferencesUtils.ANNOUNCEMENT_FREQUENCY_DEFAULT));
+ }
+ if (key == null || PreferencesUtils.getKey(service, R.string.split_frequency_key).equals(key)) {
+ service.setSplitFrequency(PreferencesUtils.getInt(
+ service, R.string.split_frequency_key, PreferencesUtils.SPLIT_FREQUENCY_DEFAULT));
+ }
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.min_recording_interval_key).equals(key)) {
+ int minRecordingInterval = PreferencesUtils.getInt(service,
+ R.string.min_recording_interval_key, PreferencesUtils.MIN_RECORDING_INTERVAL_DEFAULT);
switch (minRecordingInterval) {
- case -2:
- // Battery Miser
- // min: 30 seconds
- // max: 5 minutes
- // minDist: 5 meters Choose battery life over moving time accuracy.
- service.setLocationListenerPolicy(
- new AdaptiveLocationListenerPolicy(30000, 300000, 5));
+ case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_BATTERY_LIFE:
+ /*
+ * Choose battery life over moving time accuracy. min: 30 seconds,
+ * max: 5 minutes, inDist: 5 meters.
+ */
+ service.setLocationListenerPolicy(new AdaptiveLocationListenerPolicy(30000, 300000, 5));
break;
- case -1:
- // High Accuracy
- // min: 1 second
- // max: 30 seconds
- // minDist: 0 meters get all updates to properly measure moving time.
- service.setLocationListenerPolicy(
- new AdaptiveLocationListenerPolicy(1000, 30000, 0));
+ case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_ACCURACY:
+ /*
+ * Get all the updates. min: 1 second, max: 30 seconds, minDist: 0
+ * meter.
+ */
+ service.setLocationListenerPolicy(new AdaptiveLocationListenerPolicy(1000, 30000, 0));
break;
default:
service.setLocationListenerPolicy(
new AbsoluteLocationListenerPolicy(minRecordingInterval * 1000));
}
}
- if (key == null || key.equals(minRequiredAccuracyKey)) {
- service.setMinRequiredAccuracy(sharedPreferences.getInt(
- minRequiredAccuracyKey,
- Constants.DEFAULT_MIN_REQUIRED_ACCURACY));
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.min_recording_distance_key).equals(key)) {
+ service.setMinRecordingDistance(PreferencesUtils.getInt(
+ service, R.string.min_recording_distance_key,
+ PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT));
}
- if (key == null || key.equals(announcementFrequencyKey)) {
- service.setAnnouncementFrequency(
- sharedPreferences.getInt(announcementFrequencyKey, -1));
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.max_recording_distance_key).equals(key)) {
+ service.setMaxRecordingDistance(PreferencesUtils.getInt(
+ service, R.string.max_recording_distance_key,
+ PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT));
}
- if (key == null || key.equals(autoResumeTrackTimeoutKey)) {
- service.setAutoResumeTrackTimeout(sharedPreferences.getInt(
- autoResumeTrackTimeoutKey,
- Constants.DEFAULT_AUTO_RESUME_TRACK_TIMEOUT));
- }
- if (key == null || key.equals(PreferencesUtils.getKey(service, R.string.recording_track_id_key))) {
- long recordingTrackId = PreferencesUtils.getLong(service, R.string.recording_track_id_key);
- // Only read the id if it is valid.
- // Setting it to -1 should only happen in
- // TrackRecordingService.endCurrentTrack()
- if (recordingTrackId != -1L) {
- service.setRecordingTrackId(recordingTrackId);
- }
- }
- if (key == null || key.equals(splitFrequencyKey)) {
- service.setSplitFrequency(
- sharedPreferences.getInt(splitFrequencyKey, 0));
- }
- if (key == null || key.equals(PreferencesUtils.getKey(service, R.string.metric_units_key))) {
- service.setMetricUnits(PreferencesUtils.getBoolean(service, R.string.metric_units_key, true));
- }
- }
- public void setAutoResumeTrackCurrentRetry(int retryAttempts) {
- Editor editor = sharedPreferences.edit();
- editor.putInt(autoResumeTrackCurrentRetryKey, retryAttempts);
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.min_required_accuracy_key).equals(key)) {
+ service.setMinRequiredAccuracy(PreferencesUtils.getInt(
+ service, R.string.min_required_accuracy_key,
+ PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT));
+ }
+ if (key == null
+ || PreferencesUtils.getKey(service, R.string.auto_resume_track_timeout_key).equals(key)) {
+ service.setAutoResumeTrackTimeout(PreferencesUtils.getInt(
+ service, R.string.auto_resume_track_timeout_key,
+ PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_DEFAULT));
+ }
}
public void shutdown() {
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 4f80146ad..6dd08f493 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
@@ -50,7 +50,6 @@ import android.app.Service;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.location.Location;
@@ -84,14 +83,10 @@ public class TrackRecordingService extends Service {
private LocationManager locationManager;
private WakeLock wakeLock;
- private int minRecordingDistance =
- Constants.DEFAULT_MIN_RECORDING_DISTANCE;
- private int maxRecordingDistance =
- Constants.DEFAULT_MAX_RECORDING_DISTANCE;
- private int minRequiredAccuracy =
- Constants.DEFAULT_MIN_REQUIRED_ACCURACY;
- private int autoResumeTrackTimeout =
- Constants.DEFAULT_AUTO_RESUME_TRACK_TIMEOUT;
+ private int minRecordingDistance = PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT;
+ private int maxRecordingDistance = PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT;
+ private int minRequiredAccuracy = PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT;
+ private int autoResumeTrackTimeout = PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_DEFAULT;
private long recordingTrackId = -1;
@@ -123,7 +118,7 @@ public class TrackRecordingService extends Service {
private SensorManager sensorManager;
- private PreferenceManager prefManager;
+ private PreferenceManager prefereceManager;
/**
* The interval in milliseconds that we have requested to be notified of gps
@@ -248,7 +243,7 @@ public class TrackRecordingService extends Service {
setUpTaskExecutors();
executorService = Executors.newSingleThreadExecutor();
- prefManager = new PreferenceManager(this);
+ prefereceManager = new PreferenceManager(this);
registerLocationListener();
@@ -354,8 +349,7 @@ public class TrackRecordingService extends Service {
isRecording = false;
showNotification();
- prefManager.shutdown();
- prefManager = null;
+ prefereceManager.shutdown();
checkLocationListener.cancel();
checkLocationListener = null;
timer.cancel();
@@ -383,7 +377,7 @@ public class TrackRecordingService extends Service {
private void setAutoResumeTrackRetries(int retryAttempts) {
Log.d(TAG, "Updating auto-resume retry attempts to: " + retryAttempts);
- prefManager.setAutoResumeTrackCurrentRetry(retryAttempts);
+ PreferencesUtils.setInt(this, R.string.auto_resume_track_current_retry_key, retryAttempts);
}
private boolean shouldResumeTrack(Track track) {
@@ -391,10 +385,8 @@ public class TrackRecordingService extends Service {
+ autoResumeTrackTimeout);
// Check if we haven't exceeded the maximum number of retry attempts.
- SharedPreferences sharedPreferences = getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- int retries = sharedPreferences.getInt(
- getString(R.string.auto_resume_track_current_retry_key), 0);
+ int retries = PreferencesUtils.getInt(this, R.string.auto_resume_track_current_retry_key,
+ PreferencesUtils.AUTO_RESUME_TRACK_CURRENT_RETRY_DEFAULT);
Log.d(TAG,
"shouldResumeTrack: Attempting to auto-resume the track ("
+ (retries + 1) + "/" + MAX_AUTO_RESUME_TRACK_RETRY_ATTEMPTS + ")");
@@ -409,12 +401,12 @@ public class TrackRecordingService extends Service {
setAutoResumeTrackRetries(retries + 1);
// Check for special cases.
- if (autoResumeTrackTimeout == 0) {
+ if (autoResumeTrackTimeout == PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_NEVER) {
// Never resume.
Log.d(TAG,
"shouldResumeTrack: Auto-resume disabled (never resume)");
return false;
- } else if (autoResumeTrackTimeout == -1) {
+ } else if (autoResumeTrackTimeout == PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_ALWAYS) {
// Always resume.
Log.d(TAG,
"shouldResumeTrack: Auto-resume forced (always resume)");
@@ -565,12 +557,6 @@ public class TrackRecordingService extends Service {
"Location listener now unregistered w/ TrackRecordingService.");
}
- private String getDefaultActivityType(Context context) {
- SharedPreferences prefs = context.getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- return prefs.getString(context.getString(R.string.default_activity_key), "");
- }
-
/*
* Recording lifecycle.
*/
@@ -593,7 +579,8 @@ public class TrackRecordingService extends Service {
track.setId(recordingTrackId);
track.setName(new DefaultTrackNameFactory(this).getDefaultTrackName(
recordingTrackId, startTime));
- track.setCategory(getDefaultActivityType(this));
+ track.setCategory(PreferencesUtils.getString(
+ this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT));
isRecording = true;
isMoving = true;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java
index 27b1b5769..4f108732d 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java
@@ -18,6 +18,7 @@ package com.google.android.apps.mytracks.services.tasks;
import static com.google.android.apps.mytracks.Constants.TAG;
import com.google.android.apps.mytracks.services.TrackRecordingService;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import android.util.Log;
@@ -34,7 +35,7 @@ public class PeriodicTaskExecutor {
* A value greater than zero is a frequency in time.
* A value less than zero is considered a frequency in distance.
*/
- private int taskFrequency = 0;
+ private int taskFrequency = PreferencesUtils.PERIODIC_TASK_OFF;
/**
* The next distance when the task should execute.
@@ -74,7 +75,7 @@ public class PeriodicTaskExecutor {
timerExecutor = null;
}
}
- if (taskFrequency == 0) {
+ if (taskFrequency == PreferencesUtils.PERIODIC_TASK_OFF) {
return;
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java
new file mode 100644
index 000000000..ccbea807b
--- /dev/null
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/RecordingSettingsActivity.java
@@ -0,0 +1,243 @@
+/*
+ * 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.settings;
+
+import com.google.android.apps.mytracks.util.PreferencesUtils;
+import com.google.android.apps.mytracks.util.UnitConversions;
+import com.google.android.maps.mytracks.R;
+
+import android.os.Bundle;
+import android.preference.ListPreference;
+
+/**
+ * An activity for accessing recording settings.
+ *
+ * @author Jimmy Shih
+ */
+public class RecordingSettingsActivity extends AbstractSettingsActivity {
+
+ @SuppressWarnings("deprecation")
+ @Override
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+ addPreferencesFromResource(R.xml.recording_settings);
+
+ boolean metricUnits = PreferencesUtils.getBoolean(
+ this, R.string.metric_units_key, PreferencesUtils.METRIC_UNITS_DEFAULT);
+
+ ListPreference announcementFrequencyListPreference = (ListPreference) findPreference(
+ getString(R.string.announcement_frequency_key));
+ announcementFrequencyListPreference.setEntries(getPeriodicTaskDisplayOptions(metricUnits));
+
+ ListPreference splitFrequencyListPreference = (ListPreference) findPreference(
+ getString(R.string.split_frequency_key));
+ splitFrequencyListPreference.setEntries(getPeriodicTaskDisplayOptions(metricUnits));
+
+ ListPreference minRecordingIntervalListPreference = (ListPreference) findPreference(
+ getString(R.string.min_recording_interval_key));
+ minRecordingIntervalListPreference.setEntries(getMinRecordingIntervalDisplayOptions());
+
+ ListPreference minRecordingDistanceListPreference = (ListPreference) findPreference(
+ getString(R.string.min_recording_distance_key));
+ minRecordingDistanceListPreference.setEntries(
+ getMinRecordingDistanceDisplayOptions(metricUnits));
+
+ ListPreference maxRecordingDistanceListPreference = (ListPreference) findPreference(
+ getString(R.string.max_recording_distance_key));
+ maxRecordingDistanceListPreference.setEntries(
+ getMaxRecordingDistanceDisplayOptions(metricUnits));
+
+ ListPreference minRequiredAccuracyListPreference = (ListPreference) findPreference(
+ getString(R.string.min_required_accuracy_key));
+ minRequiredAccuracyListPreference.setEntries(getMinRequiredAccuracyDisplayOptions(metricUnits));
+
+ ListPreference autoResumeTrackTimeoutListPreference = (ListPreference) findPreference(
+ getString(R.string.auto_resume_track_timeout_key));
+ autoResumeTrackTimeoutListPreference.setEntries(getAutoResumeTrackTimeoutDisplayOptions());
+ }
+
+ /**
+ * Gets the periodic task display options.
+ *
+ * @param metricUnits true to display metric units
+ */
+ private String[] getPeriodicTaskDisplayOptions(boolean metricUnits) {
+ String[] values = getResources().getStringArray(R.array.periodic_task_values);
+ String[] options = new String[values.length];
+ for (int i = 0; i < values.length; i++) {
+ int value = Integer.parseInt(values[i]);
+ if (value == PreferencesUtils.PERIODIC_TASK_OFF) {
+ options[i] = getString(R.string.value_off);
+ } else if (value < 0) {
+ options[i] = getString(metricUnits ? R.string.value_integer_kilometer
+ : R.string.value_integer_mile, Math.abs(value));
+ } else {
+ options[i] = getString(R.string.value_integer_minute, value);
+ }
+ }
+ return options;
+ }
+
+ /**
+ * Gets the min recording interval display options.
+ */
+ private String[] getMinRecordingIntervalDisplayOptions() {
+ String[] values = getResources().getStringArray(R.array.min_recording_interval_values);
+ String[] options = new String[values.length];
+ for (int i = 0; i < values.length; i++) {
+ int value = Integer.parseInt(values[i]);
+ switch (value) {
+ case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_BATTERY_LIFE:
+ options[i] = getString(R.string.value_adapt_battery_life);
+ break;
+ case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_ACCURACY:
+ options[i] = getString(R.string.value_adapt_accuracy);
+ break;
+ case PreferencesUtils.MIN_RECORDING_INTERVAL_DEFAULT:
+ options[i] = getString(R.string.value_smallest_recommended);
+ break;
+ default:
+ options[i] = value < 60 ? getString(R.string.value_integer_second, value)
+ : getString(R.string.value_integer_minute, value / 60);
+ }
+ }
+ return options;
+ }
+
+ /**
+ * Gets the min recording distance display options.
+ *
+ * @param metricUnits true to display metric units
+ */
+ private String[] getMinRecordingDistanceDisplayOptions(boolean metricUnits) {
+ String[] values = getResources().getStringArray(R.array.min_recording_distance_values);
+ String[] options = new String[values.length];
+ for (int i = 0; i < values.length; i++) {
+ int value = Integer.parseInt(values[i]);
+ if (metricUnits) {
+ options[i] = getString(value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT
+ ? R.string.value_integer_meter_recommended
+ : R.string.value_integer_meter, value);
+ } else {
+ int feet = (int) (value * UnitConversions.M_TO_FT);
+ options[i] = getString(value == PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT
+ ? R.string.value_integer_feet_recommended
+ : R.string.value_integer_feet, feet);
+ }
+ }
+ return options;
+ }
+
+ /**
+ * Gets the max recording distance display options.
+ *
+ * @param metricUnits true to display metric units
+ */
+ private String[] getMaxRecordingDistanceDisplayOptions(boolean metricUnits) {
+ String[] values = getResources().getStringArray(R.array.max_recording_distance_values);
+ String[] options = new String[values.length];
+ for (int i = 0; i < values.length; i++) {
+ int value = Integer.parseInt(values[i]);
+ if (metricUnits) {
+ options[i] = getString(value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT
+ ? R.string.value_integer_meter_recommended
+ : R.string.value_integer_meter, value);
+ } else {
+ int feet = (int) (value * UnitConversions.M_TO_FT);
+ if (feet < 2000) {
+ options[i] = getString(value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT
+ ? R.string.value_integer_feet_recommended
+ : R.string.value_integer_feet, feet);
+ } else {
+ double mile = feet * UnitConversions.FT_TO_MI;
+ options[i] = getString(R.string.value_float_mile, mile);
+ }
+ }
+ }
+ return options;
+ }
+
+ /**
+ * Gets the min required accuracy display options.
+ *
+ * @param metricUnits true to display metric units
+ */
+ private String[] getMinRequiredAccuracyDisplayOptions(boolean metricUnits) {
+ String[] values = getResources().getStringArray(R.array.min_required_accuracy_values);
+ String[] options = new String[values.length];
+ for (int i = 0; i < values.length; i++) {
+ int value = Integer.parseInt(values[i]);
+ if (metricUnits) {
+ switch (value) {
+ case PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT:
+ options[i] = getString(R.string.value_integer_meter_recommended, value);
+ break;
+ case PreferencesUtils.MIN_REQUIRED_ACCURACY_EXCELLENT:
+ options[i] = getString(R.string.value_integer_meter_excellent_gps, value);
+ break;
+ case PreferencesUtils.MIN_REQUIRED_ACCURACY_POOR:
+ options[i] = getString(R.string.value_integer_meter_poor_gps, value);
+ break;
+ default:
+ options[i] = getString(R.string.value_integer_meter, value);
+ }
+ } else {
+ int feet = (int) (value * UnitConversions.M_TO_FT);
+ if (feet < 2000) {
+ switch (value) {
+ case PreferencesUtils.MIN_REQUIRED_ACCURACY_DEFAULT:
+ options[i] = getString(R.string.value_integer_feet_recommended, feet);
+ break;
+ case PreferencesUtils.MIN_REQUIRED_ACCURACY_EXCELLENT:
+ options[i] = getString(R.string.value_integer_feet_excellent_gps, feet);
+ break;
+ default:
+ options[i] = getString(R.string.value_integer_feet, feet);
+ }
+ } else {
+ double mile = feet * UnitConversions.FT_TO_MI;
+ options[i] = getString(value == PreferencesUtils.MIN_REQUIRED_ACCURACY_POOR
+ ? R.string.value_float_mile_poor_gps
+ : R.string.value_float_mile, mile);
+ }
+ }
+ }
+ return options;
+ }
+
+ /**
+ * Gets the auto resume track timeout display options.
+ */
+ private String[] getAutoResumeTrackTimeoutDisplayOptions() {
+ String[] values = getResources().getStringArray(R.array.auto_resume_track_timeout_values);
+ String[] options = new String[values.length];
+ for (int i = 0; i < values.length; i++) {
+ int value = Integer.parseInt(values[i]);
+ switch (value) {
+ case PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_NEVER:
+ options[i] = getString(R.string.value_never);
+ break;
+ case PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_ALWAYS:
+ options[i] = getString(R.string.value_always);
+ break;
+ default:
+ options[i] = getString(R.string.value_integer_minute, value);
+ }
+ }
+ return options;
+ }
+}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
index c5f2a472f..606b21276 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/settings/SettingsActivity.java
@@ -36,7 +36,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
-import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -63,69 +62,25 @@ public class SettingsActivity extends AbstractSettingsActivity {
private static final int DIALOG_CONFIRM_RESET_ID = 0;
- // Value when the task frequency is off.
- private static final String TASK_FREQUENCY_OFF = "0";
-
- // Value when the recording interval is 'Adapt battery life'.
- private static final String RECORDING_INTERVAL_ADAPT_BATTERY_LIFE = "-2";
-
- // Value when the recording interval is 'Adapt accuracy'.
- private static final String RECORDING_INTERVAL_ADAPT_ACCURACY = "-1";
-
- // Value for the recommended recording interval.
- private static final String RECORDING_INTERVAL_RECOMMENDED = "0";
-
- // Value when the auto resume timeout is never.
- private static final String AUTO_RESUME_TIMEOUT_NEVER = "0";
-
- // Value when the auto resume timeout is always.
- private static final String AUTO_RESUME_TIMEOUT_ALWAYS = "-1";
-
- // Value for the recommended recording distance.
- private static final String RECORDING_DISTANCE_RECOMMENDED = "5";
-
- // Value for the recommended track distance.
- private static final String TRACK_DISTANCE_RECOMMENDED = "200";
-
- // Value for the recommended GPS accuracy.
- private static final String GPS_ACCURACY_RECOMMENDED = "200";
-
- // Value when the GPS accuracy is for excellent GPS signal.
- private static final String GPS_ACCURACY_EXCELLENT = "10";
-
- // Value when the GPS accuracy is for poor GPS signal.
- private static final String GPS_ACCURACY_POOR = "5000";
-
- /** Called when the activity is first created. */
@Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- // Load the preferences to be displayed
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
addPreferencesFromResource(R.xml.preferences);
- setRecordingIntervalOptions();
- setAutoResumeTimeoutOptions();
-
- // Hook up switching of displayed list entries between metric and imperial
- // units
- CheckBoxPreference metricUnitsPreference =
- (CheckBoxPreference) findPreference(PreferencesUtils.getKey(this, R.string.metric_units_key));
- metricUnitsPreference.setOnPreferenceChangeListener(
- new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference,
- Object newValue) {
- boolean isMetric = (Boolean) newValue;
- updateDisplayOptions(isMetric);
- return true;
- }
- });
- updateDisplayOptions(metricUnitsPreference.isChecked());
-
customizeSensorOptionsPreferences();
customizeTrackColorModePreferences();
+ Preference recordingPreference = findPreference(getString(R.string.settings_recording_key));
+ recordingPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = IntentUtils.newIntent(
+ SettingsActivity.this, RecordingSettingsActivity.class);
+ startActivity(intent);
+ return true;
+ }
+ });
+
Preference sharingPreference = findPreference(getString(R.string.settings_sharing_key));
sharingPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
@@ -173,58 +128,6 @@ public class SettingsActivity extends AbstractSettingsActivity {
}
}
- /**
- * Sets the display options for the 'Time between points' option.
- */
- private void setRecordingIntervalOptions() {
- String[] values = getResources().getStringArray(R.array.recording_interval_values);
- String[] options = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- if (values[i].equals(RECORDING_INTERVAL_ADAPT_BATTERY_LIFE)) {
- options[i] = getString(R.string.value_adapt_battery_life);
- } else if (values[i].equals(RECORDING_INTERVAL_ADAPT_ACCURACY)) {
- options[i] = getString(R.string.value_adapt_accuracy);
- } else if (values[i].equals(RECORDING_INTERVAL_RECOMMENDED)) {
- options[i] = getString(R.string.value_smallest_recommended);
- } else {
- int value = Integer.parseInt(values[i]);
- String format;
- if (value < 60) {
- format = getString(R.string.value_integer_second);
- } else {
- value = value / 60;
- format = getString(R.string.value_integer_minute);
- }
- options[i] = String.format(format, value);
- }
- }
- ListPreference list = (ListPreference) findPreference(
- getString(R.string.min_recording_interval_key));
- list.setEntries(options);
- }
-
- /**
- * Sets the display options for the 'Auto-resume timeout' option.
- */
- private void setAutoResumeTimeoutOptions() {
- String[] values = getResources().getStringArray(R.array.recording_auto_resume_timeout_values);
- String[] options = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- if (values[i].equals(AUTO_RESUME_TIMEOUT_NEVER)) {
- options[i] = getString(R.string.value_never);
- } else if (values[i].equals(AUTO_RESUME_TIMEOUT_ALWAYS)) {
- options[i] = getString(R.string.value_always);
- } else {
- int value = Integer.parseInt(values[i]);
- String format = getString(R.string.value_integer_minute);
- options[i] = String.format(format, value);
- }
- }
- ListPreference list = (ListPreference) findPreference(
- getString(R.string.auto_resume_track_timeout_key));
- list.setEntries(options);
- }
-
private void customizeSensorOptionsPreferences() {
ListPreference sensorTypePreference =
(ListPreference) findPreference(getString(R.string.sensor_type_key));
@@ -343,150 +246,6 @@ public class SettingsActivity extends AbstractSettingsActivity {
findPreference(getString(R.string.track_color_mode_dynamic_speed_variation_key))
.setEnabled(usesDynamicSpeed);
}
-
- /**
- * Updates display options that depends on the preferred distance units, metric or imperial.
- *
- * @param isMetric true to use metric units, false to use imperial
- */
- private void updateDisplayOptions(boolean isMetric) {
- setTaskOptions(isMetric, R.string.announcement_frequency_key);
- setTaskOptions(isMetric, R.string.split_frequency_key);
- setRecordingDistanceOptions(isMetric, R.string.min_recording_distance_key);
- setTrackDistanceOptions(isMetric, R.string.max_recording_distance_key);
- setGpsAccuracyOptions(isMetric, R.string.min_required_accuracy_key);
- }
-
- /**
- * Sets the display options for a periodic task.
- */
- private void setTaskOptions(boolean isMetric, int listId) {
- String[] values = getResources().getStringArray(R.array.recording_task_frequency_values);
- String[] options = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- if (values[i].equals(TASK_FREQUENCY_OFF)) {
- options[i] = getString(R.string.value_off);
- } else if (values[i].startsWith("-")) {
- int value = Integer.parseInt(values[i].substring(1));
- int stringId = isMetric ? R.string.value_integer_kilometer : R.string.value_integer_mile;
- String format = getString(stringId);
- options[i] = String.format(format, value);
- } else {
- int value = Integer.parseInt(values[i]);
- String format = getString(R.string.value_integer_minute);
- options[i] = String.format(format, value);
- }
- }
-
- ListPreference list = (ListPreference) findPreference(getString(listId));
- list.setEntries(options);
- }
-
- /**
- * Sets the display options for 'Distance between points' option.
- */
- private void setRecordingDistanceOptions(boolean isMetric, int listId) {
- String[] values = getResources().getStringArray(R.array.recording_distance_values);
- String[] options = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- int value = Integer.parseInt(values[i]);
- if (!isMetric) {
- value = (int) (value * UnitConversions.M_TO_FT);
- }
- String format;
- if (values[i].equals(RECORDING_DISTANCE_RECOMMENDED)) {
- int stringId = isMetric ? R.string.value_integer_meter_recommended
- : R.string.value_integer_feet_recommended;
- format = getString(stringId);
- } else {
- int stringId = isMetric ? R.string.value_integer_meter : R.string.value_integer_feet;
- format = getString(stringId);
- }
- options[i] = String.format(format, value);
- }
-
- ListPreference list = (ListPreference) findPreference(getString(listId));
- list.setEntries(options);
- }
-
- /**
- * Sets the display options for 'Distance between Tracks'.
- */
- private void setTrackDistanceOptions(boolean isMetric, int listId) {
- String[] values = getResources().getStringArray(R.array.recording_track_distance_values);
- String[] options = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- int value = Integer.parseInt(values[i]);
- String format;
- if (isMetric) {
- int stringId = values[i].equals(TRACK_DISTANCE_RECOMMENDED)
- ? R.string.value_integer_meter_recommended : R.string.value_integer_meter;
- format = getString(stringId);
- options[i] = String.format(format, value);
- } else {
- value = (int) (value * UnitConversions.M_TO_FT);
- if (value < 2000) {
- int stringId = values[i].equals(TRACK_DISTANCE_RECOMMENDED)
- ? R.string.value_integer_feet_recommended : R.string.value_integer_feet;
- format = getString(stringId);
- options[i] = String.format(format, value);
- } else {
- double mile = value * UnitConversions.FT_TO_MI;
- format = getString(R.string.value_float_mile);
- options[i] = String.format(format, mile);
- }
- }
- }
-
- ListPreference list = (ListPreference) findPreference(getString(listId));
- list.setEntries(options);
- }
-
- /**
- * Sets the display options for 'GPS accuracy'.
- */
- private void setGpsAccuracyOptions(boolean isMetric, int listId) {
- String[] values = getResources().getStringArray(R.array.recording_gps_accuracy_values);
- String[] options = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- int value = Integer.parseInt(values[i]);
- String format;
- if (isMetric) {
- if (values[i].equals(GPS_ACCURACY_RECOMMENDED)) {
- format = getString(R.string.value_integer_meter_recommended);
- } else if (values[i].equals(GPS_ACCURACY_EXCELLENT)) {
- format = getString(R.string.value_integer_meter_excellent_gps);
- } else if (values[i].equals(GPS_ACCURACY_POOR)) {
- format = getString(R.string.value_integer_meter_poor_gps);
- } else {
- format = getString(R.string.value_integer_meter);
- }
- options[i] = String.format(format, value);
- } else {
- value = (int) (value * UnitConversions.M_TO_FT);
- if (value < 2000) {
- if (values[i].equals(GPS_ACCURACY_RECOMMENDED)) {
- format = getString(R.string.value_integer_feet_recommended);
- } else if (values[i].equals(GPS_ACCURACY_EXCELLENT)) {
- format = getString(R.string.value_integer_feet_excellent_gps);
- } else {
- format = getString(R.string.value_integer_feet);
- }
- options[i] = String.format(format, value);
- } else {
- double mile = value * UnitConversions.FT_TO_MI;
- if (values[i].equals(GPS_ACCURACY_POOR)) {
- format = getString(R.string.value_float_mile_poor_gps);
- } else {
- format = getString(R.string.value_float_mile);
- }
- options[i] = String.format(format, mile);
- }
- }
- }
- ListPreference list = (ListPreference) findPreference(getString(listId));
- list.setEntries(options);
- }
/**
* Configures preference actions related to bluetooth.
diff --git a/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsBuilder.java b/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsBuilder.java
index c1dd59442..3f6f7e770 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsBuilder.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/stats/TripStatisticsBuilder.java
@@ -19,6 +19,7 @@ package com.google.android.apps.mytracks.stats;
import static com.google.android.apps.mytracks.Constants.TAG;
import com.google.android.apps.mytracks.Constants;
+import com.google.android.apps.mytracks.util.PreferencesUtils;
import android.location.Location;
import android.util.Log;
@@ -91,8 +92,7 @@ public class TripStatisticsBuilder {
*/
private long totalLocations = 0;
- private int minRecordingDistance =
- Constants.DEFAULT_MIN_RECORDING_DISTANCE;
+ private int minRecordingDistance = PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT;
/**
* Creates a new trip starting at the given time.
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
index 888843a16..10e4e680b 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java
@@ -30,13 +30,36 @@ import android.content.SharedPreferences.Editor;
public class PreferencesUtils {
/*
- * Preferences defaults, need to match the android:defaultValue in the xml
+ * Preferences values. The defaults need to match the defaults in the xml
* files.
*/
public static final boolean ALLOW_ACCESS_DEFAULT = false;
+ public static final int ANNOUNCEMENT_FREQUENCY_DEFAULT = 0;
+ public static final int AUTO_RESUME_TRACK_CURRENT_RETRY_DEFAULT = 0;
+
+ public static final int AUTO_RESUME_TRACK_TIMEOUT_ALWAYS = -1;
+ public static final int AUTO_RESUME_TRACK_TIMEOUT_DEFAULT = 10;
+ public static final int AUTO_RESUME_TRACK_TIMEOUT_NEVER = 0;
+
+ public static final String DEFAULT_ACTIVITY_DEFAULT = "";
public static final boolean DEFAULT_MAP_PUBLIC_DEFAULT = true;
+ public static final int MAX_RECORDING_DISTANCE_DEFAULT = 200;
+ public static final boolean METRIC_UNITS_DEFAULT = true;
+ public static final int MIN_RECORDING_DISTANCE_DEFAULT = 5;
+
+ public static final int MIN_RECORDING_INTERVAL_ADAPT_ACCURACY = -1;
+ public static final int MIN_RECORDING_INTERVAL_ADAPT_BATTERY_LIFE = -2;
+ public static final int MIN_RECORDING_INTERVAL_DEFAULT = 0;
+
+ public static final int MIN_REQUIRED_ACCURACY_DEFAULT = 200;
+ public static final int MIN_REQUIRED_ACCURACY_EXCELLENT = 10;
+ public static final int MIN_REQUIRED_ACCURACY_POOR = 5000;
+
+ public static final int PERIODIC_TASK_OFF = 0;
+
public static final long RECORDING_TRACK_ID_DEFAULT = -1L;
public static final boolean SHARE_URL_ONLY_DEFAULT = false;
+ public static final int SPLIT_FREQUENCY_DEFAULT = 0;
private PreferencesUtils() {}
@@ -78,6 +101,34 @@ public class PreferencesUtils {
ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
}
+ /**
+ * Gets an integer preference value.
+ *
+ * @param context the context
+ * @param keyId the key id
+ * @param defaultValue the default value
+ */
+ public static int getInt(Context context, int keyId, int defaultValue) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ return sharedPreferences.getInt(getKey(context, keyId), defaultValue);
+ }
+
+ /**
+ * Sets an integer preference value.
+ *
+ * @param context the context
+ * @param keyId the key id
+ * @param value the value
+ */
+ public static void setInt(Context context, int keyId, int value) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ Editor editor = sharedPreferences.edit();
+ editor.putInt(getKey(context, keyId), value);
+ ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
+ }
+
/**
* Gets a long preference value.
*
@@ -104,4 +155,17 @@ public class PreferencesUtils {
editor.putLong(getKey(context, keyId), value);
ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
}
+
+ /**
+ * Gets a string preference value.
+ *
+ * @param context the context
+ * @param keyId the key id
+ * @param defaultValue default value
+ */
+ public static String getString(Context context, int keyId, String defaultValue) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ return sharedPreferences.getString(getKey(context, keyId), defaultValue);
+ }
}
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 fddd0923a..d4557bfdf 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
@@ -165,7 +165,7 @@ public class TrackRecordingServiceTest extends ServiceTestCase