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