forked from upstream-mirrors/OpenTracks
Segments: only insert one trackpoint and set the type.
Existing data is not migrated. #316.
This commit is contained in:
@@ -180,6 +180,40 @@ public class TrackRecordingServiceTest {
|
|||||||
assertTrue(service.isRecording());
|
assertTrue(service.isRecording());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MediumTest
|
||||||
|
@Test
|
||||||
|
public void testRecording_start() throws TimeoutException, InterruptedException {
|
||||||
|
// given
|
||||||
|
TrackRecordingServiceInterface service = ((TrackRecordingServiceInterface) mServiceRule.bindService(createStartIntent(context)));
|
||||||
|
|
||||||
|
// when
|
||||||
|
Track.Id trackId = service.startNewTrack();
|
||||||
|
|
||||||
|
// then
|
||||||
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
|
|
||||||
|
assertEquals(1, trackPoints.size());
|
||||||
|
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
@MediumTest
|
||||||
|
@Test
|
||||||
|
public void testRecording_stop() throws TimeoutException, InterruptedException {
|
||||||
|
// given
|
||||||
|
TrackRecordingServiceInterface service = ((TrackRecordingServiceInterface) mServiceRule.bindService(createStartIntent(context)));
|
||||||
|
Track.Id trackId = service.startNewTrack();
|
||||||
|
|
||||||
|
// when
|
||||||
|
service.endCurrentTrack();
|
||||||
|
|
||||||
|
// then
|
||||||
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
|
|
||||||
|
assertEquals(2, trackPoints.size());
|
||||||
|
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
||||||
|
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(1).getType());
|
||||||
|
}
|
||||||
|
|
||||||
@MediumTest
|
@MediumTest
|
||||||
@Test
|
@Test
|
||||||
public void testRecording_pauseAndResume() throws TimeoutException, InterruptedException {
|
public void testRecording_pauseAndResume() throws TimeoutException, InterruptedException {
|
||||||
|
|||||||
+75
-47
@@ -4,6 +4,7 @@ import android.content.ContentProvider;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
@@ -91,12 +92,12 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
Track.Id trackId = service.startNewTrack();
|
Track.Id trackId = service.startNewTrack();
|
||||||
|
|
||||||
// when
|
// when
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 1, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0001, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0001, 35.0, 2, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0002, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0002, 35.0, 3, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0003, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0003, 35.0, 4, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0004, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0004, 35.0, 5, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0005, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0005, 35.0, 6, 15);
|
||||||
|
|
||||||
service.endCurrentTrack();
|
service.endCurrentTrack();
|
||||||
|
|
||||||
@@ -105,9 +106,16 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
|
|
||||||
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
assertEquals(8, trackPoints.size());
|
assertEquals(8, trackPoints.size());
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
assertTrackPoints(List.of(
|
||||||
assertEquals(45.0005, trackPoints.get(6).getLatitude(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_MANUAL, null),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(7).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 1),
|
||||||
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 2),
|
||||||
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 3),
|
||||||
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 4),
|
||||||
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 5),
|
||||||
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 6),
|
||||||
|
new Pair<>(TrackPoint.Type.SEGMENT_END_MANUAL, null)
|
||||||
|
), trackPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
@MediumTest
|
@MediumTest
|
||||||
@@ -118,12 +126,12 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
assertNotNull(trackId);
|
assertNotNull(trackId);
|
||||||
|
|
||||||
// when
|
// when
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 1, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.000001, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.000001, 35.0, 2, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.000002, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.000002, 35.0, 3, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.000003, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.000003, 35.0, 4, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.000004, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.000004, 35.0, 5, 15);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.000005, 35.0, 5, 15);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.000005, 35.0, 6, 15);
|
||||||
|
|
||||||
service.endCurrentTrack();
|
service.endCurrentTrack();
|
||||||
|
|
||||||
@@ -132,9 +140,12 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
|
|
||||||
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
assertEquals(4, trackPoints.size());
|
assertEquals(4, trackPoints.size());
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
assertTrackPoints(List.of(
|
||||||
assertEquals(45.000005, trackPoints.get(2).getLatitude(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_MANUAL, null),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(3).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 1),
|
||||||
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 6),
|
||||||
|
new Pair<>(TrackPoint.Type.SEGMENT_END_MANUAL, null)
|
||||||
|
), trackPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @MediumTest
|
// @MediumTest
|
||||||
@@ -175,12 +186,13 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
assertFalse(service.isRecording());
|
assertFalse(service.isRecording());
|
||||||
|
|
||||||
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
assertEquals(5, trackPoints.size());
|
assertTrackPoints(List.of(
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
new Pair<>(TrackPoint.Type.SEGMENT_START_MANUAL, null),
|
||||||
assertEquals(1, trackPoints.get(1).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 1),
|
||||||
assertEquals(2, trackPoints.get(2).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 2),
|
||||||
assertEquals(6, trackPoints.get(3).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 6),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(4).getType());
|
new Pair<>(TrackPoint.Type.SEGMENT_END_MANUAL, null)
|
||||||
|
), trackPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
@MediumTest
|
@MediumTest
|
||||||
@@ -204,12 +216,14 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
|
|
||||||
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
assertEquals(6, trackPoints.size());
|
assertEquals(6, trackPoints.size());
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
assertTrackPoints(List.of(
|
||||||
assertEquals(1, trackPoints.get(1).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_MANUAL, null),
|
||||||
assertEquals(2, trackPoints.get(2).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 1),
|
||||||
assertEquals(5, trackPoints.get(3).getAccuracy(), 0.01); //TODO Check why this trackPoint is inserted.
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 2),
|
||||||
assertEquals(6, trackPoints.get(4).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 5), //TODO Check why this trackPoint is inserted.
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(5).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 6),
|
||||||
|
new Pair<>(TrackPoint.Type.SEGMENT_END_MANUAL, null)
|
||||||
|
), trackPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
@MediumTest
|
@MediumTest
|
||||||
@@ -234,12 +248,12 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// when
|
// when
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 0, 0);
|
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 1, 0);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 1, 0);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 2, 0);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 2, 0);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 3, 0);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 3, 0);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 4, 0);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 4, 0);
|
||||||
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 5, 0);
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 5, 0);
|
||||||
|
TrackRecordingServiceTest.newTrackPoint(service, 45.0, 35.0, 6, 0);
|
||||||
|
|
||||||
service.endCurrentTrack();
|
service.endCurrentTrack();
|
||||||
|
|
||||||
@@ -248,14 +262,16 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
|
|
||||||
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
assertEquals(8, trackPoints.size());
|
assertEquals(8, trackPoints.size());
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
assertTrackPoints(List.of(
|
||||||
assertEquals(0, trackPoints.get(1).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_MANUAL, null),
|
||||||
assertEquals(1, trackPoints.get(2).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 1),
|
||||||
assertEquals(2, trackPoints.get(3).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 2),
|
||||||
assertEquals(3, trackPoints.get(4).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 3),
|
||||||
assertEquals(4, trackPoints.get(5).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 4),
|
||||||
assertEquals(5, trackPoints.get(6).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 5),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(7).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 6),
|
||||||
|
new Pair<>(TrackPoint.Type.SEGMENT_END_MANUAL, null)
|
||||||
|
), trackPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
@MediumTest
|
@MediumTest
|
||||||
@@ -277,15 +293,27 @@ public class TrackRecordingServiceTestLocation {
|
|||||||
assertFalse(service.isRecording());
|
assertFalse(service.isRecording());
|
||||||
|
|
||||||
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(trackId);
|
||||||
assertEquals(9, trackPoints.size());
|
assertEquals(7, trackPoints.size());
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_START_MANUAL, trackPoints.get(0).getType());
|
assertTrackPoints(List.of(
|
||||||
assertEquals(1, trackPoints.get(1).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_MANUAL, null),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(2).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 1),
|
||||||
assertEquals(2, trackPoints.get(3).getAccuracy(), 0.01);
|
|
||||||
assertEquals(3, trackPoints.get(4).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_AUTOMATIC, 2),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(5).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 3),
|
||||||
assertEquals(4, trackPoints.get(6).getAccuracy(), 0.01);
|
|
||||||
assertEquals(5, trackPoints.get(7).getAccuracy(), 0.01);
|
new Pair<>(TrackPoint.Type.SEGMENT_START_AUTOMATIC, 4),
|
||||||
assertEquals(TrackPoint.Type.SEGMENT_END_MANUAL, trackPoints.get(8).getType());
|
new Pair<>(TrackPoint.Type.TRACKPOINT, 5),
|
||||||
|
new Pair<>(TrackPoint.Type.SEGMENT_END_MANUAL, null)
|
||||||
|
), trackPoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertTrackPoints(List<Pair<TrackPoint.Type, Object>> typeAndAccuracy, List<TrackPoint> actual) {
|
||||||
|
assertEquals(typeAndAccuracy.size(), actual.size());
|
||||||
|
for (int i = 0; i < typeAndAccuracy.size(); i++) {
|
||||||
|
assertEquals(typeAndAccuracy.get(i).first, actual.get(i).getType());
|
||||||
|
if (typeAndAccuracy.get(i).second != null) {
|
||||||
|
assertEquals((Integer) typeAndAccuracy.get(i).second, actual.get(i).getAccuracy(), 0.01);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ public class TrackPoint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Type type;
|
@NonNull
|
||||||
|
private Type type;
|
||||||
|
|
||||||
private Float heartRate_bpm = null;
|
private Float heartRate_bpm = null;
|
||||||
private Float cyclingCadence_rpm = null;
|
private Float cyclingCadence_rpm = null;
|
||||||
@@ -92,7 +93,7 @@ public class TrackPoint {
|
|||||||
this(Type.TRACKPOINT, new Location(""));
|
this(Type.TRACKPOINT, new Location(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
public TrackPoint(Type type) {
|
public TrackPoint(@NonNull Type type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.location = new Location("");
|
this.location = new Location("");
|
||||||
}
|
}
|
||||||
@@ -108,18 +109,6 @@ public class TrackPoint {
|
|||||||
this.location = location;
|
this.location = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TrackPoint(@NonNull TrackPoint trackPoint) {
|
|
||||||
this.type = trackPoint.getType();
|
|
||||||
this.location = trackPoint.getLocation();
|
|
||||||
|
|
||||||
this.heartRate_bpm = trackPoint.getHeartRate_bpm();
|
|
||||||
this.cyclingCadence_rpm = trackPoint.getCyclingCadence_rpm();
|
|
||||||
this.power = trackPoint.getPower();
|
|
||||||
|
|
||||||
this.elevationGain = trackPoint.getElevationGain();
|
|
||||||
this.elevationLoss = trackPoint.getElevationLoss();
|
|
||||||
}
|
|
||||||
|
|
||||||
public TrackPoint(double latitude, double longitude, Double altitude, long time) {
|
public TrackPoint(double latitude, double longitude, Double altitude, long time) {
|
||||||
this.type = Type.TRACKPOINT;
|
this.type = Type.TRACKPOINT;
|
||||||
location = new Location(LocationManager.GPS_PROVIDER);
|
location = new Location(LocationManager.GPS_PROVIDER);
|
||||||
@@ -172,6 +161,10 @@ public class TrackPoint {
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setType(@NonNull Type type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSegmentStart() {
|
public boolean isSegmentStart() {
|
||||||
return type == Type.SEGMENT_START_AUTOMATIC || type == Type.SEGMENT_START_MANUAL;
|
return type == Type.SEGMENT_START_AUTOMATIC || type == Type.SEGMENT_START_MANUAL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -569,8 +569,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
double distanceToLastTrackLocation = trackPoint.distanceTo(lastValidTrackPoint);
|
double distanceToLastTrackLocation = trackPoint.distanceTo(lastValidTrackPoint);
|
||||||
if (distanceToLastTrackLocation > maxRecordingDistance) {
|
if (distanceToLastTrackLocation > maxRecordingDistance) {
|
||||||
insertTrackPointIfNewer(track, lastTrackPoint);
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
insertTrackPoint(track, TrackPoint.createSegmentEndWithTime(trackPoint));
|
|
||||||
|
|
||||||
|
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
|
||||||
insertTrackPoint(track, trackPoint);
|
insertTrackPoint(track, trackPoint);
|
||||||
|
|
||||||
isIdle = false;
|
isIdle = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user