Cleanup: extract preference functionality from StringUtils to PreferenceHelper.

Part of #963.
This commit is contained in:
Dennis Guse
2021-09-29 07:53:26 +02:00
parent eac3d4b3db
commit 8c5c9d7947
3 changed files with 66 additions and 64 deletions
@@ -1,6 +1,8 @@
package de.dennisguse.opentracks.settings;
import android.content.Context;
import android.content.res.Resources;
import java.time.Duration;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.util.PreferencesUtils;
@@ -8,24 +10,24 @@ import de.dennisguse.opentracks.util.UnitConversions;
final class PreferenceHelper {
static String[] getMinRecordingIntervalEntries(Context context) {
String[] entryValues = context.getResources().getStringArray(R.array.min_recording_interval_values);
static String[] getMinRecordingIntervalEntries(Resources resources) {
String[] entryValues = resources.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.getMinRecordingIntervalDefault().getSeconds()) {
entries[i] = context.getString(R.string.value_smallest_recommended);
entries[i] = resources.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);
entries[i] = value < 60 ? resources.getString(R.string.value_integer_second, value) : resources.getString(R.string.value_integer_minute, value / 60);
}
}
return entries;
}
static String[] getRecordingDistanceIntervalEntries(Context context, boolean metricUnits) {
String[] entryValues = context.getResources().getStringArray(R.array.recording_distance_interval_values);
static String[] getRecordingDistanceIntervalEntries(Resources resources, boolean metricUnits) {
String[] entryValues = resources.getStringArray(R.array.recording_distance_interval_values);
String[] entries = new String[entryValues.length];
final int recordingDistanceIntervalDefault = (int) PreferencesUtils.getRecordingDistanceIntervalDefault().toM();
@@ -34,17 +36,17 @@ final class PreferenceHelper {
int value = Integer.parseInt(entryValues[i]);
String displayValue;
if (metricUnits) {
displayValue = context.getString(R.string.value_integer_meter, value);
displayValue = resources.getString(R.string.value_integer_meter, value);
if (value == recordingDistanceIntervalDefault) {
entries[i] = context.getString(R.string.value_integer_meter_recommended, value);
entries[i] = resources.getString(R.string.value_integer_meter_recommended, value);
} else {
entries[i] = displayValue;
}
} else {
int feet = (int) (value * UnitConversions.M_TO_FT);
displayValue = context.getString(R.string.value_integer_feet, feet);
displayValue = resources.getString(R.string.value_integer_feet, feet);
if (value == recordingDistanceIntervalDefault) {
entries[i] = context.getString(R.string.value_integer_feet_recommended, feet);
entries[i] = resources.getString(R.string.value_integer_feet_recommended, feet);
} else {
entries[i] = displayValue;
}
@@ -54,27 +56,27 @@ final class PreferenceHelper {
return entries;
}
static String[] getMaxRecordingDistanceEntries(Context context, boolean metricUnits) {
String[] entryValues = context.getResources().getStringArray(R.array.max_recording_distance_values);
static String[] getMaxRecordingDistanceEntries(Resources resources, boolean metricUnits) {
String[] entryValues = resources.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));
final int maxRecordingDistanceDefault = Integer.parseInt(resources.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);
displayValue = resources.getString(R.string.value_integer_meter, value);
if (value == maxRecordingDistanceDefault) {
entries[i] = context.getString(R.string.value_integer_meter_recommended, value);
entries[i] = resources.getString(R.string.value_integer_meter_recommended, value);
} else {
entries[i] = displayValue;
}
} else {
int feet = (int) (value * UnitConversions.M_TO_FT);
displayValue = context.getString(R.string.value_integer_feet, feet);
displayValue = resources.getString(R.string.value_integer_feet, feet);
if (value == maxRecordingDistanceDefault) {
entries[i] = context.getString(R.string.value_integer_feet_recommended, feet);
entries[i] = resources.getString(R.string.value_integer_feet_recommended, feet);
} else {
entries[i] = displayValue;
}
@@ -84,36 +86,36 @@ final class PreferenceHelper {
return entries;
}
static String[] getRecordingGpsAccuracyEntries(Context context, boolean metricUnits) {
String[] entryValues = context.getResources().getStringArray(R.array.recording_gps_accuracy_values);
static String[] getRecordingGpsAccuracyEntries(Resources resources, boolean metricUnits) {
String[] entryValues = resources.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));
final int recordingGPSAccuracyDefault = Integer.parseInt(resources.getString(R.string.recording_gps_accuracy_default));
final int recordingGPSAccuracyExcellent = Integer.parseInt(resources.getString(R.string.recording_gps_accuracy_excellent));
final int recordingGPSAccuracyPoor = Integer.parseInt(resources.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);
displayValue = resources.getString(R.string.value_integer_meter, value);
if (value == recordingGPSAccuracyDefault) {
entries[i] = context.getString(R.string.value_integer_meter_recommended, value);
entries[i] = resources.getString(R.string.value_integer_meter_recommended, value);
} else if (value == recordingGPSAccuracyExcellent) {
entries[i] = context.getString(R.string.value_integer_meter_excellent_gps, value);
entries[i] = resources.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);
entries[i] = resources.getString(R.string.value_integer_meter_poor_gps, value);
} else {
entries[i] = displayValue;
}
} else {
int feet = (int) (value * UnitConversions.M_TO_FT);
displayValue = context.getString(R.string.value_integer_feet, feet);
displayValue = resources.getString(R.string.value_integer_feet, feet);
if (value == recordingGPSAccuracyDefault) {
entries[i] = context.getString(R.string.value_integer_feet_recommended, feet);
entries[i] = resources.getString(R.string.value_integer_feet_recommended, feet);
} else if (value == recordingGPSAccuracyExcellent) {
entries[i] = context.getString(R.string.value_integer_feet_excellent_gps, feet);
entries[i] = resources.getString(R.string.value_integer_feet_excellent_gps, feet);
} else {
entries[i] = displayValue;
}
@@ -122,4 +124,32 @@ final class PreferenceHelper {
return entries;
}
static String[] getAnnouncementFrequency(Resources resources) {
String[] values = resources.getStringArray(R.array.voice_announcement_frequency_values);
String[] options = new String[values.length];
for (int i = 0; i < values.length; i++) {
if (resources.getString(R.string.announcement_off).equals(values[i])) {
options[i] = resources.getString(R.string.value_off);
} else {
int value = Integer.parseInt(values[i]);
options[i] = resources.getString(R.string.value_integer_minute, Duration.ofSeconds(value).toMinutes());
}
}
return options;
}
static String[] getAnnouncementDistance(Resources resources, boolean metricUnits) {
String[] values = resources.getStringArray(R.array.voice_announcement_distance_values);
String[] options = new String[values.length];
for (int i = 0; i < values.length; i++) {
if (resources.getString(R.string.announcement_off).equals(values[i])) {
options[i] = resources.getString(R.string.value_off);
} else {
int value = Integer.parseInt(values[i]);
options[i] = resources.getString(metricUnits ? R.string.value_integer_kilometer : R.string.value_integer_mile, value);
}
}
return options;
}
}