diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java new file mode 100644 index 000000000..4f42c23df --- /dev/null +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java @@ -0,0 +1,28 @@ +package de.dennisguse.opentracks.content.data; + +import org.junit.Test; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class TrackPointTest { + + @Test + public void isRecent_true() { + TrackPoint tp = new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL); + tp.setTime(Instant.now()); + + assertTrue(tp.isRecent()); + } + + @Test + public void isRecent_false() { + TrackPoint tp = new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL); + tp.setTime(Instant.now().minus(2, ChronoUnit.MINUTES)); + + assertFalse(tp.isRecent()); + } +} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java index 66fbdfd2c..31b95898a 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java @@ -21,6 +21,7 @@ import android.os.Parcel; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import java.time.Duration; import java.time.Instant; import java.util.Objects; @@ -42,6 +43,8 @@ import java.util.Objects; */ public class TrackPoint { + private static final Duration MAX_LOCATION_AGE = Duration.ofMinutes(1); + private TrackPoint.Id id; private Instant time; @@ -246,6 +249,12 @@ public class TrackPoint { this.time = time; } + public boolean isRecent() { + return Instant.now() + .isBefore(time.plus(MAX_LOCATION_AGE)); + } + + public boolean hasAltitude() { return altitude_m != null; } diff --git a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java index 28d247935..6f942c05e 100644 --- a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java +++ b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorData.java @@ -15,7 +15,7 @@ public class SensorData { private final String sensorAddress; private final String sensorName; - private final Instant timestamp_ms; + private final Instant time; SensorData(String sensorAddress) { this(sensorAddress, null); @@ -26,10 +26,10 @@ public class SensorData { } @VisibleForTesting - SensorData(String sensorAddress, String sensorName, Instant timestamp_ms) { + SensorData(String sensorAddress, String sensorName, Instant time) { this.sensorAddress = sensorAddress; this.sensorName = sensorName; - this.timestamp_ms = timestamp_ms; + this.time = time; } @NonNull @@ -58,6 +58,7 @@ public class SensorData { * Is the data recent considering the current time. */ public boolean isRecent() { - return Instant.now().isBefore(timestamp_ms.plus(BluetoothRemoteSensorManager.MAX_SENSOR_DATE_SET_AGE_MS)); + return Instant.now() + .isBefore(time.plus(BluetoothRemoteSensorManager.MAX_SENSOR_DATE_SET_AGE_MS)); } } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index 3b84acd25..caa881e75 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -32,7 +32,6 @@ import de.dennisguse.opentracks.databinding.StatisticsRecordingBinding; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.services.TrackRecordingServiceInterface; import de.dennisguse.opentracks.stats.TrackStatistics; -import de.dennisguse.opentracks.util.LocationUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -193,9 +192,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi TrackPoint trackPoint = lastTrackPoint; //NOTE: There seems to be a race condition; just fix the symptom for now. if (trackPoint != null && trackPoint.hasLocation()) { - boolean hasFix = !LocationUtils.isTrackPointOld(trackPoint); - - if (!hasFix) { + if (!trackPoint.isRecent()) { lastTrackPoint = null; } } diff --git a/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java b/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java index 2c8c68c75..088710b73 100644 --- a/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/LocationUtils.java @@ -17,11 +17,6 @@ package de.dennisguse.opentracks.util; import android.location.Location; -import java.time.Duration; -import java.time.Instant; - -import de.dennisguse.opentracks.content.data.TrackPoint; - /** * Utility class for decimating tracks at a given level of precision. * @@ -31,8 +26,6 @@ public class LocationUtils { private static final String TAG = LocationUtils.class.getSimpleName(); - private static final Duration MAX_LOCATION_AGE = Duration.ofMinutes(1); - private LocationUtils() { } @@ -47,11 +40,4 @@ public class LocationUtils { && Math.abs(location.getLatitude()) <= 90 && Math.abs(location.getLongitude()) <= 180; } - - public static boolean isTrackPointOld(TrackPoint trackPoint) { - Instant now = Instant.now(); - return !(Duration.between(trackPoint.getTime(), now) - .minus(MAX_LOCATION_AGE) - .isNegative()); - } }