TrackRecordingManager: only keep lastTrackPoint if was not stored.

This commit is contained in:
Dennis Guse
2021-10-07 21:11:34 +02:00
parent 52a110d998
commit d97e5ab1ef
@@ -8,6 +8,7 @@ import android.util.Log;
import android.util.Pair; import android.util.Pair;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.content.data.Distance;
@@ -36,6 +37,7 @@ class TrackRecordingManager {
private Track.Id trackId; private Track.Id trackId;
private TrackStatisticsUpdater trackStatisticsUpdater; private TrackStatisticsUpdater trackStatisticsUpdater;
private boolean currentSegmentHasTrackPoint;
private TrackPoint lastTrackPoint; private TrackPoint lastTrackPoint;
private TrackPoint lastValidTrackPoint; private TrackPoint lastValidTrackPoint;
private boolean isIdle; private boolean isIdle;
@@ -64,6 +66,8 @@ class TrackRecordingManager {
track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics()); track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics());
contentProviderUtils.updateTrack(track); contentProviderUtils.updateTrack(track);
currentSegmentHasTrackPoint = false;
return trackId; return trackId;
} }
@@ -78,6 +82,7 @@ class TrackRecordingManager {
trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics()); trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics());
insertTrackPoint(trackId, segmentStartTrackPoint); insertTrackPoint(trackId, segmentStartTrackPoint);
currentSegmentHasTrackPoint = false;
} }
void pause(TrackPointCreator trackPointCreator) { void pause(TrackPointCreator trackPointCreator) {
@@ -85,6 +90,7 @@ class TrackRecordingManager {
insertTrackPointIfNewer(trackId, lastTrackPoint); insertTrackPointIfNewer(trackId, lastTrackPoint);
} }
insertTrackPoint(trackId, trackPointCreator.createSegmentEnd()); insertTrackPoint(trackId, trackPointCreator.createSegmentEnd());
currentSegmentHasTrackPoint = false;
} }
void end(TrackPointCreator trackPointCreator) { void end(TrackPointCreator trackPointCreator) {
@@ -98,6 +104,7 @@ class TrackRecordingManager {
trackId = null; trackId = null;
trackStatisticsUpdater = null; trackStatisticsUpdater = null;
lastTrackPoint = null; lastTrackPoint = null;
currentSegmentHasTrackPoint = false;
lastValidTrackPoint = null; lastValidTrackPoint = null;
isIdle = false; isIdle = false;
} }
@@ -153,12 +160,14 @@ class TrackRecordingManager {
//TODO Figure out how to avoid loading the lastValidTrackPoint from the database //TODO Figure out how to avoid loading the lastValidTrackPoint from the database
TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(trackId); TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(trackId);
//Storing trackPoint //Storing trackPoint
// Always insert the first segment location // Always insert the first segment location
if (!currentSegmentHasTrackPoint()) { if (!currentSegmentHasTrackPoint) {
insertTrackPoint(trackId, trackPoint); insertTrackPoint(trackId, trackPoint);
lastTrackPoint = trackPoint; currentSegmentHasTrackPoint = true;
lastTrackPoint = null;
return true; return true;
} }
@@ -171,8 +180,8 @@ class TrackRecordingManager {
insertTrackPoint(trackId, trackPoint); insertTrackPoint(trackId, trackPoint);
isIdle = false; isIdle = false;
lastTrackPoint = null;
lastTrackPoint = trackPoint;
return true; return true;
} }
@@ -182,8 +191,8 @@ class TrackRecordingManager {
insertTrackPoint(trackId, trackPoint); insertTrackPoint(trackId, trackPoint);
isIdle = false; isIdle = false;
lastTrackPoint = null;
lastTrackPoint = trackPoint;
return true; return true;
} }
} }
@@ -194,8 +203,8 @@ class TrackRecordingManager {
insertTrackPoint(trackId, trackPoint); insertTrackPoint(trackId, trackPoint);
isIdle = true; isIdle = true;
lastTrackPoint = null;
lastTrackPoint = trackPoint;
return true; return true;
} }
@@ -205,8 +214,8 @@ class TrackRecordingManager {
insertTrackPoint(trackId, trackPoint); insertTrackPoint(trackId, trackPoint);
isIdle = false; isIdle = false;
lastTrackPoint = null;
lastTrackPoint = trackPoint;
return true; return true;
} }
@@ -238,20 +247,18 @@ class TrackRecordingManager {
@Deprecated @Deprecated
//Use lastValidTrackPoint //Use lastValidTrackPoint
private TrackPoint getLastValidTrackPointInCurrentSegment(Track.Id trackId) { private TrackPoint getLastValidTrackPointInCurrentSegment(Track.Id trackId) {
if (!currentSegmentHasTrackPoint()) { if (!currentSegmentHasTrackPoint) {
return null; return null;
} }
return contentProviderUtils.getLastValidTrackPoint(trackId); return contentProviderUtils.getLastValidTrackPoint(trackId);
} }
private boolean currentSegmentHasTrackPoint() {
return lastTrackPoint != null;
}
/** /**
* Inserts a trackPoint if this trackPoint is different than lastValidTrackPoint. * Inserts a trackPoint if this trackPoint is different than lastValidTrackPoint.
*/ */
private void insertTrackPointIfNewer(@NonNull Track.Id trackId, @NonNull TrackPoint trackPoint) { private void insertTrackPointIfNewer(@NonNull Track.Id trackId, @Nullable TrackPoint trackPoint) {
if (trackPoint == null) return;
TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(trackId); TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(trackId);
if (lastValidTrackPoint != null && trackPoint.getTime().equals(lastValidTrackPoint.getTime())) { if (lastValidTrackPoint != null && trackPoint.getTime().equals(lastValidTrackPoint.getTime())) {
// Do not insert if inserted already // Do not insert if inserted already
@@ -268,6 +275,7 @@ class TrackRecordingManager {
trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval); trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
contentProviderUtils.updateTrackStatistics(trackId, trackStatisticsUpdater.getTrackStatistics()); contentProviderUtils.updateTrackStatistics(trackId, trackStatisticsUpdater.getTrackStatistics());
lastValidTrackPoint = trackPoint;
} catch (SQLiteException e) { } catch (SQLiteException e) {
/* /*
* Insert failed, most likely because of SqlLite error code 5 (SQLite_BUSY). * Insert failed, most likely because of SqlLite error code 5 (SQLite_BUSY).