diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index cae09abbb..c5aba8275 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -352,30 +352,30 @@ public class ContentProviderUtils { return values; } - //TODO Use Statistics - public void updateTrackStatistics(@NonNull Track.Id trackId, @NonNull SegmentStatisticUpdater trackStatistics) { + public void updateTrackStatistics(@NonNull Track.Id trackId, @NonNull Statistics trackStatistics) { contentResolver.update(TracksColumns.CONTENT_URI, createContentValues(trackStatistics), TracksColumns._ID + "=?", new String[]{Long.toString(trackId.id())}); } - //TODO Use Statistics - private ContentValues createContentValues(SegmentStatisticUpdater trackStatistics) { + private ContentValues createContentValues(Statistics trackStatistics) { ContentValues values = new ContentValues(); - if (trackStatistics.getStartTime() != null) { - values.put(TracksColumns.STARTTIME, trackStatistics.getStartTime().toEpochMilli()); + if (trackStatistics.startTime() != null) { + values.put(TracksColumns.STARTTIME, trackStatistics.startTime().toEpochMilli()); } - if (trackStatistics.getStopTime() != null) { - values.put(TracksColumns.STOPTIME, trackStatistics.getStopTime().toEpochMilli()); + if (trackStatistics.stopTime() != null) { + values.put(TracksColumns.STOPTIME, trackStatistics.stopTime().toEpochMilli()); } - values.put(TracksColumns.TOTALDISTANCE, trackStatistics.getTotalDistance().toM()); - values.put(TracksColumns.TOTALTIME, trackStatistics.getTotalTime().toMillis()); - values.put(TracksColumns.MOVINGTIME, trackStatistics.getMovingTime().toMillis()); + values.put(TracksColumns.TOTALDISTANCE, trackStatistics.totalDistance().toM()); + values.put(TracksColumns.TOTALTIME, trackStatistics.totalTime().toMillis()); + values.put(TracksColumns.MOVINGTIME, trackStatistics.movingTime().toMillis()); values.put(TracksColumns.AVGSPEED, trackStatistics.getAverageSpeed().toMPS()); values.put(TracksColumns.AVGMOVINGSPEED, trackStatistics.getAverageMovingSpeed().toMPS()); - values.put(TracksColumns.MAXSPEED, trackStatistics.getMaxSpeed().toMPS()); + values.put(TracksColumns.MAXSPEED, trackStatistics.maxSpeed().toMPS()); values.put(TracksColumns.MIN_ALTITUDE, trackStatistics.getMinAltitude()); values.put(TracksColumns.MAX_ALTITUDE, trackStatistics.getMaxAltitude()); - values.put(TracksColumns.ALTITUDE_GAIN, trackStatistics.getTotalAltitudeGain()); - values.put(TracksColumns.ALTITUDE_LOSS, trackStatistics.getTotalAltitudeLoss()); + if (trackStatistics.altitudeGainLoss() != null) { + values.put(TracksColumns.ALTITUDE_GAIN, trackStatistics.altitudeGainLoss().gain_m()); + values.put(TracksColumns.ALTITUDE_LOSS, trackStatistics.altitudeGainLoss().loss_m()); + } return values; } diff --git a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java index f132823d7..d3b5e679e 100644 --- a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java +++ b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java @@ -27,6 +27,6 @@ public record RecordingData(Track track, TrackPoint latestTrackPoint, SensorData return new SegmentStatisticUpdater().getStatistics(); } - return track.getTrackStatistics().getStatistics(); + return track.getStatistics(); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index 2f085a27e..294ab8f10 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -249,7 +249,7 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen contentProviderUtils.insertTrackPoint(trackPoint, trackId); trackStatisticsUpdater.addTrackPoint(trackPoint); - contentProviderUtils.updateTrackStatistics(trackId, trackStatisticsUpdater.getTrackStatistics()); + contentProviderUtils.updateTrackStatistics(trackId, trackStatisticsUpdater.getTrackStatistics().getStatistics()); lastStoredTrackPoint = trackPoint; if (trackPoint.hasLocation()) { lastStoredTrackPointWithLocation = lastStoredTrackPoint; diff --git a/src/main/java/de/dennisguse/opentracks/stats/ExtremityMonitor.java b/src/main/java/de/dennisguse/opentracks/stats/ExtremityMonitor.java index eda982ce9..e26c5fd37 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/ExtremityMonitor.java +++ b/src/main/java/de/dennisguse/opentracks/stats/ExtremityMonitor.java @@ -100,14 +100,15 @@ public class ExtremityMonitor { * @param min the minimum value * @param max the maximum value */ - public void set(double min, double max) { + public void set(Double min, Double max) { + if (min == null || max == null) { + reset(); + return; + } this.min = min; this.max = max; } - /** - * Returns true if has data. - */ public boolean hasData() { return min != Double.POSITIVE_INFINITY && max != Double.NEGATIVE_INFINITY; } diff --git a/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java b/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java index 6af611081..0b394ae9f 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java +++ b/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java @@ -40,7 +40,6 @@ import de.dennisguse.opentracks.data.models.TrackPoint; * @author Rodrigo Damazio */ //TODO Check that data ranges are valid (not less than zero etc.) -//TODO Should be a Java record public class SegmentStatisticUpdater { // The min and max altitude (meters) seen on this track. @@ -76,18 +75,24 @@ public class SegmentStatisticUpdater { * @param other another statistics data object to copy from */ public SegmentStatisticUpdater(SegmentStatisticUpdater other) { - startTime = other.startTime; - stopTime = other.stopTime; - totalDistance = other.totalDistance; - totalTime = other.totalTime; - movingTime = other.movingTime; - maxSpeed = other.maxSpeed; - altitudeExtremities.set(other.altitudeExtremities.getMin(), other.altitudeExtremities.getMax()); - totalAltitudeGain_m = other.totalAltitudeGain_m; - totalAltitudeLoss_m = other.totalAltitudeLoss_m; - avgHeartRate = other.avgHeartRate; - avgPower = other.avgPower; - isIdle = other.isIdle; + this(other.getStatistics()); + } + + public SegmentStatisticUpdater(Statistics statistics) { + startTime = statistics.startTime(); + stopTime = statistics.stopTime(); + totalDistance = statistics.totalDistance(); + totalTime = statistics.totalTime(); + movingTime = statistics.movingTime(); + maxSpeed = statistics.maxSpeed(); + altitudeExtremities.set(statistics.altitudeMin_m(), statistics.altitudeMax_m()); + if (statistics.altitudeGainLoss() != null) { + totalAltitudeGain_m = statistics.altitudeGainLoss().gain_m(); + totalAltitudeLoss_m = statistics.altitudeGainLoss().loss_m(); + } + avgHeartRate = statistics.avgHeartRate(); + avgPower = statistics.avgPower(); + isIdle = statistics.isIdle(); } @Deprecated //TODO Remove @@ -101,6 +106,7 @@ public class SegmentStatisticUpdater { this.maxSpeed = Speed.of(maxSpeed_mps); this.totalAltitudeGain_m = totalAltitudeGain_m; this.totalAltitudeLoss_m = totalAltitudeLoss_m; + altitudeExtremities.set(0.0, 0.0); } /**