From c2841092da103ccafd02151efe299ced297cb21c Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 18 Sep 2019 23:29:53 +0200 Subject: [PATCH] Settings: moved setup into helper. --- .../opentracks/settings/PreferenceHelper.java | 212 ++++++++++++++++++ .../settings/RecordingSettingsActivity.java | 177 +-------------- .../opentracks/settings/SettingsActivity.java | 39 +--- 3 files changed, 220 insertions(+), 208 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java b/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java new file mode 100644 index 000000000..ec6de3c35 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferenceHelper.java @@ -0,0 +1,212 @@ +package de.dennisguse.opentracks.settings; + +import android.bluetooth.BluetoothAdapter; +import android.content.Context; +import android.preference.ListPreference; + +import java.util.ArrayList; +import java.util.List; + +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.util.BluetoothDeviceUtils; +import de.dennisguse.opentracks.util.PreferencesUtils; +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); + } + } + } + + /** + * 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]); + 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); + } else { + options[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); + } else { + options[i] = displayValue; + } + } + } + } + + /** + * 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]); + 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); + } else { + options[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); + } else { + options[i] = displayValue; + } + } else { + double mile = feet * UnitConversions.FT_TO_MI; + displayValue = context.getString(R.string.value_float_mile, mile); + options[i] = displayValue; + } + } + } + } + + /** + * 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]); + 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; + } + } 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; + } + } 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); + } else { + options[i] = displayValue; + } + } + } + } + } + + /** + * 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]); + switch (value) { + case PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_NEVER: + options[i] = context.getString(R.string.value_never); + break; + case PreferencesUtils.AUTO_RESUME_TRACK_TIMEOUT_ALWAYS: + options[i] = context.getString(R.string.value_always); + break; + default: + options[i] = context.getString(R.string.value_integer_minute, value); + } + } + } + + /** + * Configures the bluetooth sensor. + */ + static void configBluetoothSensor(ListPreference preference) { + Context context = preference.getContext(); + + String value = PreferencesUtils.getString(context, R.string.bluetooth_sensor_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT); + List devicesNameList = new ArrayList<>(); + List devicesAddressList = new ArrayList<>(); + BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + if (bluetoothAdapter != null) { + BluetoothDeviceUtils.populateDeviceLists(bluetoothAdapter, devicesNameList, devicesAddressList); + } + + // Was the previously configured device unpaired? Then forget it. + if (!devicesAddressList.contains(value)) { + value = PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT; + PreferencesUtils.setString(context, R.string.bluetooth_sensor_key, value); + } + + devicesNameList.add(0, context.getString(R.string.value_none)); + devicesAddressList.add(0, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT); + + String[] values = devicesAddressList.toArray(new String[0]); + preference.setEntryValues(values); + + String[] options = devicesNameList.toArray(new String[0]); + preference.setEntries(options); + } +} diff --git a/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java index ffc2b6fbc..494caa523 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/RecordingSettingsActivity.java @@ -26,7 +26,6 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; -import de.dennisguse.opentracks.util.UnitConversions; /** * An activity for accessing recording settings. @@ -87,19 +86,19 @@ public class RecordingSettingsActivity extends PreferenceActivity implements Cho String[] options = new String[values.length]; switch (key) { case R.string.min_recording_interval_key: - setMinRecordingIntervalOptions(options, values); + PreferenceHelper.setMinRecordingIntervalOptions(this, options, values); break; case R.string.recording_distance_interval_key: - setRecordingDistanceIntervalOptions(options, values, metricUnits); + PreferenceHelper.setRecordingDistanceIntervalOptions(this, options, values, metricUnits); break; case R.string.max_recording_distance_key: - setMaxRecordingDistanceOptions(options, values, metricUnits); + PreferenceHelper.setMaxRecordingDistanceOptions(this, options, values, metricUnits); break; case R.string.recording_gps_accuracy_key: - setRecordingGpsAccuracyOptions(options, values, metricUnits); + PreferenceHelper.setRecordingGpsAccuracyOptions(this, options, values, metricUnits); break; case R.string.auto_resume_track_timeout_key: - setAutoResumeTrackTimeoutOptions(options, values); + PreferenceHelper.setAutoResumeTrackTimeoutOptions(this, options, values); break; default: return; @@ -108,172 +107,6 @@ public class RecordingSettingsActivity extends PreferenceActivity implements Cho preference.setEntries(options); } - /** - * Sets the min recording interval options. - * - * @param options the options - * @param values the values - */ - private void setMinRecordingIntervalOptions(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] = 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); - } - } - } - - /** - * Sets the recording distance interval options. - * - * @param options the options - * @param values the values - * @param metricUnits true for metric units - */ - private void setRecordingDistanceIntervalOptions(String[] options, String[] values, boolean metricUnits) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); - String displayValue; - if (metricUnits) { - displayValue = getString(R.string.value_integer_meter, value); - if (value == PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT) { - options[i] = getString(R.string.value_integer_meter_recommended, value); - } else { - options[i] = displayValue; - } - } else { - int feet = (int) (value * UnitConversions.M_TO_FT); - displayValue = getString(R.string.value_integer_feet, feet); - if (value == PreferencesUtils.RECORDING_DISTANCE_INTERVAL_DEFAULT) { - options[i] = getString(R.string.value_integer_feet_recommended, feet); - } else { - options[i] = displayValue; - } - } - } - } - - /** - * Sets the max recording distance options. - * - * @param options the options - * @param values the values - * @param metricUnits true for metric units - */ - private void setMaxRecordingDistanceOptions(String[] options, String[] values, boolean metricUnits) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); - String displayValue; - if (metricUnits) { - displayValue = getString(R.string.value_integer_meter, value); - if (value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT) { - options[i] = getString(R.string.value_integer_meter_recommended, value); - } else { - options[i] = displayValue; - } - } else { - int feet = (int) (value * UnitConversions.M_TO_FT); - if (feet < 2000) { - displayValue = getString(R.string.value_integer_feet, feet); - if (value == PreferencesUtils.MAX_RECORDING_DISTANCE_DEFAULT) { - options[i] = getString(R.string.value_integer_feet_recommended, feet); - } else { - options[i] = displayValue; - } - } else { - double mile = feet * UnitConversions.FT_TO_MI; - displayValue = getString(R.string.value_float_mile, mile); - options[i] = displayValue; - } - } - } - } - - /** - * Sets the recording gps accuracy options. - * - * @param options the options - * @param values the values - * @param metricUnits true for metric units - */ - private void setRecordingGpsAccuracyOptions(String[] options, String[] values, boolean metricUnits) { - for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); - String displayValue; - if (metricUnits) { - displayValue = getString(R.string.value_integer_meter, value); - switch (value) { - case PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT: - options[i] = getString(R.string.value_integer_meter_recommended, value); - break; - case PreferencesUtils.RECORDING_GPS_ACCURACY_EXCELLENT: - options[i] = getString(R.string.value_integer_meter_excellent_gps, value); - break; - case PreferencesUtils.RECORDING_GPS_ACCURACY_POOR: - options[i] = getString(R.string.value_integer_meter_poor_gps, value); - break; - default: - options[i] = displayValue; - } - } else { - int feet = (int) (value * UnitConversions.M_TO_FT); - if (feet < 2000) { - displayValue = getString(R.string.value_integer_feet, feet); - switch (value) { - case PreferencesUtils.RECORDING_GPS_ACCURACY_DEFAULT: - options[i] = getString(R.string.value_integer_feet_recommended, feet); - break; - case PreferencesUtils.RECORDING_GPS_ACCURACY_EXCELLENT: - options[i] = getString(R.string.value_integer_feet_excellent_gps, feet); - break; - default: - options[i] = displayValue; - } - } else { - double mile = feet * UnitConversions.FT_TO_MI; - displayValue = getString(R.string.value_float_mile, mile); - if (value == PreferencesUtils.RECORDING_GPS_ACCURACY_POOR) { - options[i] = getString(R.string.value_float_mile_poor_gps, mile); - } else { - options[i] = displayValue; - } - } - } - } - } - - /** - * Sets the auto resume track timeout options. - * - * @param options the options - * @param values the values - */ - private void setAutoResumeTrackTimeoutOptions(String[] options, String[] values) { - 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); - } - } - } public void showChooseActivityTypeDialog() { try { diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 1e633f390..0402dfa0b 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -16,7 +16,6 @@ package de.dennisguse.opentracks.settings; -import android.bluetooth.BluetoothAdapter; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -26,11 +25,7 @@ import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.provider.Settings; -import java.util.ArrayList; -import java.util.List; - import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.util.BluetoothDeviceUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -71,7 +66,7 @@ public class SettingsActivity extends PreferenceActivity { addPreferencesFromResource(R.xml.settings); configPreference(R.string.settings_stats_key, StatsSettingsActivity.class); - configPreference(R.string.settings_recording_key, RecordingSettingsActivity.class); + configPreference(R.string.settings_recording_key, NewSettingsActivity.class); findPreference(getString(R.string.settings_sensor_bluetooth_pairing_key)) .setOnPreferenceClickListener(new OnPreferenceClickListener() { @@ -90,7 +85,8 @@ public class SettingsActivity extends PreferenceActivity { recordingTrackId = PreferencesUtils.getLong(this, R.string.recording_track_id_key); updateUI(); - configBluetoothSensor(); + ListPreference preference = (ListPreference) findPreference(getString(R.string.bluetooth_sensor_key)); + PreferenceHelper.configBluetoothSensor(preference); } @Override @@ -117,35 +113,6 @@ public class SettingsActivity extends PreferenceActivity { }); } - /** - * Configures the bluetooth sensor. - */ - private void configBluetoothSensor() { - ListPreference preference = (ListPreference) findPreference(getString(R.string.bluetooth_sensor_key)); - String value = PreferencesUtils.getString(this, R.string.bluetooth_sensor_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT); - List devicesNameList = new ArrayList<>(); - List devicesAddressList = new ArrayList<>(); - BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - if (bluetoothAdapter != null) { - BluetoothDeviceUtils.populateDeviceLists(bluetoothAdapter, devicesNameList, devicesAddressList); - } - - // Was the previously configured device unpaired? Then forget it. - if (!devicesAddressList.contains(value)) { - value = PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT; - PreferencesUtils.setString(this, R.string.bluetooth_sensor_key, value); - } - - devicesNameList.add(0, getString(R.string.value_none)); - devicesAddressList.add(0, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT); - - String[] values = devicesAddressList.toArray(new String[0]); - preference.setEntryValues(values); - - String[] options = devicesNameList.toArray(new String[0]); - preference.setEntries(options); - } - private void updateUI() { //TODO Remove the following if recordingTrackId is replaced by direct communication rather than via preferences. boolean isRecording = recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;