From fcf9e6390184116f1973788ce5783ca06c97c3bd Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 31 Jul 2023 21:55:55 +0200 Subject: [PATCH] Idle: TrackRecordingManager creates IDLE TrackPoints (configurable timeout). Fixes of #1187. --- .../TrackRecordingServiceTestRecording.java | 2 +- .../de/dennisguse/opentracks/Startup.java | 3 +- .../opentracks/data/models/Speed.java | 5 -- .../settings/GpsSettingsFragment.java | 4 +- .../opentracks/settings/PreferencesUtils.java | 52 +++++-------------- src/main/res/values/settings.xml | 21 +++----- src/main/res/values/strings.xml | 1 + src/main/res/xml/settings_gps.xml | 6 +-- 8 files changed, 30 insertions(+), 64 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java index 58be6700d..0b38b956a 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java @@ -90,7 +90,7 @@ public void setUp() throws TimeoutException { tearDown(); PreferencesUtils.setString(R.string.recording_distance_interval_key, R.string.recording_distance_interval_default); - PreferencesUtils.setString(R.string.idle_speed_key, R.string.idle_speed_default); + PreferencesUtils.setString(R.string.idle_duration_key, R.string.idle_duration_default); service = startService(); } diff --git a/src/main/java/de/dennisguse/opentracks/Startup.java b/src/main/java/de/dennisguse/opentracks/Startup.java index 052b752f0..0a92e3cc4 100644 --- a/src/main/java/de/dennisguse/opentracks/Startup.java +++ b/src/main/java/de/dennisguse/opentracks/Startup.java @@ -4,7 +4,6 @@ import android.app.Application; import android.content.Context; import android.os.Build; -import android.os.StrictMode; import android.util.Log; import java.lang.reflect.Method; @@ -39,7 +38,7 @@ public void onCreate() { // In debug builds: show thread and VM warnings. if (BuildConfig.DEBUG) { Log.d(TAG, "Enabling strict mode"); - StrictMode.enableDefaults(); +// StrictMode.enableDefaults(); } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java index 7714b678a..60bd1e84b 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java @@ -2,7 +2,6 @@ import java.time.Duration; -import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; public record Speed(double speed_mps) { @@ -56,10 +55,6 @@ public boolean isInvalid() { return Double.isNaN(speed_mps) || Double.isInfinite(speed_mps); } - public boolean isMoving() { - return !isInvalid() && greaterThan(PreferencesUtils.getIdleSpeed()); - } - public boolean lessThan(Speed speed) { return !greaterThan(speed); } diff --git a/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java index eff92ab98..44b087d07 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java @@ -79,7 +79,7 @@ public void onResume() { 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()); + ListPreference idleDuration = findPreference(getString(R.string.idle_duration_key)); + idleDuration.setEntries(PreferencesUtils.getIdleDurationEntries()); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index e0303a261..5a1af8bc9 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -45,7 +45,6 @@ import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.data.models.HeartRateZones; -import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.io.file.TrackFilenameGenerator; @@ -530,11 +529,12 @@ public static Duration getMinRecordingIntervalDefault() { static String[] getMinRecordingIntervalEntries() { String[] entryValues = resources.getStringArray(R.array.min_recording_interval_values); + long recommended = PreferencesUtils.getMinRecordingIntervalDefault().getSeconds(); 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()) { + if (value == recommended) { entries[i] = resources.getString(R.string.value_smallest_recommended); } else { entries[i] = value < 60 ? resources.getString(R.string.value_integer_second, value) : resources.getString(R.string.value_integer_minute, value / 60); @@ -598,49 +598,25 @@ static String[] getThresholdHorizontalAccuracyEntries() { return entries; } - - 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); + public static Duration getIdleDurationTimeout() { + final int DEFAULT = Integer.parseInt(resources.getString(R.string.idle_duration_default)); + int value = getInt(R.string.idle_duration_key, DEFAULT); + return Duration.ofSeconds(value); } - static String[] getIdleSpeedEntries() { - String[] entryValues = resources.getStringArray(R.array.idle_speed_values); + static String[] getIdleDurationEntries() { + String[] entryValues = resources.getStringArray(R.array.idle_duration_values); String[] entries = new String[entryValues.length]; - final float idleSpeedDefault = Float.parseFloat(resources.getString(R.string.idle_speed_default)); - - UnitSystem unitSystem = getUnitSystem(); + final int idleDurationDefault = Integer.parseInt(resources.getString(R.string.idle_duration_default)); for (int i = 0; i < entryValues.length; i++) { - float value = Float.parseFloat(entryValues[i]); + int value = Integer.parseInt(entryValues[i]); - switch (unitSystem) { - case METRIC -> { - 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); - } - } - case IMPERIAL_FEET, IMPERIAL_METER -> { - 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); - } - } - case NAUTICAL_IMPERIAL -> { - double valueKnots = Speed.ofKMH(value).toKnots(); - if (value == idleSpeedDefault) { - entries[i] = resources.getString(R.string.value_float_knots_recommended, valueKnots); - } else { - entries[i] = resources.getString(R.string.value_float_knots, valueKnots); - } - } - default -> throw new RuntimeException("Not implemented"); + if (value == idleDurationDefault) { + entries[i] = resources.getString(R.string.value_int_seconds, value); + } else { + entries[i] = value < 60 ? resources.getString(R.string.value_integer_second, value) : resources.getString(R.string.value_integer_minute, value / 60); } } diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 95ea4ecc1..e07f4ae5a 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -123,19 +123,14 @@ @string/recording_gps_accuracy_poor - idleSpeed - 0.5 - - 0.3 - @string/idle_speed_default - 1 - 1.5 - 2 - 2.5 - 3 - 3.5 - 4 - 5 + idleSpeedDuration + 30 + + 15 + @string/idle_duration_default + 45 + 60 + 120 statsRate diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index b35c5f4f1..714566bc2 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -555,6 +555,7 @@ limitations under the License. None Off Smallest (recommended) + %1$d s (recommended) 1 hour [Replaced by VoiceHoursPlural] diff --git a/src/main/res/xml/settings_gps.xml b/src/main/res/xml/settings_gps.xml index 979d0ac24..0d4a87b3d 100644 --- a/src/main/res/xml/settings_gps.xml +++ b/src/main/res/xml/settings_gps.xml @@ -29,9 +29,9 @@ android:title="@string/settings_recording_min_required_accuracy_title" />