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