forked from upstream-mirrors/OpenTracks
@@ -40,6 +40,9 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
private TrackStatisticsUpdater trackStatisticsUpdater;
|
private TrackStatisticsUpdater trackStatisticsUpdater;
|
||||||
|
|
||||||
private TrackPoint lastTrackPoint;
|
private TrackPoint lastTrackPoint;
|
||||||
|
private TrackPoint lastTrackPointUIWithSpeed;
|
||||||
|
private TrackPoint lastTrackPointUIWithAltitude;
|
||||||
|
|
||||||
private TrackPoint lastStoredTrackPoint;
|
private TrackPoint lastStoredTrackPoint;
|
||||||
private TrackPoint lastStoredTrackPointWithLocation;
|
private TrackPoint lastStoredTrackPointWithLocation;
|
||||||
|
|
||||||
@@ -91,17 +94,13 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics());
|
trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics());
|
||||||
onNewTrackPoint(trackPointCreator.createSegmentStartManual());
|
onNewTrackPoint(trackPointCreator.createSegmentStartManual());
|
||||||
|
|
||||||
lastTrackPoint = null;
|
reset();
|
||||||
lastStoredTrackPoint = null;
|
|
||||||
lastStoredTrackPointWithLocation = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pause(TrackPointCreator trackPointCreator) {
|
void pause(TrackPointCreator trackPointCreator) {
|
||||||
insertTrackPoint(trackPointCreator.createSegmentEnd());
|
insertTrackPoint(trackPointCreator.createSegmentEnd());
|
||||||
|
|
||||||
lastTrackPoint = null;
|
reset();
|
||||||
lastStoredTrackPoint = null;
|
|
||||||
lastStoredTrackPointWithLocation = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void end(TrackPointCreator trackPointCreator) {
|
void end(TrackPointCreator trackPointCreator) {
|
||||||
@@ -111,17 +110,15 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
trackId = null;
|
trackId = null;
|
||||||
trackStatisticsUpdater = null;
|
trackStatisticsUpdater = null;
|
||||||
|
|
||||||
lastTrackPoint = null;
|
reset();
|
||||||
lastStoredTrackPoint = null;
|
|
||||||
lastStoredTrackPointWithLocation = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<Track, Pair<TrackPoint, SensorDataSet>> get(TrackPointCreator trackPointCreator) {
|
Pair<Track, Pair<TrackPoint, SensorDataSet>> getDataForUI(TrackPointCreator trackPointCreator) {
|
||||||
if (trackPointCreator == null) {
|
if (trackPointCreator == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater);
|
TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater);
|
||||||
Pair<TrackPoint, SensorDataSet> current = trackPointCreator.createCurrentTrackPoint(lastTrackPoint);
|
Pair<TrackPoint, SensorDataSet> current = trackPointCreator.createCurrentTrackPoint(lastTrackPointUIWithSpeed, lastTrackPointUIWithAltitude, lastStoredTrackPointWithLocation);
|
||||||
|
|
||||||
tmpTrackStatisticsUpdater.addTrackPoint(current.first);
|
tmpTrackStatisticsUpdater.addTrackPoint(current.first);
|
||||||
|
|
||||||
@@ -165,6 +162,12 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
* @return TrackPoint was stored?
|
* @return TrackPoint was stored?
|
||||||
*/
|
*/
|
||||||
boolean onNewTrackPoint(@NonNull TrackPoint trackPoint) {
|
boolean onNewTrackPoint(@NonNull TrackPoint trackPoint) {
|
||||||
|
if (trackPoint.hasSpeed()) {
|
||||||
|
lastTrackPointUIWithSpeed = trackPoint;
|
||||||
|
}
|
||||||
|
if (trackPoint.hasAltitude()) {
|
||||||
|
lastTrackPointUIWithAltitude = trackPoint;
|
||||||
|
}
|
||||||
//Storing trackPoint
|
//Storing trackPoint
|
||||||
|
|
||||||
// Always insert the first segment location
|
// Always insert the first segment location
|
||||||
@@ -253,6 +256,15 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void reset() {
|
||||||
|
lastTrackPoint = null;
|
||||||
|
lastTrackPointUIWithSpeed = null;
|
||||||
|
lastTrackPointUIWithAltitude = null;
|
||||||
|
|
||||||
|
lastStoredTrackPoint = null;
|
||||||
|
lastStoredTrackPointWithLocation = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) {
|
if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
|
|||||||
|
|
||||||
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
||||||
|
|
||||||
private static final Duration RECORDING_DATA_UPDATE_INTERVAL = Duration.ofSeconds(1);
|
private static final Duration RECORDING_DATA_UPDATE_INTERVAL = Duration.ofMillis(100);
|
||||||
|
|
||||||
public static final RecordingStatus STATUS_DEFAULT = RecordingStatus.notRecording();
|
public static final RecordingStatus STATUS_DEFAULT = RecordingStatus.notRecording();
|
||||||
public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null);
|
public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null);
|
||||||
@@ -367,7 +367,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.get(trackPointCreator);
|
Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.getDataForUI(trackPointCreator);
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
|
Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
|
|||||||
private GpsStatus gpsStatus;
|
private GpsStatus gpsStatus;
|
||||||
private Duration gpsInterval;
|
private Duration gpsInterval;
|
||||||
private Distance thresholdHorizontalAccuracy;
|
private Distance thresholdHorizontalAccuracy;
|
||||||
private TrackPoint lastTrackPoint;
|
|
||||||
|
|
||||||
public GPSHandler(TrackPointCreator trackPointCreator) {
|
public GPSHandler(TrackPointCreator trackPointCreator) {
|
||||||
this.trackPointCreator = trackPointCreator;
|
this.trackPointCreator = trackPointCreator;
|
||||||
@@ -53,7 +52,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
|
|||||||
@SuppressWarnings({"MissingPermission"})
|
@SuppressWarnings({"MissingPermission"})
|
||||||
//TODO upgrade to AGP7.0.0/API31 started complaining about removeUpdates.
|
//TODO upgrade to AGP7.0.0/API31 started complaining about removeUpdates.
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
lastTrackPoint = null;
|
|
||||||
if (locationManager != null && context != null) {
|
if (locationManager != null && context != null) {
|
||||||
if (PermissionUtils.hasGPSPermission(context)) {
|
if (PermissionUtils.hasGPSPermission(context)) {
|
||||||
locationManager.removeUpdates(this);
|
locationManager.removeUpdates(this);
|
||||||
@@ -129,7 +127,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastTrackPoint = trackPoint;
|
|
||||||
trackPointCreator.onNewTrackPoint(trackPoint);
|
trackPointCreator.onNewTrackPoint(trackPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,10 +162,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackPoint getLastTrackPoint() {
|
|
||||||
return lastTrackPoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
Distance getThresholdHorizontalAccuracy() {
|
Distance getThresholdHorizontalAccuracy() {
|
||||||
return thresholdHorizontalAccuracy;
|
return thresholdHorizontalAccuracy;
|
||||||
}
|
}
|
||||||
@@ -177,8 +170,4 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
|
|||||||
public void onGpsStatusChanged(GpsStatusValue prevStatus, GpsStatusValue currentStatus) {
|
public void onGpsStatusChanged(GpsStatusValue prevStatus, GpsStatusValue currentStatus) {
|
||||||
trackPointCreator.sendGpsStatus(currentStatus);
|
trackPointCreator.sendGpsStatus(currentStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset() {
|
|
||||||
lastTrackPoint = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat
|
|||||||
}
|
}
|
||||||
remoteSensorManager.reset();
|
remoteSensorManager.reset();
|
||||||
altitudeSumManager.reset();
|
altitudeSumManager.reset();
|
||||||
gpsHandler.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SensorDataSet fill(TrackPoint trackPoint) {
|
private SensorDataSet fill(TrackPoint trackPoint) {
|
||||||
@@ -136,22 +135,22 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat
|
|||||||
return segmentEnd;
|
return segmentEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastValidTrackPoint) {
|
public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastTrackPointUISpeed, @Nullable TrackPoint lastTrackPointUIAltitude, @Nullable TrackPoint lastStoredTrackPointWithLocation) {
|
||||||
TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow());
|
TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow());
|
||||||
TrackPoint lastTrackPoint = gpsHandler.getLastTrackPoint();
|
|
||||||
|
|
||||||
if (lastTrackPoint != null && lastTrackPoint.hasLocation()) {
|
if (lastTrackPointUISpeed != null) {
|
||||||
currentTrackPoint.setSpeed(lastTrackPoint.getSpeed());
|
currentTrackPoint.setSpeed(lastTrackPointUISpeed.getSpeed());
|
||||||
currentTrackPoint.setAltitude(lastTrackPoint.getAltitude());
|
|
||||||
if (lastTrackPoint.hasBearing()) {
|
|
||||||
currentTrackPoint.setBearing(lastTrackPoint.getBearing());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (lastValidTrackPoint != null && lastValidTrackPoint.hasLocation()) {
|
if (lastTrackPointUIAltitude != null) {
|
||||||
|
currentTrackPoint.setAltitude(lastTrackPointUIAltitude.getAltitude());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastStoredTrackPointWithLocation != null && lastStoredTrackPointWithLocation.hasLocation()) {
|
||||||
//We are taking the coordinates from the last stored TrackPoint, so the distance is monotonously increasing.
|
//We are taking the coordinates from the last stored TrackPoint, so the distance is monotonously increasing.
|
||||||
currentTrackPoint.setLongitude(lastValidTrackPoint.getLongitude());
|
currentTrackPoint.setLongitude(lastStoredTrackPointWithLocation.getLongitude());
|
||||||
currentTrackPoint.setLatitude(lastValidTrackPoint.getLatitude());
|
currentTrackPoint.setLatitude(lastStoredTrackPointWithLocation.getLatitude());
|
||||||
}
|
}
|
||||||
|
|
||||||
SensorDataSet sensorDataSet = fill(currentTrackPoint);
|
SensorDataSet sensorDataSet = fill(currentTrackPoint);
|
||||||
|
|
||||||
return new Pair<>(currentTrackPoint, sensorDataSet);
|
return new Pair<>(currentTrackPoint, sensorDataSet);
|
||||||
|
|||||||
Reference in New Issue
Block a user