From fce76230e12a8d776fa7d55b67d0ab58ef3d8e3e Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 27 Feb 2021 22:28:26 +0100 Subject: [PATCH] TrackDataListener now passes most recent TrackPoint to onNewTrackPointsDone(). --- .../opentracks/content/TrackDataHub.java | 10 +++++++--- .../opentracks/content/TrackDataListener.java | 4 +++- .../opentracks/fragments/ChartFragment.java | 2 +- .../fragments/IntervalsFragment.java | 2 +- .../StatisticsRecordingFragment.java | 19 +++++++++---------- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java index 8a07b9865..f4f3e0e29 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java @@ -365,10 +365,11 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL next = new TrackPoint.Id(localLastSeenTrackPointIdId.getId() + 1); //TODO startTrackPointId + 1 is an assumption assumption; should be derived from the DB. } + TrackPoint trackPoint = null; try (TrackPointIterator trackPointIterator = contentProviderUtils.getTrackPointLocationIterator(selectedTrackId, next)) { while (trackPointIterator.hasNext()) { - TrackPoint trackPoint = trackPointIterator.next(); + trackPoint = trackPointIterator.next(); TrackPoint.Id trackPointId = trackPoint.getId(); // Stop if past the last wanted point @@ -398,10 +399,13 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL } localNumLoadedTrackPoints++; - localLastSeenTrackPointIdId = trackPointId; } } + if (trackPoint != null) { + localLastSeenTrackPointIdId = trackPoint.getId(); + } + if (updateSamplingState) { numLoadedPoints = localNumLoadedTrackPoints; firstSeenTrackPointId = localFirstSeenTrackPointId; @@ -409,7 +413,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL } for (TrackDataListener listener : sampledInListeners) { - listener.onNewTrackPointsDone(); + listener.onNewTrackPointsDone(trackPoint); } } diff --git a/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java b/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java index 98e8e8516..92078f7ee 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java @@ -16,6 +16,8 @@ package de.dennisguse.opentracks.content; +import androidx.annotation.Nullable; + import de.dennisguse.opentracks.content.data.Marker; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.TrackPoint; @@ -57,7 +59,7 @@ public interface TrackDataListener { * Called when finish sending new track points. * This gets called after every batch of calls to {@link #onSampledInTrackPoint(TrackPoint)} and {@link #onSampledOutTrackPoint(TrackPoint)}. */ - void onNewTrackPointsDone(); + void onNewTrackPointsDone(@Nullable TrackPoint lastTrackPoint); /** * Called to clear previously sent markers. diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index ebc5434f4..28d7008c9 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -240,7 +240,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { } @Override - public void onNewTrackPointsDone() { + public void onNewTrackPointsDone(TrackPoint unused) { if (isResumed()) { chartView.addChartPoints(pendingPoints); pendingPoints.clear(); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java index 7a40ad82c..9ddad34c1 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/IntervalsFragment.java @@ -212,7 +212,7 @@ public class IntervalsFragment extends Fragment implements TrackDataListener { } @Override - public void onNewTrackPointsDone() { + public void onNewTrackPointsDone(TrackPoint unused) { if (isResumed()) { runOnUiThread(this::loadIntervals); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index caa881e75..48922cebd 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -173,28 +173,27 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi @Override public void onSampledInTrackPoint(TrackPoint trackPoint) { - lastTrackPoint = trackPoint; + // We don't care. } @Override public void onSampledOutTrackPoint(TrackPoint trackPoint) { - lastTrackPoint = trackPoint; + // We don't care. } @Override - public void onNewTrackPointsDone() { + public void onNewTrackPointsDone(TrackPoint newLastTrackPoint) { if (isResumed()) { getActivity().runOnUiThread(() -> { if (isResumed()) { + this.lastTrackPoint = newLastTrackPoint; + if (!isSelectedTrackRecording() || isSelectedTrackPaused()) { - lastTrackPoint = null; + this.lastTrackPoint = null; } - TrackPoint trackPoint = lastTrackPoint; //NOTE: There seems to be a race condition; just fix the symptom for now. - if (trackPoint != null && trackPoint.hasLocation()) { - if (!trackPoint.isRecent()) { - lastTrackPoint = null; - } + if (this.lastTrackPoint != null && this.lastTrackPoint.hasLocation() && !this.lastTrackPoint.isRecent()) { + this.lastTrackPoint = null; } setLocationValues(); } @@ -276,7 +275,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi if (sensorDataSet.getCyclingCadence() != null) { sensorDataList.add(new SensorDataModel(sensorDataSet.getCyclingCadence())); } - if(sensorDataSet.getCyclingPower() != null) { + if (sensorDataSet.getCyclingPower() != null) { sensorDataList.add(new SensorDataModel(sensorDataSet.getCyclingPower())); } sensorsAdapter.swapData(sensorDataList);