Skip to content

Commit

Permalink
Idle: TrackRecordingManager creates IDLE TrackPoints (configurable ti…
Browse files Browse the repository at this point in the history
…meout).

Fixes of #1187.
  • Loading branch information
dennisguse committed Jul 31, 2023
1 parent 723a21e commit fcf9e63
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/de/dennisguse/opentracks/Startup.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
}

Expand Down
5 changes: 0 additions & 5 deletions src/main/java/de/dennisguse/opentracks/data/models/Speed.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
}

Expand Down
21 changes: 8 additions & 13 deletions src/main/res/values/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,14 @@
<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 name="idle_duration_key" translatable="false">idleSpeedDuration</string>
<string name="idle_duration_default" translatable="false">30</string>
<string-array name="idle_duration_values">
<item>15</item>
<item>@string/idle_duration_default</item>
<item>45</item>
<item>60</item>
<item>120</item>
</string-array>

<string name="stats_rate_key" translatable="false">statsRate</string>
Expand Down
1 change: 1 addition & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,7 @@ limitations under the License.
<string name="value_none">None</string>
<string name="value_off">Off</string>
<string name="value_smallest_recommended">Smallest (recommended)</string>
<string name="value_int_seconds">%1$d s (recommended)</string>
<!-- Voice -->
<plurals name="voiceHours">
<item quantity="one">1 hour [Replaced by VoiceHoursPlural]</item>
Expand Down
6 changes: 3 additions & 3 deletions src/main/res/xml/settings_gps.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
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:defaultValue="@string/idle_duration_default"
android:entryValues="@array/idle_duration_values"
android:key="@string/idle_duration_key"
android:title="@string/settings_recording_idle_speed_title"
app:useSimpleSummaryProvider="true" />

Expand Down

0 comments on commit fcf9e63

Please sign in to comment.