Setting: add option to adjust idle speed.

New default: 0.5km/h (replaces 0.5mp/h).

Fixes #1004.
This commit is contained in:
Dennis Guse
2021-10-31 22:53:02 +01:00
parent 41e5e71804
commit a9228017fc
6 changed files with 73 additions and 5 deletions
@@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import java.time.Duration;
import java.util.Objects;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.util.UnitConversions;
public class Speed {
@@ -25,6 +26,10 @@ public class Speed {
return of(Float.parseFloat(speed_mps));
}
public static Speed ofKMH(double speed_kmh) {
return of(Distance.ofKilometer(speed_kmh), Duration.ofHours(1));
}
public static Speed zero() {
return of(0.0);
}
@@ -42,10 +47,6 @@ public class Speed {
return Speed.of(Math.abs(speed1.speed_mps - speed2.speed_mps));
}
// Anything faster than that (in meters per second) will be considered moving.
private static final double MAX_NO_MOVEMENT_SPEED = 0.224;
private final double speed_mps;
private Speed(double speed_mps) {
@@ -65,7 +66,7 @@ public class Speed {
}
public boolean isMoving() {
return !isInvalid() && speed_mps >= MAX_NO_MOVEMENT_SPEED;
return !isInvalid() && greaterThan(PreferencesUtils.getIdleSpeed());
}
public boolean lessThan(Speed speed) {
@@ -74,5 +74,8 @@ public class GpsSettingsFragment extends PreferenceFragmentCompat {
ListPreference recordingGpsAccuracy = findPreference(getString(R.string.recording_gps_accuracy_key));
recordingGpsAccuracy.setEntries(PreferencesUtils.getThresholdHorizontalAccuracyEntries());
ListPreference idleSpeed = findPreference(getString(R.string.idle_speed_key));
idleSpeed.setEntries(PreferencesUtils.getIdleSpeedEntries());
}
}
@@ -42,6 +42,7 @@ import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.DataField;
import de.dennisguse.opentracks.content.data.Distance;
import de.dennisguse.opentracks.content.data.Layout;
import de.dennisguse.opentracks.content.data.Speed;
import de.dennisguse.opentracks.io.file.TrackFileFormat;
import de.dennisguse.opentracks.util.CsvConstants;
import de.dennisguse.opentracks.util.TrackIconUtils;
@@ -448,6 +449,43 @@ public class PreferencesUtils {
}
public static Speed getIdleSpeed() {
final float DEFAULT = Float.parseFloat(resources.getString(R.string.idle_speed_default));
float value = getFloat(R.string.idle_speed_key, DEFAULT);
return Speed.ofKMH(value);
}
static String[] getIdleSpeedEntries() {
String[] entryValues = resources.getStringArray(R.array.idle_speed_values);
String[] entries = new String[entryValues.length];
final float idleSpeedDefault = Float.parseFloat(resources.getString(R.string.idle_speed_default));
boolean metricUnits = isMetricUnits();
for (int i = 0; i < entryValues.length; i++) {
float value = Float.parseFloat(entryValues[i]);
if (metricUnits) {
if (value == idleSpeedDefault) {
entries[i] = resources.getString(R.string.value_float_kilometer_hour_recommended, value);
} else {
entries[i] = resources.getString(R.string.value_float_kilometer_hour, value);
}
} else {
double valueMPH = Speed.ofKMH(value).toMPH();
if (value == idleSpeedDefault) {
entries[i] = resources.getString(R.string.value_float_mile_hour_recommended, valueMPH);
} else {
entries[i] = resources.getString(R.string.value_float_mile_hour, valueMPH);
}
}
}
return entries;
}
public static boolean shouldInstantExportAfterWorkout(Context context) {
final boolean INSTANT_POST_WORKOUT_EXPORT_DEFAULT = resources.getBoolean(R.bool.post_workout_export_enabled_default);
return getBoolean(R.string.post_workout_export_enabled_key, INSTANT_POST_WORKOUT_EXPORT_DEFAULT) && isDefaultExportDirectoryUri(context);
+15
View File
@@ -194,6 +194,21 @@
<item>@string/recording_gps_accuracy_poor</item>
</string-array>
<string name="idle_speed_key" translatable="false">idleSpeed</string>
<string name="idle_speed_default" translatable="false">0.5</string>
<string-array name="idle_speed_values">
<item>0.3</item>
<item>@string/idle_speed_default</item>
<item>1</item>
<item>1.5</item>
<item>2</item>
<item>2.5</item>
<item>3</item>
<item>3.5</item>
<item>4</item>
<item>5</item>
</string-array>
<string name="stats_rate_key" translatable="false">statsRate</string>
<string name="stats_rate_default" translatable="false">@string/stats_rate_speed_or_pace_default</string>
<string-array name="stats_rate_imperial_options">
+5
View File
@@ -357,6 +357,7 @@ limitations under the License.
<string name="settings_recording_track_name_date_local_option">Date (local)</string>
<string name="settings_recording_track_name_number_option">Number</string>
<string name="settings_recording_track_name_title">Default track name</string>
<string name="settings_recording_idle_speed_title">Idle speed threshold</string>
<string name="settings_night_mode_title">UI Theme</string>
<string name="settings_night_mode_option_system">System</string>
<string name="settings_night_mode_option_day">Day</string>
@@ -473,12 +474,16 @@ limitations under the License.
<string name="value_integer_feet_recommended">%1$d ft (recommended)</string>
<string name="value_integer_kilometer">%1$d km</string>
<string name="value_integer_kilometer_hour">%1$d km/h</string>
<string name="value_float_kilometer_hour">%1$.1f km/h</string>
<string name="value_float_kilometer_hour_recommended">%1$.1f km/h (recommended)</string>
<string name="value_integer_meter">%1$d m</string>
<string name="value_integer_meter_excellent_gps">%1$d m (excellent GPS)</string>
<string name="value_integer_meter_poor_gps">%1$d m (poor GPS)</string>
<string name="value_integer_meter_recommended">%1$d m (recommended)</string>
<string name="value_integer_mile">%1$d mi</string>
<string name="value_integer_mile_hour">%1$d mi/h</string>
<string name="value_float_mile_hour">%1$.1f mi/h</string>
<string name="value_float_mile_hour_recommended">%1$.1f mi/h (recommended)</string>
<string name="value_integer_minute">%1$d min</string>
<string name="value_integer_second">%1$d s</string>
<string name="value_none">None</string>
+6
View File
@@ -27,4 +27,10 @@
android:key="@string/recording_gps_accuracy_key"
android:title="@string/settings_recording_min_required_accuracy_title" />
<ListPreference
android:defaultValue="@string/idle_speed_default"
android:entryValues="@array/idle_speed_values"
android:key="@string/idle_speed_key"
android:title="@string/settings_recording_idle_speed_title" />
</PreferenceScreen>