forked from upstream-mirrors/OpenTracks
TrackPoint: moved methods into class.
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ import android.os.Parcel;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -42,6 +43,8 @@ import java.util.Objects;
|
|||||||
*/
|
*/
|
||||||
public class TrackPoint {
|
public class TrackPoint {
|
||||||
|
|
||||||
|
private static final Duration MAX_LOCATION_AGE = Duration.ofMinutes(1);
|
||||||
|
|
||||||
private TrackPoint.Id id;
|
private TrackPoint.Id id;
|
||||||
|
|
||||||
private Instant time;
|
private Instant time;
|
||||||
@@ -246,6 +249,12 @@ public class TrackPoint {
|
|||||||
this.time = time;
|
this.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isRecent() {
|
||||||
|
return Instant.now()
|
||||||
|
.isBefore(time.plus(MAX_LOCATION_AGE));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean hasAltitude() {
|
public boolean hasAltitude() {
|
||||||
return altitude_m != null;
|
return altitude_m != null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public class SensorData<T> {
|
|||||||
private final String sensorAddress;
|
private final String sensorAddress;
|
||||||
private final String sensorName;
|
private final String sensorName;
|
||||||
|
|
||||||
private final Instant timestamp_ms;
|
private final Instant time;
|
||||||
|
|
||||||
SensorData(String sensorAddress) {
|
SensorData(String sensorAddress) {
|
||||||
this(sensorAddress, null);
|
this(sensorAddress, null);
|
||||||
@@ -26,10 +26,10 @@ public class SensorData<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
SensorData(String sensorAddress, String sensorName, Instant timestamp_ms) {
|
SensorData(String sensorAddress, String sensorName, Instant time) {
|
||||||
this.sensorAddress = sensorAddress;
|
this.sensorAddress = sensorAddress;
|
||||||
this.sensorName = sensorName;
|
this.sensorName = sensorName;
|
||||||
this.timestamp_ms = timestamp_ms;
|
this.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@@ -58,6 +58,7 @@ public class SensorData<T> {
|
|||||||
* Is the data recent considering the current time.
|
* Is the data recent considering the current time.
|
||||||
*/
|
*/
|
||||||
public boolean isRecent() {
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import de.dennisguse.opentracks.databinding.StatisticsRecordingBinding;
|
|||||||
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
|
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingServiceInterface;
|
import de.dennisguse.opentracks.services.TrackRecordingServiceInterface;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.util.LocationUtils;
|
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||||
import de.dennisguse.opentracks.util.StringUtils;
|
import de.dennisguse.opentracks.util.StringUtils;
|
||||||
import de.dennisguse.opentracks.util.TrackIconUtils;
|
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.
|
TrackPoint trackPoint = lastTrackPoint; //NOTE: There seems to be a race condition; just fix the symptom for now.
|
||||||
if (trackPoint != null && trackPoint.hasLocation()) {
|
if (trackPoint != null && trackPoint.hasLocation()) {
|
||||||
boolean hasFix = !LocationUtils.isTrackPointOld(trackPoint);
|
if (!trackPoint.isRecent()) {
|
||||||
|
|
||||||
if (!hasFix) {
|
|
||||||
lastTrackPoint = null;
|
lastTrackPoint = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,6 @@ package de.dennisguse.opentracks.util;
|
|||||||
|
|
||||||
import android.location.Location;
|
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.
|
* 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 String TAG = LocationUtils.class.getSimpleName();
|
||||||
|
|
||||||
private static final Duration MAX_LOCATION_AGE = Duration.ofMinutes(1);
|
|
||||||
|
|
||||||
private LocationUtils() {
|
private LocationUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,11 +40,4 @@ public class LocationUtils {
|
|||||||
&& Math.abs(location.getLatitude()) <= 90
|
&& Math.abs(location.getLatitude()) <= 90
|
||||||
&& Math.abs(location.getLongitude()) <= 180;
|
&& 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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user