mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-03 01:53:05 +02:00
Simplify construction of TrackStatisticsUpdater.
This commit is contained in:
@@ -334,8 +334,6 @@ public class TrackDataHub {
|
||||
try (AutoCloseableIterator<TrackPoint> trackPointIterator = contentProviderUtils.getTrackPointLocationIterator(selectedTrackId, next)) {
|
||||
|
||||
while (trackPointIterator.hasNext()) {
|
||||
//Prevents a NPE if stop() is happening while notifyTrackPointsTableUpdate()
|
||||
TrackStatisticsUpdater currentUpdater = trackStatisticsUpdater;
|
||||
|
||||
if (!isStarted()) {
|
||||
return;
|
||||
@@ -360,7 +358,14 @@ public class TrackDataHub {
|
||||
samplingFrequency = 1 + (int) (numTotalPoints / targetNumPoints);
|
||||
}
|
||||
|
||||
currentUpdater.addTrackPoint(trackPoint);
|
||||
//Prevents a NPE if stop() is happening while notifyTrackPointsTableUpdate()
|
||||
//TODO Check if this NPE is still happening (and if so, fix it properly. Not with currentUpdater.
|
||||
if (trackStatisticsUpdater == null) {
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater(trackPoint);
|
||||
} else {
|
||||
trackStatisticsUpdater.addTrackPoint(trackPoint);
|
||||
}
|
||||
TrackStatisticsUpdater currentUpdater = trackStatisticsUpdater;
|
||||
|
||||
// Also include the last point if the selected track is not recording.
|
||||
if ((localNumLoadedTrackPoints % samplingFrequency == 0) || (trackPointId == lastTrackPointId && !isSelectedTrackRecording())) {
|
||||
@@ -391,7 +396,6 @@ public class TrackDataHub {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Resets the track points sampling states.
|
||||
*/
|
||||
@@ -399,7 +403,7 @@ public class TrackDataHub {
|
||||
numLoadedPoints = 0;
|
||||
firstSeenTrackPointId = null;
|
||||
lastSeenTrackPointId = null;
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater();
|
||||
trackStatisticsUpdater = null;
|
||||
}
|
||||
|
||||
private boolean isStarted() {
|
||||
|
||||
@@ -145,8 +145,7 @@ public class TrackImporter {
|
||||
|
||||
adjustTrackPoints();
|
||||
|
||||
TrackStatisticsUpdater updater = new TrackStatisticsUpdater();
|
||||
updater.addTrackPoints(trackPoints);
|
||||
TrackStatisticsUpdater updater = new TrackStatisticsUpdater(trackPoints);
|
||||
track.setStatistics(updater.getTrackStatistics());
|
||||
|
||||
Track.Id trackId = contentProviderUtils.insertTrack(track);
|
||||
|
||||
@@ -69,20 +69,19 @@ public class TrackRecordingManager implements SharedPreferences.OnSharedPreferen
|
||||
TrackPoint segmentStartTrackPoint = trackPointCreator.createSegmentStartManual();
|
||||
|
||||
ZoneOffset zoneOffset = ZoneOffset.systemDefault().getRules().getOffset(segmentStartTrackPoint.getTime());
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater();
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater(segmentStartTrackPoint);
|
||||
|
||||
Track track = new Track(zoneOffset, trackStatisticsUpdater.getTrackStatistics());
|
||||
trackId = contentProviderUtils.insertTrack(track);
|
||||
track.setId(trackId);
|
||||
|
||||
onNewTrackPoint(segmentStartTrackPoint);
|
||||
|
||||
String activityTypeLocalized = PreferencesUtils.getDefaultActivityTypeLocalized();
|
||||
track.setActivityTypeLocalized(activityTypeLocalized);
|
||||
track.setActivityType(ActivityType.findByLocalizedString(context, activityTypeLocalized));
|
||||
track.setStatistics(trackStatisticsUpdater.getTrackStatistics());
|
||||
track.setName(TrackNameUtils.getTrackName(context, trackId, track.getStartTime()));
|
||||
contentProviderUtils.updateTrack(track);
|
||||
|
||||
trackId = contentProviderUtils.insertTrack(track);
|
||||
|
||||
onNewTrackPoint(segmentStartTrackPoint);
|
||||
|
||||
return trackId;
|
||||
}
|
||||
|
||||
@@ -98,11 +98,15 @@ public class SegmentStatisticUpdater {
|
||||
avgPower = statistics.avgPower();
|
||||
}
|
||||
|
||||
public Statistics aggregate(Statistics statistics) {
|
||||
SegmentStatisticUpdater intermediate = new SegmentStatisticUpdater(statistics);
|
||||
intermediate.merge(this);
|
||||
return intermediate.getStatistics();
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines these statistics with those from another object.
|
||||
* This assumes that the time periods covered by each do not intersect.
|
||||
*
|
||||
* @param other another statistics data object
|
||||
*/
|
||||
//TODO Should be refactored to append only [mainly due to isIdle]
|
||||
public void merge(SegmentStatisticUpdater other) {
|
||||
|
||||
@@ -62,6 +62,18 @@ public class TrackStatisticsUpdater {
|
||||
this(new SegmentStatisticUpdater().getStatistics());
|
||||
}
|
||||
|
||||
public TrackStatisticsUpdater(@NonNull TrackPoint trackPoint) {
|
||||
this();
|
||||
addTrackPoint(trackPoint);
|
||||
}
|
||||
|
||||
public TrackStatisticsUpdater(List<TrackPoint> trackPoints) {
|
||||
this();
|
||||
assert !trackPoints.isEmpty(); //TODO Enforce that this is always true (e.g., import)
|
||||
|
||||
addTrackPoints(trackPoints);
|
||||
}
|
||||
|
||||
public TrackStatisticsUpdater(@NonNull Statistics statistics) {
|
||||
this.statisticsWithoutCurrentSegment = statistics;
|
||||
this.currentSegment = new SegmentStatisticUpdater();
|
||||
@@ -82,9 +94,7 @@ public class TrackStatisticsUpdater {
|
||||
* Compute TrackStatistics.
|
||||
*/
|
||||
public Statistics getTrackStatistics() {
|
||||
SegmentStatisticUpdater stats = new SegmentStatisticUpdater(statisticsWithoutCurrentSegment); //TODO Should not be necessary.
|
||||
stats.merge(currentSegment);
|
||||
return stats.getStatistics();
|
||||
return currentSegment.aggregate(statisticsWithoutCurrentSegment);
|
||||
}
|
||||
|
||||
public boolean isIdle() {
|
||||
@@ -190,10 +200,7 @@ public class TrackStatisticsUpdater {
|
||||
|
||||
private void reset(TrackPoint trackPoint) {
|
||||
if (currentSegment.isInitialized()) {
|
||||
//TODO Simplify
|
||||
SegmentStatisticUpdater intermediate = new SegmentStatisticUpdater(statisticsWithoutCurrentSegment);
|
||||
intermediate.merge(currentSegment);
|
||||
statisticsWithoutCurrentSegment = intermediate.getStatistics();
|
||||
statisticsWithoutCurrentSegment = currentSegment.aggregate(statisticsWithoutCurrentSegment);
|
||||
}
|
||||
currentSegment.reset(trackPoint.getTime());
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import de.dennisguse.opentracks.data.models.TrackPoint;
|
||||
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
||||
|
||||
public class IntervalStatisticsUpdater {
|
||||
private TrackStatisticsUpdater trackStatisticsUpdater = new TrackStatisticsUpdater();
|
||||
private TrackStatisticsUpdater trackStatisticsUpdater;
|
||||
private final List<Interval> intervalList;
|
||||
private final Distance distanceInterval;
|
||||
private Interval interval, lastInterval;
|
||||
@@ -45,7 +45,11 @@ public class IntervalStatisticsUpdater {
|
||||
|
||||
while (trackPointIterator.hasNext()) {
|
||||
trackPoint = trackPointIterator.next();
|
||||
trackStatisticsUpdater.addTrackPoint(trackPoint);
|
||||
if (trackStatisticsUpdater == null) {
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater(trackPoint);
|
||||
} else {
|
||||
trackStatisticsUpdater.addTrackPoint(trackPoint);
|
||||
}
|
||||
|
||||
if (trackStatisticsUpdater.getTrackStatistics().totalDistance().plus(interval.distance).greaterOrEqualThan(distanceInterval)) {
|
||||
interval.add(trackStatisticsUpdater.getTrackStatistics(), trackPoint);
|
||||
@@ -56,8 +60,7 @@ public class IntervalStatisticsUpdater {
|
||||
intervalList.set(intervalList.size() - 1, adjustedInterval);
|
||||
|
||||
interval = new Interval(interval.distance.minus(adjustedInterval.distance), interval.time.minus(adjustedInterval.time));
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater();
|
||||
trackStatisticsUpdater.addTrackPoint(trackPoint);
|
||||
trackStatisticsUpdater = new TrackStatisticsUpdater(trackPoint);
|
||||
|
||||
lastInterval = new Interval(interval);
|
||||
intervalList.add(lastInterval);
|
||||
@@ -66,10 +69,12 @@ public class IntervalStatisticsUpdater {
|
||||
}
|
||||
}
|
||||
|
||||
if (newIntervalAdded) {
|
||||
lastInterval.add(trackStatisticsUpdater.getTrackStatistics(), null);
|
||||
} else {
|
||||
lastInterval.set(trackStatisticsUpdater.getTrackStatistics());
|
||||
if (trackStatisticsUpdater != null) {
|
||||
if (newIntervalAdded) {
|
||||
lastInterval.add(trackStatisticsUpdater.getTrackStatistics(), null);
|
||||
} else {
|
||||
lastInterval.set(trackStatisticsUpdater.getTrackStatistics());
|
||||
}
|
||||
}
|
||||
|
||||
return trackPoint != null ? trackPoint.getId() : null;
|
||||
|
||||
Reference in New Issue
Block a user