forked from upstream-mirrors/OpenTracks
TrackRecordingManager: only keep lastTrackPoint if was not stored.
This commit is contained in:
@@ -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).
|
||||||
|
|||||||
Reference in New Issue
Block a user