forked from upstream-mirrors/OpenTracks
TrackRecordingService: cleanup.
This commit is contained in:
@@ -74,7 +74,8 @@ public class TrackRecordingService extends Service {
|
|||||||
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
||||||
|
|
||||||
// The following variables are set in onCreate:
|
// The following variables are set in onCreate:
|
||||||
private ExecutorService executorService;
|
@Deprecated //TODO Should not be necessary
|
||||||
|
private ExecutorService executorService; // Enforces order of location changes.
|
||||||
private ContentProviderUtils contentProviderUtils;
|
private ContentProviderUtils contentProviderUtils;
|
||||||
private LocationManager locationManager;
|
private LocationManager locationManager;
|
||||||
private PeriodicTaskExecutor voiceExecutor;
|
private PeriodicTaskExecutor voiceExecutor;
|
||||||
@@ -138,7 +139,6 @@ public class TrackRecordingService extends Service {
|
|||||||
|
|
||||||
private TrackStatisticsUpdater trackStatisticsUpdater;
|
private TrackStatisticsUpdater trackStatisticsUpdater;
|
||||||
private TrackPoint lastTrackPoint;
|
private TrackPoint lastTrackPoint;
|
||||||
private boolean currentSegmentHasLocation;
|
|
||||||
private boolean isIdle;
|
private boolean isIdle;
|
||||||
|
|
||||||
private TrackRecordingServiceBinder binder = new TrackRecordingServiceBinder(this);
|
private TrackRecordingServiceBinder binder = new TrackRecordingServiceBinder(this);
|
||||||
@@ -366,8 +366,8 @@ public class TrackRecordingService extends Service {
|
|||||||
track.getTrackStatistics().setStopTime_ms(System.currentTimeMillis());
|
track.getTrackStatistics().setStopTime_ms(System.currentTimeMillis());
|
||||||
trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics());
|
trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics());
|
||||||
|
|
||||||
insertTrackPoint(track, TrackPoint.createPause(), null);
|
insertTrackPoint(track, TrackPoint.createPause());
|
||||||
insertTrackPoint(track, TrackPoint.createResume(), null);
|
insertTrackPoint(track, TrackPoint.createResume());
|
||||||
|
|
||||||
// Update shared preferences.
|
// Update shared preferences.
|
||||||
updateRecordingState(trackId, false);
|
updateRecordingState(trackId, false);
|
||||||
@@ -394,14 +394,12 @@ public class TrackRecordingService extends Service {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update shared preferences
|
updateRecordingState(recordingTrackId, false);
|
||||||
recordingTrackPaused = false;
|
|
||||||
PreferencesUtils.setBoolean(this, R.string.recording_track_paused_key, false);
|
|
||||||
|
|
||||||
// Update database
|
// Update database
|
||||||
Track track = contentProviderUtils.getTrack(recordingTrackId);
|
Track track = contentProviderUtils.getTrack(recordingTrackId);
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
insertTrackPoint(track, TrackPoint.createResume(), null);
|
insertTrackPoint(track, TrackPoint.createResume());
|
||||||
}
|
}
|
||||||
|
|
||||||
startRecording();
|
startRecording();
|
||||||
@@ -415,7 +413,6 @@ public class TrackRecordingService extends Service {
|
|||||||
remoteSensorManager = new BluetoothRemoteSensorManager(this);
|
remoteSensorManager = new BluetoothRemoteSensorManager(this);
|
||||||
remoteSensorManager.start();
|
remoteSensorManager.start();
|
||||||
lastTrackPoint = null;
|
lastTrackPoint = null;
|
||||||
currentSegmentHasLocation = false;
|
|
||||||
isIdle = false;
|
isIdle = false;
|
||||||
|
|
||||||
startGps();
|
startGps();
|
||||||
@@ -444,22 +441,21 @@ public class TrackRecordingService extends Service {
|
|||||||
|
|
||||||
// Need to remember the recordingTrackId before setting it to -1L
|
// Need to remember the recordingTrackId before setting it to -1L
|
||||||
long trackId = recordingTrackId;
|
long trackId = recordingTrackId;
|
||||||
boolean paused = recordingTrackPaused;
|
boolean wasPaused = recordingTrackPaused;
|
||||||
|
|
||||||
// Update shared preferences
|
|
||||||
updateRecordingState(PreferencesUtils.RECORDING_TRACK_ID_DEFAULT, true);
|
updateRecordingState(PreferencesUtils.RECORDING_TRACK_ID_DEFAULT, true);
|
||||||
|
|
||||||
// Update database
|
// Update database
|
||||||
Track track = contentProviderUtils.getTrack(trackId);
|
Track track = contentProviderUtils.getTrack(trackId);
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
// If not paused, add the last location
|
// If not wasPaused, add the last location
|
||||||
if (!paused) {
|
if (!wasPaused) {
|
||||||
if (lastTrackPoint != null) {
|
if (lastTrackPoint != null) {
|
||||||
insertTrackPoint(track, lastTrackPoint, getLastValidTrackPointInCurrentSegment(trackId));
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the recording track time
|
// Update the recording track time
|
||||||
updateRecordingTrack(track);
|
updateTrackTotalTime(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
String trackName = TrackNameUtils.getTrackName(this, trackId, track.getTrackStatistics().getStartTime_ms());
|
String trackName = TrackNameUtils.getTrackName(this, trackId, track.getTrackStatistics().getStartTime_ms());
|
||||||
@@ -477,16 +473,14 @@ public class TrackRecordingService extends Service {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update shared preferences
|
updateRecordingState(recordingTrackId, true);
|
||||||
recordingTrackPaused = true;
|
|
||||||
PreferencesUtils.setBoolean(this, R.string.recording_track_paused_key, true);
|
|
||||||
|
|
||||||
// Update database
|
// Update database
|
||||||
Track track = contentProviderUtils.getTrack(recordingTrackId);
|
Track track = contentProviderUtils.getTrack(recordingTrackId);
|
||||||
if (track != null) {
|
if (track != null) {
|
||||||
insertTrackPoint(track, lastTrackPoint, getLastValidTrackPointInCurrentSegment(track.getId()));
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
|
|
||||||
insertTrackPoint(track, TrackPoint.createPause(), null);
|
insertTrackPoint(track, TrackPoint.createPause());
|
||||||
}
|
}
|
||||||
|
|
||||||
endRecording(false);
|
endRecording(false);
|
||||||
@@ -536,14 +530,19 @@ public class TrackRecordingService extends Service {
|
|||||||
* @return the location or null
|
* @return the location or null
|
||||||
*/
|
*/
|
||||||
private TrackPoint getLastValidTrackPointInCurrentSegment(long trackId) {
|
private TrackPoint getLastValidTrackPointInCurrentSegment(long trackId) {
|
||||||
if (!currentSegmentHasLocation) {
|
if (!currentSegmentHasTrackPoint()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return contentProviderUtils.getLastValidTrackPoint(trackId);
|
return contentProviderUtils.getLastValidTrackPoint(trackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean currentSegmentHasTrackPoint() {
|
||||||
|
return lastTrackPoint != null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the recording states.
|
* Updates the recording states.
|
||||||
|
* This will inform subscribed {@link OnSharedPreferenceChangeListener}.
|
||||||
*
|
*
|
||||||
* @param trackId the recording track id
|
* @param trackId the recording track id
|
||||||
* @param paused true if the recording is paused
|
* @param paused true if the recording is paused
|
||||||
@@ -586,7 +585,7 @@ public class TrackRecordingService extends Service {
|
|||||||
TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(track.getId());
|
TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(track.getId());
|
||||||
long idleTime = 0L;
|
long idleTime = 0L;
|
||||||
if (TrackPointUtils.after(trackPoint, lastValidTrackPoint)) {
|
if (TrackPointUtils.after(trackPoint, lastValidTrackPoint)) {
|
||||||
idleTime = trackPoint.getTime() - lastValidTrackPoint.getLocation().getTime();
|
idleTime = trackPoint.getTime() - lastValidTrackPoint.getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
locationListenerPolicy.updateIdleTime(idleTime);
|
locationListenerPolicy.updateIdleTime(idleTime);
|
||||||
@@ -594,27 +593,29 @@ public class TrackRecordingService extends Service {
|
|||||||
registerLocationListener();
|
registerLocationListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Storing trackPoint
|
||||||
|
|
||||||
// Always insert the first segment location
|
// Always insert the first segment location
|
||||||
if (!currentSegmentHasLocation) {
|
if (!currentSegmentHasTrackPoint()) {
|
||||||
insertTrackPoint(track, trackPoint, null);
|
insertTrackPoint(track, trackPoint);
|
||||||
currentSegmentHasLocation = true;
|
|
||||||
lastTrackPoint = trackPoint;
|
lastTrackPoint = trackPoint;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!LocationUtils.isValidLocation(lastValidTrackPoint.getLocation())) {
|
if (!LocationUtils.isValidLocation(lastValidTrackPoint.getLocation())) {
|
||||||
|
// For some reason the previous first trackPoint was not stored, but currentSegmentHasLocation set true.
|
||||||
// Should not happen. The current segment should have a location. Just insert the current location.
|
// Should not happen. The current segment should have a location. Just insert the current location.
|
||||||
insertTrackPoint(track, trackPoint, null);
|
insertTrackPoint(track, trackPoint);
|
||||||
lastTrackPoint = trackPoint;
|
lastTrackPoint = trackPoint;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double distanceToLastTrackLocation = trackPoint.distanceTo(lastValidTrackPoint);
|
double distanceToLastTrackLocation = trackPoint.distanceTo(lastValidTrackPoint);
|
||||||
if (distanceToLastTrackLocation > maxRecordingDistance) {
|
if (distanceToLastTrackLocation > maxRecordingDistance) {
|
||||||
insertTrackPoint(track, lastTrackPoint, lastValidTrackPoint);
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
insertTrackPoint(track, TrackPoint.createPause(), null);
|
insertTrackPoint(track, TrackPoint.createPause());
|
||||||
|
|
||||||
insertTrackPoint(track, trackPoint, null);
|
insertTrackPoint(track, trackPoint);
|
||||||
isIdle = false;
|
isIdle = false;
|
||||||
|
|
||||||
lastTrackPoint = trackPoint;
|
lastTrackPoint = trackPoint;
|
||||||
@@ -622,8 +623,8 @@ public class TrackRecordingService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (trackPoint.getSensorDataSet() != null || distanceToLastTrackLocation >= recordingDistanceInterval) {
|
if (trackPoint.getSensorDataSet() != null || distanceToLastTrackLocation >= recordingDistanceInterval) {
|
||||||
insertTrackPoint(track, lastTrackPoint, lastValidTrackPoint);
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
insertTrackPoint(track, trackPoint, null);
|
insertTrackPoint(track, trackPoint);
|
||||||
isIdle = false;
|
isIdle = false;
|
||||||
|
|
||||||
lastTrackPoint = trackPoint;
|
lastTrackPoint = trackPoint;
|
||||||
@@ -631,8 +632,8 @@ public class TrackRecordingService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isIdle && !TrackPointUtils.isMoving(trackPoint)) {
|
if (!isIdle && !TrackPointUtils.isMoving(trackPoint)) {
|
||||||
insertTrackPoint(track, lastTrackPoint, lastValidTrackPoint);
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
insertTrackPoint(track, trackPoint, null);
|
insertTrackPoint(track, trackPoint);
|
||||||
isIdle = true;
|
isIdle = true;
|
||||||
|
|
||||||
lastTrackPoint = trackPoint;
|
lastTrackPoint = trackPoint;
|
||||||
@@ -640,8 +641,8 @@ public class TrackRecordingService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isIdle && TrackPointUtils.isMoving(trackPoint)) {
|
if (isIdle && TrackPointUtils.isMoving(trackPoint)) {
|
||||||
insertTrackPoint(track, lastTrackPoint, lastValidTrackPoint);
|
insertTrackPointIfNewer(track, lastTrackPoint);
|
||||||
insertTrackPoint(track, trackPoint, null);
|
insertTrackPoint(track, trackPoint);
|
||||||
isIdle = false;
|
isIdle = false;
|
||||||
|
|
||||||
lastTrackPoint = trackPoint;
|
lastTrackPoint = trackPoint;
|
||||||
@@ -653,23 +654,33 @@ public class TrackRecordingService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts a trackPoint.
|
* Inserts a trackPoint if this trackPoint is different than lastValidTrackPoint.
|
||||||
*
|
*
|
||||||
* @param track the track
|
* @param track the track
|
||||||
* @param trackPoint the trackPoint
|
* @param trackPoint the trackPoint
|
||||||
* @param lastValidTrackPoint the last valid track point, can be null
|
|
||||||
*/
|
*/
|
||||||
private void insertTrackPoint(@NonNull Track track, @NonNull TrackPoint trackPoint, TrackPoint lastValidTrackPoint) {
|
private void insertTrackPointIfNewer(@NonNull Track track, @NonNull TrackPoint trackPoint) {
|
||||||
|
TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(track.getId());
|
||||||
if (TrackPointUtils.equalTime(trackPoint, lastValidTrackPoint)) {
|
if (TrackPointUtils.equalTime(trackPoint, lastValidTrackPoint)) {
|
||||||
// Do not insert if inserted already
|
// Do not insert if inserted already
|
||||||
Log.w(TAG, "Ignore insertTrackPoint. trackPoint time same as last valid track point time.");
|
Log.w(TAG, "Ignore insertTrackPoint. trackPoint time same as last valid track point time.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
insertTrackPoint(track, trackPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts a trackPoint.
|
||||||
|
*
|
||||||
|
* @param track the track
|
||||||
|
* @param trackPoint the trackPoint
|
||||||
|
*/
|
||||||
|
private void insertTrackPoint(@NonNull Track track, @NonNull TrackPoint trackPoint) {
|
||||||
try {
|
try {
|
||||||
contentProviderUtils.insertTrackPoint(trackPoint, track.getId());
|
contentProviderUtils.insertTrackPoint(trackPoint, track.getId());
|
||||||
trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
|
trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
|
||||||
updateRecordingTrack(track);
|
updateTrackTotalTime(track);
|
||||||
} 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).
|
||||||
@@ -680,12 +691,13 @@ public class TrackRecordingService extends Service {
|
|||||||
voiceExecutor.update();
|
voiceExecutor.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the recording track time.
|
* Updates the recording track time.
|
||||||
*
|
*
|
||||||
* @param track the track
|
* @param track the track
|
||||||
*/
|
*/
|
||||||
private void updateRecordingTrack(Track track) {
|
private void updateTrackTotalTime(Track track) {
|
||||||
trackStatisticsUpdater.updateTime(System.currentTimeMillis());
|
trackStatisticsUpdater.updateTime(System.currentTimeMillis());
|
||||||
track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics());
|
track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics());
|
||||||
contentProviderUtils.updateTrack(track);
|
contentProviderUtils.updateTrack(track);
|
||||||
|
|||||||
Reference in New Issue
Block a user