forked from upstream-mirrors/OpenTracks
Statistics requires startTime and stopTime.
This is now enforced for import as wells.
This commit is contained in:
@@ -6,6 +6,7 @@ import android.util.Pair;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -16,6 +17,7 @@ import de.dennisguse.opentracks.data.models.Distance;
|
|||||||
import de.dennisguse.opentracks.data.models.Marker;
|
import de.dennisguse.opentracks.data.models.Marker;
|
||||||
import de.dennisguse.opentracks.data.models.Position;
|
import de.dennisguse.opentracks.data.models.Position;
|
||||||
import de.dennisguse.opentracks.data.models.Speed;
|
import de.dennisguse.opentracks.data.models.Speed;
|
||||||
|
import de.dennisguse.opentracks.data.models.Statistics;
|
||||||
import de.dennisguse.opentracks.data.models.Track;
|
import de.dennisguse.opentracks.data.models.Track;
|
||||||
import de.dennisguse.opentracks.data.models.TrackPoint;
|
import de.dennisguse.opentracks.data.models.TrackPoint;
|
||||||
import de.dennisguse.opentracks.ui.markers.MarkerUtils;
|
import de.dennisguse.opentracks.ui.markers.MarkerUtils;
|
||||||
@@ -34,7 +36,7 @@ public class TestDataUtil {
|
|||||||
* Create a track without any trackPoints.
|
* Create a track without any trackPoints.
|
||||||
*/
|
*/
|
||||||
public static Track createTrack(Track.Id trackId) {
|
public static Track createTrack(Track.Id trackId) {
|
||||||
Track track = new Track();
|
Track track = new Track(Statistics.DEFAULT);
|
||||||
track.setId(trackId);
|
track.setId(trackId);
|
||||||
track.setName("Test: " + trackId.id());
|
track.setName("Test: " + trackId.id());
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -130,7 +130,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TrackPoint.Id initializeTrack(Track.Id id, int numPoints) {
|
private TrackPoint.Id initializeTrack(Track.Id id, int numPoints) {
|
||||||
Track track = new Track();
|
Track track = new Track(Statistics.DEFAULT);
|
||||||
track.setId(id);
|
track.setId(id);
|
||||||
track.setName("Test: " + id.id());
|
track.setName("Test: " + id.id());
|
||||||
contentProviderUtils.insertTrack(track);
|
contentProviderUtils.insertTrack(track);
|
||||||
|
|||||||
@@ -120,14 +120,14 @@ public class ContentProviderUtils {
|
|||||||
int altitudeLossIndex = cursor.getColumnIndexOrThrow(TracksColumns.ALTITUDE_LOSS);
|
int altitudeLossIndex = cursor.getColumnIndexOrThrow(TracksColumns.ALTITUDE_LOSS);
|
||||||
|
|
||||||
Statistics trackStatistics = new Statistics(
|
Statistics trackStatistics = new Statistics(
|
||||||
cursor.isNull(startTimeIndex) ? null : Instant.ofEpochMilli(cursor.getLong(startTimeIndex)),
|
Instant.ofEpochMilli(cursor.getLong(startTimeIndex)),
|
||||||
cursor.isNull(stopTimeIndex) ? null : Instant.ofEpochMilli(cursor.getLong(stopTimeIndex)),
|
Instant.ofEpochMilli(cursor.getLong(stopTimeIndex)),
|
||||||
cursor.isNull(totalTimeIndex) ? null : Duration.ofMillis(cursor.getLong(totalTimeIndex)),
|
Duration.ofMillis(cursor.getLong(totalTimeIndex)),
|
||||||
cursor.isNull(movingTimeIndex) ? null : Duration.ofMillis(cursor.getLong(movingTimeIndex)),
|
Duration.ofMillis(cursor.getLong(movingTimeIndex)),
|
||||||
|
|
||||||
cursor.isNull(totalDistanceIndex) ? null : Distance.of(cursor.getFloat(totalDistanceIndex)),
|
Distance.of(cursor.getFloat(totalDistanceIndex)),
|
||||||
|
|
||||||
cursor.isNull(maxSpeedIndex) ? null : Speed.of(cursor.getFloat(maxSpeedIndex)),
|
Speed.of(cursor.getFloat(maxSpeedIndex)),
|
||||||
cursor.isNull(minAltitudeIndex) || cursor.isNull(maxAltitudeIndex) ? null : new AltitudeExtremities(cursor.getFloat(minAltitudeIndex), cursor.getFloat(maxAltitudeIndex)),
|
cursor.isNull(minAltitudeIndex) || cursor.isNull(maxAltitudeIndex) ? null : new AltitudeExtremities(cursor.getFloat(minAltitudeIndex), cursor.getFloat(maxAltitudeIndex)),
|
||||||
cursor.isNull(altitudeGainIndex) || cursor.isNull(altitudeLossIndex) ? null : new AltitudeGainLoss(cursor.getFloat(altitudeGainIndex), cursor.getFloat(altitudeLossIndex)),
|
cursor.isNull(altitudeGainIndex) || cursor.isNull(altitudeLossIndex) ? null : new AltitudeGainLoss(cursor.getFloat(altitudeGainIndex), cursor.getFloat(altitudeLossIndex)),
|
||||||
|
|
||||||
@@ -136,12 +136,8 @@ public class ContentProviderUtils {
|
|||||||
);
|
);
|
||||||
|
|
||||||
Track track = new Track(ZoneOffset.ofTotalSeconds(cursor.getInt(startTimeOffsetIndex)), trackStatistics);
|
Track track = new Track(ZoneOffset.ofTotalSeconds(cursor.getInt(startTimeOffsetIndex)), trackStatistics);
|
||||||
if (!cursor.isNull(idIndex)) {
|
track.setId(new Track.Id(cursor.getLong(idIndex)));
|
||||||
track.setId(new Track.Id(cursor.getLong(idIndex)));
|
track.setUuid(UUIDUtils.fromBytes(cursor.getBlob(uuidIndex)));
|
||||||
}
|
|
||||||
if (!cursor.isNull(uuidIndex)) {
|
|
||||||
track.setUuid(UUIDUtils.fromBytes(cursor.getBlob(uuidIndex)));
|
|
||||||
}
|
|
||||||
if (!cursor.isNull(nameIndex)) {
|
if (!cursor.isNull(nameIndex)) {
|
||||||
track.setName(cursor.getString(nameIndex));
|
track.setName(cursor.getString(nameIndex));
|
||||||
}
|
}
|
||||||
@@ -310,12 +306,8 @@ public class ContentProviderUtils {
|
|||||||
|
|
||||||
private ContentValues createContentValues(Statistics trackStatistics) {
|
private ContentValues createContentValues(Statistics trackStatistics) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
if (trackStatistics.startTime() != null) {
|
values.put(TracksColumns.STARTTIME, trackStatistics.startTime().toEpochMilli());
|
||||||
values.put(TracksColumns.STARTTIME, trackStatistics.startTime().toEpochMilli());
|
values.put(TracksColumns.STOPTIME, trackStatistics.stopTime().toEpochMilli());
|
||||||
}
|
|
||||||
if (trackStatistics.stopTime() != null) {
|
|
||||||
values.put(TracksColumns.STOPTIME, trackStatistics.stopTime().toEpochMilli());
|
|
||||||
}
|
|
||||||
values.put(TracksColumns.TOTALDISTANCE, trackStatistics.totalDistance().toM());
|
values.put(TracksColumns.TOTALDISTANCE, trackStatistics.totalDistance().toM());
|
||||||
values.put(TracksColumns.TOTALTIME, trackStatistics.totalDuration().toMillis());
|
values.put(TracksColumns.TOTALTIME, trackStatistics.totalDuration().toMillis());
|
||||||
values.put(TracksColumns.MOVINGTIME, trackStatistics.movingDuration().toMillis());
|
values.put(TracksColumns.MOVINGTIME, trackStatistics.movingDuration().toMillis());
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ public record Statistics(
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static final Statistics DEFAULT =
|
public static final Statistics DEFAULT =
|
||||||
new Statistics(
|
new Statistics(
|
||||||
null,
|
Instant.EPOCH,
|
||||||
null,
|
Instant.EPOCH,
|
||||||
Duration.ZERO,
|
Duration.ZERO,
|
||||||
Duration.ZERO,
|
Duration.ZERO,
|
||||||
Distance.ZERO,
|
Distance.ZERO,
|
||||||
@@ -122,8 +122,8 @@ public record Statistics(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new Statistics(
|
return new Statistics(
|
||||||
startTime == null ? other.startTime : startTime.isBefore(other.startTime) ? startTime : other.startTime,
|
startTime.isBefore(other.startTime) ? startTime : other.startTime,
|
||||||
stopTime == null ? other.stopTime : stopTime.isAfter(other.stopTime) ? stopTime : other.stopTime,
|
stopTime.isAfter(other.stopTime) ? stopTime : other.stopTime,
|
||||||
totalDuration.plus(other.totalDuration),
|
totalDuration.plus(other.totalDuration),
|
||||||
movingDuration.plus(other.movingDuration),
|
movingDuration.plus(other.movingDuration),
|
||||||
totalDistance.plus(other.totalDistance),
|
totalDistance.plus(other.totalDistance),
|
||||||
|
|||||||
@@ -55,12 +55,6 @@ public class Track {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private Statistics trackStatistics;
|
private Statistics trackStatistics;
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
@VisibleForTesting
|
|
||||||
public Track() {
|
|
||||||
this(ZoneOffset.UTC);
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public Track(Statistics statistics) {
|
public Track(Statistics statistics) {
|
||||||
this(ZoneOffset.UTC, statistics);
|
this(ZoneOffset.UTC, statistics);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package de.dennisguse.opentracks.io.file;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -89,7 +90,7 @@ public class TrackFilenameGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getExample() {
|
public String getExample() {
|
||||||
Track track = new Track(new Statistics(Instant.EPOCH, null, null, null, null, null, null, null, null, null));
|
Track track = new Track(ZoneOffset.UTC, Statistics.DEFAULT);
|
||||||
track.setName("Berlin");
|
track.setName("Berlin");
|
||||||
track.setUuid(UUID.fromString("f81d4fae-7dec-11d0-a765-00a0c91e6bf6"));
|
track.setUuid(UUID.fromString("f81d4fae-7dec-11d0-a765-00a0c91e6bf6"));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user