diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java index 5b8fd912f..7e27dd52d 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java @@ -139,7 +139,8 @@ public class TrackRecordingServiceTestLooper { @MediumTest @Test public void testWithProperties_minRecordingDistanceDefault() throws TimeoutException { - PreferencesUtils.setInt(context, R.string.recording_distance_interval_key, PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT); + int minRecordingIntervalDefault = Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default)); + PreferencesUtils.setInt(context, R.string.recording_distance_interval_key, minRecordingIntervalDefault); fullRecordingSession(); } @@ -202,7 +203,8 @@ public class TrackRecordingServiceTestLooper { @MediumTest @Test public void testWithProperties_minRequiredAccuracyDefault() throws TimeoutException { - PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT); + int recordingGPSAccuracyDefault = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_default)); + PreferencesUtils.setInt(context, R.string.recording_gps_accuracy_key, recordingGPSAccuracyDefault); fullRecordingSession(); } diff --git a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java index 0a7c6a1b1..dbe3a705c 100644 --- a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java @@ -69,7 +69,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker private SharedPreferences sharedPreferences; private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; - private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; + private boolean recordingTrackPaused; /* * Note that sharedPreferenceChangeListener cannot be an anonymous inner * class. Anonymous inner class will get garbage collected. @@ -128,6 +128,8 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + recordingTrackPaused = PreferencesUtils.isRecordingTrackPausedDefault(this); + contentProviderUtils = ContentProviderUtils.Factory.get(this); sharedPreferences = PreferencesUtils.getSharedPreferences(this); diff --git a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java index a9ab0f3cb..3b3f36761 100644 --- a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java @@ -101,7 +101,7 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; - private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; + private boolean recordingTrackPaused; // Callback when an item is selected in the contextual action mode private ContextualActionModeCallback contextualActionModeCallback = new ContextualActionModeCallback() { @@ -168,6 +168,8 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa super.onCreate(savedInstanceState); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); + recordingTrackPaused = PreferencesUtils.isRecordingTrackPausedDefault(this); + contentProviderUtils = ContentProviderUtils.Factory.get(this); sharedPreferences = PreferencesUtils.getSharedPreferences(this); trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, null); diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java index 5018f85fe..301d69a04 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java @@ -93,7 +93,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA // Preferences private long recordingTrackId = PreferencesUtils.RECORDING_TRACK_ID_DEFAULT; - private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; + private boolean recordingTrackPaused; private final Runnable bindChangedCallback = new Runnable() { @Override @@ -182,6 +182,8 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + recordingTrackPaused = PreferencesUtils.isRecordingTrackPausedDefault(this); + hasCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); photoUri = savedInstanceState != null ? (Uri) savedInstanceState.getParcelable(PHOTO_URI_KEY) : null; hasPhoto = savedInstanceState != null && savedInstanceState.getBoolean(HAS_PHOTO_KEY, false); diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 3dffb4253..306e38100 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -125,7 +125,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe } }; - private boolean recordingTrackPaused = PreferencesUtils.RECORDING_TRACK_PAUSED_DEFAULT; + private boolean recordingTrackPaused; /* * Note that sharedPreferenceChangeListener cannot be an anonymous inner class. @@ -225,8 +225,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe // Not recording -> Recording updateMenuItems(false, true); startRecording(); - } else { - if (recordingTrackPaused) { + } else if (recordingTrackPaused) { // Paused -> Resume updateMenuItems(false, true); trackRecordingServiceConnection.resumeTrack(); @@ -237,7 +236,6 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe trackRecordingServiceConnection.pauseTrack(); trackController.update(true, true); } - } } }; @@ -245,6 +243,8 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + recordingTrackPaused = PreferencesUtils.isRecordingTrackPausedDefault(this); + contentProviderUtils = ContentProviderUtils.Factory.get(this); sharedPreferences = PreferencesUtils.getSharedPreferences(this); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index 1ce924111..3da85deb1 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -68,7 +68,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { private boolean metricUnits = true; private boolean reportSpeed = true; - private int recordingDistanceInterval = PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT; + private int recordingDistanceInterval; // Modes of operation private boolean chartByDistance = true; @@ -99,6 +99,8 @@ public class ChartFragment extends Fragment implements TrackDataListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + recordingDistanceInterval = PreferencesUtils.getRecordingDistanceIntervalDefault(getContext()); + /* * Create a chartView here to store data thus won't need to reload all the data on every onStart or onResume. */ diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java index 7945a2ee7..bd84df30b 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java @@ -45,7 +45,6 @@ import de.dennisguse.opentracks.services.ITrackRecordingService; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.stats.TripStatistics; import de.dennisguse.opentracks.util.LocationUtils; -import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StatsUtils; import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.UnitConversions; @@ -81,7 +80,7 @@ public class StatsFragment extends Fragment implements TrackDataListener { } }; private String category = ""; - private int recordingGpsAccuracy = PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT; + private int recordingGpsAccuracy; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -91,6 +90,9 @@ public class StatsFragment extends Fragment implements TrackDataListener { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + + recordingGpsAccuracy = Integer.parseInt(getContext().getResources().getString(R.string.recording_gps_accuracy_default)); + handlerUpdateUI = new Handler(); Spinner activityTypeIcon = getView().findViewById(R.id.stats_activity_type_icon); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 1e65dc29a..24292ee86 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -139,17 +139,14 @@ public class TrackRecordingService extends Service { } if (PreferencesUtils.isKey(context, R.string.min_recording_interval_key, key)) { int minRecordingInterval = PreferencesUtils.getMinRecordingInterval(context); - switch (minRecordingInterval) { - case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_BATTERY_LIFE: - // Choose battery life over moving time accuracy. - locationListenerPolicy = new AdaptiveLocationListenerPolicy(30 * UnitConversions.ONE_SECOND, 5 * ONE_MINUTE, 5); - break; - case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_ACCURACY: - // Get all the updates. - locationListenerPolicy = new AdaptiveLocationListenerPolicy(UnitConversions.ONE_SECOND, 30 * UnitConversions.ONE_SECOND, 0); - break; - default: - locationListenerPolicy = new AbsoluteLocationListenerPolicy(minRecordingInterval * UnitConversions.ONE_SECOND); + if (minRecordingInterval == PreferencesUtils.getMinRecordingIntervalAdaptBatteryLife(context)) { + // Choose battery life over moving time accuracy. + locationListenerPolicy = new AdaptiveLocationListenerPolicy(30 * UnitConversions.ONE_SECOND, 5 * ONE_MINUTE, 5); + } else if (minRecordingInterval == PreferencesUtils.getMinRecordingIntervalAdaptAccuracy(context)) { + // Get all the updates. + locationListenerPolicy = new AdaptiveLocationListenerPolicy(UnitConversions.ONE_SECOND, 30 * UnitConversions.ONE_SECOND, 0); + } else { + locationListenerPolicy = new AbsoluteLocationListenerPolicy(minRecordingInterval * UnitConversions.ONE_SECOND); } } if (PreferencesUtils.isKey(context, R.string.recording_distance_interval_key, key)) { diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java b/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java index 33ae873c1..6ae933412 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/PeriodicTaskExecutor.java @@ -17,9 +17,9 @@ package de.dennisguse.opentracks.services.tasks; import android.util.Log; +import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.stats.TripStatistics; -import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.UnitConversions; /** @@ -35,13 +35,14 @@ public class PeriodicTaskExecutor { private final TrackRecordingService trackRecordingService; private final PeriodicTaskFactory periodicTaskFactory; + private final int TASK_FREQUENCY_OFF; /** * The task frequency. * A positive value is a time frequency (minutes). * A negative value is a distance frequency (km or mi). * A zero value is to turn off periodic task. */ - private int taskFrequency = PreferencesUtils.FREQUENCY_OFF; + private int taskFrequency; private PeriodicTask periodicTask; @@ -56,6 +57,9 @@ public class PeriodicTaskExecutor { public PeriodicTaskExecutor(TrackRecordingService trackRecordingService, PeriodicTaskFactory periodicTaskFactory) { this.trackRecordingService = trackRecordingService; this.periodicTaskFactory = periodicTaskFactory; + + TASK_FREQUENCY_OFF = Integer.parseInt(trackRecordingService.getBaseContext().getResources().getString(R.string.frequency_off)); + taskFrequency = TASK_FREQUENCY_OFF; } /** @@ -71,7 +75,7 @@ public class PeriodicTaskExecutor { timerTaskExecutor.shutdown(); timerTaskExecutor = null; } - if (taskFrequency == PreferencesUtils.FREQUENCY_OFF) { + if (taskFrequency == TASK_FREQUENCY_OFF) { Log.d(TAG, "Task frequency is off."); return; } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java b/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java index 82d769aa3..c587a7665 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java @@ -15,167 +15,157 @@ import de.dennisguse.opentracks.util.UnitConversions; final class PreferenceHelper { - /** - * Sets the min recording interval options. - * - * @param options the options - * @param values the values - */ - static void setMinRecordingIntervalOptions(Context context, String[] options, String[] values) { - 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] = context.getString(R.string.value_adapt_battery_life); - break; - case PreferencesUtils.MIN_RECORDING_INTERVAL_ADAPT_ACCURACY: - options[i] = context.getString(R.string.value_adapt_accuracy); - break; - case PreferencesUtils.MIN_RECORDING_INTERVAL_DEFAULT: - options[i] = context.getString(R.string.value_smallest_recommended); - break; - default: - options[i] = value < 60 ? context.getString(R.string.value_integer_second, value) : context.getString(R.string.value_integer_minute, value / 60); + static String[] getMinRecordingIntervalEntries(Context context) { + String[] entryValues = context.getResources().getStringArray(R.array.min_recording_interval_values); + String[] entries = new String[entryValues.length]; + for (int i = 0; i < entryValues.length; i++) { + int value = Integer.parseInt(entryValues[i]); + + if (value == PreferencesUtils.getMinRecordingIntervalAdaptAccuracy(context)) { + entries[i] = context.getString(R.string.value_adapt_accuracy); + } else if (value == PreferencesUtils.getMinRecordingIntervalAdaptBatteryLife(context)) { + entries[i] = context.getString(R.string.value_adapt_battery_life); + } else if (value == PreferencesUtils.getMinRecordingIntervalDefault(context)) { + entries[i] = context.getString(R.string.value_smallest_recommended); + } else { + entries[i] = value < 60 ? context.getString(R.string.value_integer_second, value) : context.getString(R.string.value_integer_minute, value / 60); } } + + return entries; } - /** - * Sets the recording distance interval options. - * - * @param options the options - * @param values the values - * @param metricUnits true for metric units - */ - static void setRecordingDistanceIntervalOptions(Context context, String[] options, String[] values, boolean metricUnits) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); + static String[] getRecordingDistanceIntervalEntries(Context context, boolean metricUnits) { + String[] entryValues = context.getResources().getStringArray(R.array.recording_distance_interval_values); + String[] entries = new String[entryValues.length]; + + final int recordingDistanceIntervalDefault = PreferencesUtils.getRecordingDistanceIntervalDefault(context); + + for (int i = 0; i < entryValues.length; i++) { + int value = Integer.parseInt(entryValues[i]); String displayValue; if (metricUnits) { displayValue = context.getString(R.string.value_integer_meter, value); - if (value == PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT) { - options[i] = context.getString(R.string.value_integer_meter_recommended, value); + if (value == recordingDistanceIntervalDefault) { + entries[i] = context.getString(R.string.value_integer_meter_recommended, value); } else { - options[i] = displayValue; + entries[i] = displayValue; } } else { int feet = (int) (value * UnitConversions.M_TO_FT); displayValue = context.getString(R.string.value_integer_feet, feet); - if (value == PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT) { - options[i] = context.getString(R.string.value_integer_feet_recommended, feet); + if (value == recordingDistanceIntervalDefault) { + entries[i] = context.getString(R.string.value_integer_feet_recommended, feet); } else { - options[i] = displayValue; + entries[i] = displayValue; } } } + + return entries; } - /** - * Sets the max recording distance options. - * - * @param options the options - * @param values the values - * @param metricUnits true for metric units - */ - static void setMaxRecordingDistanceOptions(Context context, String[] options, String[] values, boolean metricUnits) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); + static String[] getMaxRecordingDistanceEntries(Context context, boolean metricUnits) { + String[] entryValues = context.getResources().getStringArray(R.array.max_recording_distance_values); + String[] entries = new String[entryValues.length]; + + final int maxRecordingDistanceDefault = Integer.parseInt(context.getResources().getString(R.string.max_recording_distance_default)); + + for (int i = 0; i < entryValues.length; i++) { + int value = Integer.parseInt(entryValues[i]); String displayValue; if (metricUnits) { displayValue = context.getString(R.string.value_integer_meter, value); - if (value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT) { - options[i] = context.getString(R.string.value_integer_meter_recommended, value); + if (value == maxRecordingDistanceDefault) { + entries[i] = context.getString(R.string.value_integer_meter_recommended, value); } else { - options[i] = displayValue; + entries[i] = displayValue; } } else { int feet = (int) (value * UnitConversions.M_TO_FT); if (feet < 2000) { displayValue = context.getString(R.string.value_integer_feet, feet); - if (value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT) { - options[i] = context.getString(R.string.value_integer_feet_recommended, feet); + if (value == maxRecordingDistanceDefault) { + entries[i] = context.getString(R.string.value_integer_feet_recommended, feet); } else { - options[i] = displayValue; + entries[i] = displayValue; } } else { double mile = feet * UnitConversions.FT_TO_MI; displayValue = context.getString(R.string.value_float_mile, mile); - options[i] = displayValue; + entries[i] = displayValue; } } } + + return entries; } - /** - * Sets the recording gps accuracy options. - * - * @param options the options - * @param values the values - * @param metricUnits true for metric units - */ - static void setRecordingGpsAccuracyOptions(Context context, String[] options, String[] values, boolean metricUnits) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); + static String[] getRecordingGpsAccuracyEntries(Context context, boolean metricUnits) { + String[] entryValues = context.getResources().getStringArray(R.array.recording_gps_accuracy_values); + String[] entries = new String[entryValues.length]; + + final int recordingGPSAccuracyDefault = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_default)); + final int recordingGPSAccuracyExcellent = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_excellent)); + final int recordingGPSAccuracyPoor = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_poor)); + + for (int i = 0; i < entryValues.length; i++) { + int value = Integer.parseInt(entryValues[i]); String displayValue; if (metricUnits) { displayValue = context.getString(R.string.value_integer_meter, value); - switch (value) { - case PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT: - options[i] = context.getString(R.string.value_integer_meter_recommended, value); - break; - case PreferencesUtils.RECORDING_GPS_ACCURACY_EXCELLENT: - options[i] = context.getString(R.string.value_integer_meter_excellent_gps, value); - break; - case PreferencesUtils.RECORDING_GPS_ACCURACY_POOR: - options[i] = context.getString(R.string.value_integer_meter_poor_gps, value); - break; - default: - options[i] = displayValue; + if (value == recordingGPSAccuracyDefault) { + entries[i] = context.getString(R.string.value_integer_meter_recommended, value); + } else if (value == recordingGPSAccuracyExcellent) { + entries[i] = context.getString(R.string.value_integer_meter_excellent_gps, value); + } else if (value == recordingGPSAccuracyPoor) { + entries[i] = context.getString(R.string.value_integer_meter_poor_gps, value); + } else { + entries[i] = displayValue; } } else { int feet = (int) (value * UnitConversions.M_TO_FT); if (feet < 2000) { displayValue = context.getString(R.string.value_integer_feet, feet); - switch (value) { - case PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT: - options[i] = context.getString(R.string.value_integer_feet_recommended, feet); - break; - case PreferencesUtils.RECORDING_GPS_ACCURACY_EXCELLENT: - options[i] = context.getString(R.string.value_integer_feet_excellent_gps, feet); - break; - default: - options[i] = displayValue; + + if (value == recordingGPSAccuracyDefault) { + entries[i] = context.getString(R.string.value_integer_feet_recommended, feet); + } else if (value == recordingGPSAccuracyExcellent) { + entries[i] = context.getString(R.string.value_integer_feet_excellent_gps, feet); + } else { + entries[i] = displayValue; } } else { double mile = feet * UnitConversions.FT_TO_MI; displayValue = context.getString(R.string.value_float_mile, mile); - if (value == PreferencesUtils.RECORDING_GPS_ACCURACY_POOR) { - options[i] = context.getString(R.string.value_float_mile_poor_gps, mile); + if (value == recordingGPSAccuracyPoor) { + entries[i] = context.getString(R.string.value_float_mile_poor_gps, mile); } else { - options[i] = displayValue; + entries[i] = displayValue; } } } } + + return entries; } - /** - * Sets the auto resume track timeout options. - * - * @param options the options - * @param values the values - */ - static void setAutoResumeTrackTimeoutOptions(Context context, String[] options, String[] values) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); + static String[] getAutoResumeTrackTimeoutEntries(Context context) { + String[] entryValues = context.getResources().getStringArray(R.array.auto_resume_track_timeout_values); + String[] entries = new String[entryValues.length]; + + for (int i = 0; i < entryValues.length; i++) { + int value = Integer.parseInt(entryValues[i]); if (value == Integer.parseInt(context.getResources().getString(R.string.auto_resume_track_timeout_never))) { - options[i] = context.getString(R.string.value_never); + entries[i] = context.getString(R.string.value_never); } else if (value == Integer.parseInt(context.getResources().getString(R.string.auto_resume_track_timeout_always))) { - options[i] = context.getString(R.string.value_always); + entries[i] = context.getString(R.string.value_always); } else { - options[i] = context.getString(R.string.value_integer_minute, value); + entries[i] = context.getString(R.string.value_integer_minute, value); } } + + return entries; } /** diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 659f82980..c042dec89 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -102,40 +102,6 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit PreferencesUtils.getSharedPreferences(getActivity()).unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } - private void configFrequencyPreference(int key, boolean metricUnits) { - ListPreference preference = findPreference(getString(key)); - - String[] options = StringUtils.getFrequencyOptions(getActivity(), metricUnits); - preference.setEntries(options); - } - - private void configListPreference(int key, int valueArray, boolean metricUnits) { - String[] values = getResources().getStringArray(valueArray); - final String[] options = new String[values.length]; - switch (key) { - case R.string.min_recording_interval_key: - PreferenceHelper.setMinRecordingIntervalOptions(getActivity(), options, values); - break; - case R.string.recording_distance_interval_key: - PreferenceHelper.setRecordingDistanceIntervalOptions(getActivity(), options, values, metricUnits); - break; - case R.string.max_recording_distance_key: - PreferenceHelper.setMaxRecordingDistanceOptions(getActivity(), options, values, metricUnits); - break; - case R.string.recording_gps_accuracy_key: - PreferenceHelper.setRecordingGpsAccuracyOptions(getActivity(), options, values, metricUnits); - break; - case R.string.auto_resume_track_timeout_key: - PreferenceHelper.setAutoResumeTrackTimeoutOptions(getActivity(), options, values); - break; - default: - return; - } - - final ListPreference listPreference = findPreference(getString(key)); - listPreference.setEntries(options); - } - @Override public void onDisplayPreferenceDialog(Preference preference) { DialogFragment dialogFragment = null; @@ -177,19 +143,30 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit private void updateUnits() { boolean metricUnits = PreferencesUtils.isMetricUnits(getActivity()); - //TODO Refactor this! - configFrequencyPreference(R.string.voice_frequency_key, metricUnits); - configFrequencyPreference(R.string.split_frequency_key, metricUnits); - configListPreference(R.string.min_recording_interval_key, R.array.min_recording_interval_values, metricUnits); - configListPreference(R.string.recording_distance_interval_key, R.array.recording_distance_interval_values, metricUnits); - configListPreference(R.string.max_recording_distance_key, R.array.max_recording_distance_values, metricUnits); - configListPreference(R.string.recording_gps_accuracy_key, R.array.recording_gps_accuracy_values, metricUnits); - configListPreference(R.string.auto_resume_track_timeout_key, R.array.auto_resume_track_timeout_values, metricUnits); - configListPreference(R.string.auto_resume_track_timeout_key, R.array.auto_resume_track_timeout_values, metricUnits); + ListPreference voiceFrequency = findPreference(getString(R.string.voice_frequency_key)); + voiceFrequency.setEntries(StringUtils.getFrequencyOptions(getActivity(), metricUnits)); - final ListPreference statsRatePreferences = findPreference(getString(R.string.stats_rate_key)); - String[] options = getResources().getStringArray(metricUnits ? R.array.stats_rate_metric_options : R.array.stats_rate_imperial_options); - statsRatePreferences.setEntries(options); + ListPreference splitFrequency = findPreference(getString(R.string.split_frequency_key)); + splitFrequency.setEntries(StringUtils.getFrequencyOptions(getActivity(), metricUnits)); + + ListPreference minRecordingInterval = findPreference(getString(R.string.min_recording_interval_key)); + minRecordingInterval.setEntries(PreferenceHelper.getMinRecordingIntervalEntries(getActivity())); + + ListPreference recordingDistanceInterval = findPreference(getString(R.string.recording_distance_interval_key)); + recordingDistanceInterval.setEntries(PreferenceHelper.getRecordingDistanceIntervalEntries(getActivity(), metricUnits)); + + ListPreference maxRecordingDistance = findPreference(getString(R.string.max_recording_distance_key)); + maxRecordingDistance.setEntries(PreferenceHelper.getMaxRecordingDistanceEntries(getActivity(), metricUnits)); + + ListPreference recordingGpsAccuracy = findPreference(getString(R.string.recording_gps_accuracy_key)); + recordingGpsAccuracy.setEntries(PreferenceHelper.getRecordingGpsAccuracyEntries(getActivity(), metricUnits)); + + ListPreference autoresumeTrack = findPreference(getString(R.string.auto_resume_track_timeout_key)); + autoresumeTrack.setEntries(PreferenceHelper.getAutoResumeTrackTimeoutEntries(getActivity())); + + ListPreference statsRatePreferences = findPreference(getString(R.string.stats_rate_key)); + String[] entries = getResources().getStringArray(metricUnits ? R.array.stats_rate_metric_options : R.array.stats_rate_imperial_options); + statsRatePreferences.setEntries(entries); HackUtils.invalidatePreference(statsRatePreferences); } diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 018ab82a2..af9f20bd3 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -32,41 +32,8 @@ import de.dennisguse.opentracks.R; */ public class PreferencesUtils { - /* - * Preferences values. - * The defaults need to match the defaults in the xml files. - */ - @Deprecated - public static final boolean RECORDING_TRACK_PAUSED_DEFAULT = true; - public static final String BLUETOOTH_SENSOR_DEFAULT = ""; - // Value for split_frequency_key and voice_frequency_key - @Deprecated - public static final int FREQUENCY_OFF = 0; - - @Deprecated - public static final int MAX_RECORDING_DISTANCE_DEFAULT = 200; - - // Values for min_recording_interval_key - @Deprecated - public static final int MIN_RECORDING_INTERVAL_ADAPT_ACCURACY = -1; - @Deprecated - public static final int MIN_RECORDING_INTERVAL_ADAPT_BATTERY_LIFE = -2; - @Deprecated - public static final int MIN_RECORDING_INTERVAL_DEFAULT = 0; - - @Deprecated - public static final int RECORDING_DISTANCE_INTERVAL_DEFAULT = 10; - - // Values for recording_gps_accuracy - @Deprecated - public static final int RECORDING_GPS_ACCURACY_DEFAULT = 50; - @Deprecated - public static final int RECORDING_GPS_ACCURACY_EXCELLENT = 10; - @Deprecated - public static final int RECORDING_GPS_ACCURACY_POOR = 2000; - private PreferencesUtils() { } @@ -271,8 +238,11 @@ public class PreferencesUtils { } public static boolean isRecordingTrackPaused(Context context) { - final boolean RECORDING_TRACK_PAUSED = context.getResources().getBoolean(R.bool.recording_track_paused_default); - return PreferencesUtils.getBoolean(context, R.string.recording_track_paused_key, RECORDING_TRACK_PAUSED); + return PreferencesUtils.getBoolean(context, R.string.recording_track_paused_key, isRecordingTrackPaused(context)); + } + + public static boolean isRecordingTrackPausedDefault(Context context) { + return context.getResources().getBoolean(R.bool.recording_track_paused_default); } public static void defaultRecordingTrackPaused(Context context) { @@ -337,7 +307,11 @@ public class PreferencesUtils { public static int getRecordingDistanceInterval(Context context) { final int RECORDING_DISTANCE_INTERVAL = Integer.parseInt(context.getResources().getString(R.string.recording_distance_interval_default)); - return PreferencesUtils.getInt(context, R.string.recording_distance_interval_key, RECORDING_DISTANCE_INTERVAL); + return PreferencesUtils.getInt(context, R.string.recording_distance_interval_key, getRecordingDistanceIntervalDefault(context)); + } + + public static int getRecordingDistanceIntervalDefault(Context context) { + return Integer.parseInt(context.getResources().getString(R.string.recording_distance_interval_default)); } public static int getMaxRecordingDistance(Context context) { @@ -350,6 +324,22 @@ public class PreferencesUtils { return PreferencesUtils.getInt(context, R.string.min_recording_interval_key, MIN_RECORDING_INTERVAL); } + public static int getMinRecordingIntervalAdaptAccuracy(Context context) { + return Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_adapt_accuracy)); + } + + public static int getMinRecordingIntervalAdaptBatteryLife(Context context) { + return Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_adapt_battery_life)); + } + + public static int getMinRecordingIntervalDefault(Context context) { + return Integer.parseInt(context.getResources().getString(R.string.min_recording_interval_default)); + } + + + + + public static int getRecordingGPSAccuracy(Context context) { final int RECORDING_GPS_ACCURACY = Integer.parseInt(context.getResources().getString(R.string.recording_gps_accuracy_default)); return PreferencesUtils.getInt(context, R.string.recording_gps_accuracy_key, RECORDING_GPS_ACCURACY); diff --git a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java index 7efddaa6a..dd78b111d 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java @@ -359,7 +359,7 @@ public class StringUtils { String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { int value = Integer.parseInt(values[i]); - if (value == PreferencesUtils.FREQUENCY_OFF) { + if (context.getString(R.string.frequency_off).equals(values[i])) { options[i] = context.getString(R.string.value_off); } else if (value < 0) { options[i] = context.getString(metricUnits ? R.string.value_integer_kilometer : R.string.value_integer_mile, Math.abs(value)); diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 166f15506..e40c10e54 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -129,12 +129,12 @@ splitFrequency - @string/frequency_default + @string/frequency_off voiceFrequency - @string/frequency_default - 0 + @string/frequency_off + 0 - @string/frequency_default + @string/frequency_off 1 2 5 diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml index c9a713591..b8086a25d 100644 --- a/src/main/res/xml/settings.xml +++ b/src/main/res/xml/settings.xml @@ -93,7 +93,7 @@ limitations under the License. android:title="@string/settings_recording_track_name_title" app:useSimpleSummaryProvider="true" />