diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java index 128a80979..994113437 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -112,12 +112,11 @@ public class TestDataUtil { } public static TrackPoint createTrackPoint(int i) { - TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); + TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochSecond(i + 1)); trackPoint.setLatitude(INITIAL_LATITUDE + (double) i / 10000.0); trackPoint.setLongitude(INITIAL_LONGITUDE - (double) i / 10000.0); trackPoint.setAccuracy((float) i / 100.0f); trackPoint.setAltitude(i * ALTITUDE_INTERVAL); - trackPoint.setTime(Instant.ofEpochSecond(i + 1)); trackPoint.setSpeed(Speed.of(5f + (i / 10f))); trackPoint.setHeartRate_bpm(100f + i); diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java index e64566ccf..92bb323d9 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java @@ -12,7 +12,7 @@ public class TestSensorDataUtil { public void add(Instant time, Float hr, Float cadence, Float power, TrackPoint.Type type) { sensorDataList.add(new TestSensorDataUtil.SensorData(time, hr, cadence, power, type)); - TrackPoint tp = new TrackPoint(type); + TrackPoint tp = new TrackPoint(type, time); int i = trackPointList.size() + 1; tp.setLatitude(TestDataUtil.INITIAL_LATITUDE + (double) i / 10000.0); tp.setLongitude(TestDataUtil.INITIAL_LONGITUDE - (double) i / 10000.0); @@ -21,7 +21,6 @@ public class TestSensorDataUtil { tp.setPower(power); tp.setAccuracy(1f); tp.setAltitude(1f); - tp.setTime(time); tp.setSpeed(Speed.of(5f + (i / 10f))); tp.setAltitudeGain(3f); tp.setAltitudeLoss(3f); diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java index 0fa7a147a..7f5987829 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TrackPointTest.java @@ -13,27 +13,25 @@ public class TrackPointTest { @Test public void isRecent_true() { - TrackPoint tp = new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL); - tp.setTime(Instant.now()); + TrackPoint tp = new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, 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)); + TrackPoint tp = new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.now().minus(2, ChronoUnit.MINUTES)); assertFalse(tp.isRecent()); } @Test public void distanceToPrevious() { - TrackPoint tp1 = new TrackPoint(TrackPoint.Type.TRACKPOINT) + TrackPoint tp1 = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(0)) .setLatitude(0) .setLongitude(0.0001); - TrackPoint tp2 = new TrackPoint(TrackPoint.Type.TRACKPOINT) + TrackPoint tp2 = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(1)) .setLatitude(0) .setLongitude(0.0002); diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java index 704495d3b..011f9fcd6 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java @@ -135,7 +135,7 @@ public class CustomContentProviderUtilsTest { List trackPoints = new ArrayList<>(numPoints); for (int i = 0; i < numPoints; ++i) { - TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT) + TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.ofEpochMilli(i)) .setLatitude(37.0 + (double) i / 10000.0) .setLongitude(57.0 - (double) i / 10000.0) .setAccuracy((float) i / 100.0f) diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java index 1ceecd98e..eacce00a6 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java @@ -128,50 +128,50 @@ public class TrackRecordingServiceTestLocation { TrackPointAssert a = new TrackPointAssert() .ignoreTime(); a.assertEquals(List.of( - new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, null), + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(1) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.0001) .setLongitude(35) .setAccuracy(2) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.0001) .setLongitude(35) .setAccuracy(3) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.0002) .setLongitude(35) .setAccuracy(4) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.0003) .setLongitude(35) .setAccuracy(5) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.0004) .setLongitude(35) .setAccuracy(6) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL) + new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, null) .setAltitudeGain(0f) .setAltitudeLoss(0f) ), trackPoints); @@ -201,22 +201,22 @@ public class TrackRecordingServiceTestLocation { TrackPointAssert a = new TrackPointAssert() .ignoreTime(); a.assertEquals(List.of( - new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, null), + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(1) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.0005) .setLongitude(35) .setAccuracy(6) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL) + new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, null) .setAltitudeGain(0f) .setAltitudeLoss(0f) ), trackPoints); @@ -246,29 +246,29 @@ public class TrackRecordingServiceTestLocation { TrackPointAssert a = new TrackPointAssert() .ignoreTime(); a.assertEquals(List.of( - new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, null), + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(1) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) //TODO Why is this added? Systems is idle and not moving at all. + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) //TODO Why is this added? Systems is idle and not moving at all. .setLatitude(45) .setLongitude(35) .setAccuracy(2) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(6) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL) + new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, null) .setAltitudeGain(0f) .setAltitudeLoss(0f) ), trackPoints); @@ -299,36 +299,36 @@ public class TrackRecordingServiceTestLocation { TrackPointAssert a = new TrackPointAssert() .ignoreTime(); a.assertEquals(List.of( - new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, null), + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(1) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) //TODO Check why this trackPoint is inserted. + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) //TODO Check why this trackPoint is inserted. .setLatitude(45) .setLongitude(35) .setAccuracy(2) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) //TODO Check why this trackPoint is inserted. + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) //TODO Check why this trackPoint is inserted. .setLatitude(45) .setLongitude(35) .setAccuracy(5) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(6) .setSpeed(Speed.of(15)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL) + new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, null) .setAltitudeGain(0f) .setAltitudeLoss(0f) ), trackPoints); @@ -373,8 +373,8 @@ public class TrackRecordingServiceTestLocation { TrackPointAssert a = new TrackPointAssert() .ignoreTime(); a.assertEquals(List.of( - new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, null), + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(1) @@ -382,7 +382,7 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(2) @@ -390,7 +390,7 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(3) @@ -398,7 +398,7 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(4) @@ -406,7 +406,7 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(5) @@ -414,7 +414,7 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(6) @@ -422,7 +422,7 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f), - new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL) + new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, null) .setAltitudeGain(0f) .setAltitudeLoss(0f) .setHeartRate_bpm(5f) @@ -453,8 +453,8 @@ public class TrackRecordingServiceTestLocation { TrackPointAssert a = new TrackPointAssert() .ignoreTime(); a.assertEquals(List.of( - new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, null), + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45) .setLongitude(35) .setAccuracy(1) @@ -462,14 +462,14 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC) + new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, null) .setLatitude(45.1) .setLongitude(35) .setAccuracy(2) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.1) .setLongitude(35) .setAccuracy(3) @@ -477,21 +477,21 @@ public class TrackRecordingServiceTestLocation { .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC) + new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, null) .setLatitude(45.2) .setLongitude(35) .setAccuracy(4) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.TRACKPOINT) + new TrackPoint(TrackPoint.Type.TRACKPOINT, null) .setLatitude(45.2) .setLongitude(35) .setAccuracy(5) .setSpeed(Speed.of(0)) .setAltitudeGain(0f) .setAltitudeLoss(0f), - new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL) + new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, null) .setAltitudeGain(0f) .setAltitudeLoss(0f) ), trackPoints); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java index 4bc4b9b8d..311ed5a4e 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java @@ -234,7 +234,8 @@ public class TrackRecordingServiceTestLooper { // Insert a few points, markers and statistics. for (int i = 0; i < 30; i++) { - TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT) + //TODO Should send locations to LocationHandler instead of TrackPoints to HandlerServer? + TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, service.getHandlerServer().createNow()) .setLongitude(35.0f + i / 10.0f) .setLatitude(45.0f - i / 5.0f) .setAccuracy(5) @@ -242,7 +243,7 @@ public class TrackRecordingServiceTestLooper { .setBearing(3.0f); int prefAccuracy = PreferencesUtils.getRecordingGPSAccuracy(sharedPreferences, context); - service.newTrackPoint(trackPoint, prefAccuracy); + service.getHandlerServer().onNewTrackPoint(trackPoint, prefAccuracy); if (i % 7 == 0) { service.insertMarker(null, null, null, null); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/HandlerServerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/HandlerServerTest.java index 47de3aa45..e346a57c2 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/HandlerServerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/HandlerServerTest.java @@ -47,7 +47,7 @@ public class HandlerServerTest { @Test public void sendTrackPoint() throws InterruptedException { // given - TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); + TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, null); int accuracy = 50; // when diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java index 81d4e4f42..c07a671a9 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/LocationHandlerTest.java @@ -13,8 +13,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import java.time.Instant; + import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -45,6 +48,9 @@ public class LocationHandlerTest { // Let's use default values. sharedPreferences.edit().clear().commit(); + Mockito.when(handlerServer.createNow()) + .thenReturn(Instant.now()); + //TODO REMOVE // locationHandler.onSharedPreferenceChanged(context, sharedPreferences, context.getString(R.string.recording_gps_accuracy_key)); // locationHandler.onSharedPreferenceChanged(context, sharedPreferences, context.getString(R.string.min_recording_interval_key)); 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 0a494526e..24c3c050a 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java @@ -49,7 +49,7 @@ public class TrackPoint { private TrackPoint.Id id; @NonNull - private Instant time; + private final Instant time; private Double latitude; private Double longitude; @@ -96,18 +96,13 @@ public class TrackPoint { private Float altitudeGain_m = null; private Float altitudeLoss_m = null; - public TrackPoint(@NonNull Type type) { + public TrackPoint(@NonNull Type type, @NonNull Instant time) { this.type = type; - this.time = Instant.now(); //TODO This may result in #800 - } - - public TrackPoint(@NonNull Type type, Instant time) { - this(type); this.time = time; } - public TrackPoint(@NonNull Location location) { - this(Type.TRACKPOINT, location, Instant.now()); //TODO This may result in #800 + public TrackPoint(@NonNull Location location, @NonNull Instant time) { + this(Type.TRACKPOINT, location, time); } public TrackPoint(@NonNull Type type, @NonNull Location location, @NonNull Instant time) { @@ -130,28 +125,14 @@ public class TrackPoint { this.altitude = altitude; } - @Deprecated //See #316 - public static TrackPoint createSegmentStartManual() { - return createSegmentStartManualWithTime(Instant.now()); - } - public static TrackPoint createSegmentStartManualWithTime(Instant time) { return new TrackPoint(Type.SEGMENT_START_MANUAL, time); } - @Deprecated //See #316 - public static TrackPoint createSegmentStartAutomatic() { - return createSegmentStartAutomaticWithTime(Instant.now()); - } - public static TrackPoint createSegmentStartAutomaticWithTime(Instant time) { return new TrackPoint(Type.SEGMENT_START_AUTOMATIC, time); } - public static TrackPoint createSegmentEnd() { - return createSegmentEndWithTime(Instant.now()); - } - public static TrackPoint createSegmentEndWithTime(Instant time) { return new TrackPoint(Type.SEGMENT_END_MANUAL, time); } @@ -256,15 +237,11 @@ public class TrackPoint { return this; } + @NonNull public Instant getTime() { return time; } - public TrackPoint setTime(Instant time) { - this.time = time; - return this; - } - public boolean isRecent() { return Instant.now() .isBefore(time.plus(MAX_LOCATION_AGE)); diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java index 6f294a1bc..7469617a4 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java @@ -506,7 +506,8 @@ public class ContentProviderUtils { * @param indexes the cached trackPoints indexes */ static TrackPoint fillTrackPoint(Cursor cursor, CachedTrackPointsIndexes indexes) { - TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.getById(cursor.getInt(indexes.typeIndex))); + Instant time = Instant.ofEpochMilli(cursor.getLong(indexes.timeIndex)); + TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.getById(cursor.getInt(indexes.typeIndex)), time); trackPoint.setId(new TrackPoint.Id(cursor.getInt(indexes.idIndex))); if (!cursor.isNull(indexes.longitudeIndex)) { @@ -515,9 +516,6 @@ public class ContentProviderUtils { if (!cursor.isNull(indexes.latitudeIndex)) { trackPoint.setLatitude(((double) cursor.getInt(indexes.latitudeIndex)) / 1E6); } - if (!cursor.isNull(indexes.timeIndex)) { - trackPoint.setTime(Instant.ofEpochMilli(cursor.getLong(indexes.timeIndex))); - } if (!cursor.isNull(indexes.altitudeIndex)) { trackPoint.setAltitude(Altitude.WGS84.of(cursor.getFloat(indexes.altitudeIndex))); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java index 771fe4da8..4e0746fea 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java @@ -24,6 +24,7 @@ import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; +import java.time.Instant; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -251,14 +252,14 @@ public class GpxTrackImporter extends DefaultHandler implements XMLImporter.Trac private TrackPoint createTrackPoint() throws ParsingException { - TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); - + Instant parsedTime = null; try { - trackPoint.setTime(StringUtils.parseTime(time)); + parsedTime = StringUtils.parseTime(time); } catch (Exception e) { throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse time: %s", time)), e); } + TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, parsedTime); if (latitude == null || longitude == null) { return trackPoint; } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index d0e32762a..43243fa8b 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -29,6 +29,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.PowerManager.WakeLock; import android.util.Log; +import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; @@ -281,7 +282,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand // Update database track.setId(trackId); - TrackPoint segmentStartTrackPoint = TrackPoint.createSegmentStartManual(); + TrackPoint segmentStartTrackPoint = handlerServer.createSegmentStartManual(); trackStatisticsUpdater = new TrackStatisticsUpdater(); insertTrackPoint(track, segmentStartTrackPoint); @@ -315,7 +316,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand track.getTrackStatistics().setStopTime(Instant.now()); trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics()); - insertTrackPoint(track, TrackPoint.createSegmentStartManual()); + insertTrackPoint(track, handlerServer.createSegmentStartManual()); // Set recording status updateRecordingStatus(new RecordingStatus(trackId, false)); @@ -336,7 +337,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand // Update database Track track = contentProviderUtils.getTrack(getRecordingTrackId()); if (track != null) { - insertTrackPoint(track, TrackPoint.createSegmentStartManual()); + insertTrackPoint(track, handlerServer.createSegmentStartManual()); } startRecording(); @@ -394,8 +395,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand insertTrackPointIfNewer(track, lastTrackPoint); } - TrackPoint segmentEnd = TrackPoint.createSegmentEnd(); - handlerServer.fillAndReset(segmentEnd); + TrackPoint segmentEnd = handlerServer.createSegmentEnd(); insertTrackPoint(track, segmentEnd); } } @@ -422,7 +422,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand if (lastTrackPoint != null) { insertTrackPointIfNewer(track, lastTrackPoint); } - insertTrackPoint(track, TrackPoint.createSegmentEnd()); + insertTrackPoint(track, handlerServer.createSegmentEnd()); } endRecording(false); @@ -677,17 +677,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand Track track = contentProviderUtils.getTrack(recordingStatus.getTrackId()); // Compute temporary track statistics using sensorData and update time. - //TODO This somehow should happen in the HandlerServer as we create a new TrackPoint. - TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater); - TrackPoint tmpLastTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); - - if (lastTrackPoint != null && lastTrackPoint.hasLocation()) { - //TODO Should happen in TrackPoint? via constructor - tmpLastTrackPoint.setSpeed(lastTrackPoint.getSpeed()); - tmpLastTrackPoint.setAltitude(lastTrackPoint.getAltitude()); - tmpLastTrackPoint.setLongitude(lastTrackPoint.getLongitude()); - tmpLastTrackPoint.setLatitude(lastTrackPoint.getLatitude()); - } HandlerServer localHandlerServer = this.handlerServer; if (localHandlerServer == null) { @@ -696,11 +685,14 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand return; } - SensorDataSet sensorDataSet = localHandlerServer.fill(tmpLastTrackPoint); - tmpTrackStatisticsUpdater.addTrackPoint(tmpLastTrackPoint, recordingDistanceInterval); + //TODO This somehow should happen in the HandlerServer as we create a new TrackPoint. + TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater); + Pair current = localHandlerServer.createCurrentTrackPoint(lastTrackPoint); + + tmpTrackStatisticsUpdater.addTrackPoint(current.first, recordingDistanceInterval); track.setTrackStatistics(tmpTrackStatisticsUpdater.getTrackStatistics()); - recordingDataObservable.postValue(new RecordingData(track, tmpLastTrackPoint, sensorDataSet)); + recordingDataObservable.postValue(new RecordingData(track, current.first, current.second)); } public LiveData getRecordingStatusObservable() { diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java index 0172ebc06..7f4e96388 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java @@ -128,8 +128,6 @@ class GpsStatus { } if (trackPoint != null) { - // Update trackPoint's time to the current time millis when trackPoint has been received. - trackPoint.setTime(Instant.now()); lastValidTrackPoint = trackPoint; } lastTrackPoint = trackPoint; diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java b/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java index 8eb6ea72d..956f1b0d6 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java @@ -3,10 +3,15 @@ package de.dennisguse.opentracks.services.handlers; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; +import android.util.Pair; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import java.time.Clock; +import java.time.Instant; + import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.services.sensors.AltitudeSumManager; @@ -23,6 +28,9 @@ public class HandlerServer { // Disabled to simplify testing and implementation of #822 // private ExecutorService serviceExecutor; + @VisibleForTesting + private Clock clock; + private final LocationHandler locationHandler; private final EGM2008CorrectionManager egm2008CorrectionManager = new EGM2008CorrectionManager(); private BluetoothRemoteSensorManager remoteSensorManager; @@ -115,6 +123,41 @@ public class HandlerServer { service.newTrackPoint(trackPoint, recordingGpsAccuracy); } + public TrackPoint createSegmentStartManual() { + return TrackPoint.createSegmentStartManualWithTime(createNow()); + } + + public TrackPoint createSegmentEnd() { + TrackPoint segmentEnd = TrackPoint.createSegmentEndWithTime(createNow()); + fillAndReset(segmentEnd); + return segmentEnd; + } + + //TODO get lastTrackPoint from LocationHandler + public Pair createCurrentTrackPoint(@Nullable TrackPoint lastTrackPoint) { + TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow()); + + if (lastTrackPoint != null && lastTrackPoint.hasLocation()) { + //TODO Should happen in TrackPoint? via constructor + currentTrackPoint.setSpeed(lastTrackPoint.getSpeed()); + currentTrackPoint.setAltitude(lastTrackPoint.getAltitude()); + currentTrackPoint.setLongitude(lastTrackPoint.getLongitude()); + currentTrackPoint.setLatitude(lastTrackPoint.getLatitude()); + } + SensorDataSet sensorDataSet = fill(currentTrackPoint); + + return new Pair<>(currentTrackPoint, sensorDataSet); + } + + //TODO Limit visibility + public Instant createNow() { + if (clock != null) { + return Instant.now(clock); + } else { + return Instant.now(); + } + } + @Deprecated @VisibleForTesting public void setAltitudeSumManager(AltitudeSumManager altitudeSumManager) { diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java index 0683a026e..866b48aa7 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java @@ -89,7 +89,7 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener { */ @Override public void onLocationChanged(@NonNull Location location) { - TrackPoint trackPoint = new TrackPoint(location); + TrackPoint trackPoint = new TrackPoint(location, handlerServer.createNow()); boolean isAccurate = trackPoint.fulfillsAccuracy(recordingGpsAccuracy); boolean isValid = LocationUtils.isValidLocation(location);