TrackRecordingService: simplify altitude and remoteSensor handling.

This commit is contained in:
Dennis Guse
2021-07-03 12:20:27 +02:00
parent 8991d7bf0d
commit c07d6124f9
5 changed files with 134 additions and 85 deletions
@@ -363,11 +363,11 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
remoteSensorManager = new BluetoothRemoteSensorManager(this);
remoteSensorManager.start();
handler.postDelayed(updateRecordingData, RECORDING_DATA_UPDATE_INTERVAL.toMillis());
altitudeSumManager = new AltitudeSumManager();
altitudeSumManager.start(this);
handler.postDelayed(updateRecordingData, RECORDING_DATA_UPDATE_INTERVAL.toMillis());
lastTrackPoint = null;
isIdle = false;
@@ -528,7 +528,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
return;
}
fillWithSensorDataSet(trackPoint);
remoteSensorManager.fill(trackPoint);
correctAltitude(trackPoint);
@@ -649,16 +649,14 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
*/
private void insertTrackPoint(@NonNull Track track, @NonNull TrackPoint trackPoint) {
try {
if (altitudeSumManager != null) {
trackPoint.setAltitudeGain(getAltitudeGain_m());
trackPoint.setAltitudeLoss(getAltitudeLoss_m());
if (!TrackPoint.Type.SEGMENT_START_MANUAL.equals(trackPoint.getType())) {
altitudeSumManager.fill(trackPoint);
altitudeSumManager.reset();
}
fillWithSensorDataSet(trackPoint);
if (remoteSensorManager != null) {
remoteSensorManager.fill(trackPoint);
remoteSensorManager.reset();
}
contentProviderUtils.insertTrackPoint(trackPoint, track.getId());
trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics());
@@ -674,44 +672,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
voiceExecutor.update();
}
private SensorDataSet fillWithSensorDataSet(TrackPoint trackPoint) {
if (remoteSensorManager == null) {
return null;
}
SensorDataSet sensorData = remoteSensorManager.getSensorData(); //TODO Should return a copy of SensorDataSet
if (sensorData == null) {
return null;
}
if (trackPoint != null) {
sensorData.fillTrackPoint(trackPoint);
}
return sensorData;
}
/**
* Returns the relative altitude gain (since last trackpoint).
*/
private Float getAltitudeGain_m() {
if (altitudeSumManager == null || !altitudeSumManager.isConnected()) {
return null;
}
return altitudeSumManager.getAltitudeGain_m();
}
/**
* Returns the relative altitude loss (since last trackpoint).
*/
private Float getAltitudeLoss_m() {
if (altitudeSumManager == null || !altitudeSumManager.isConnected()) {
return null;
}
return altitudeSumManager.getAltitudeLoss_m();
}
private void showNotification(boolean isGpsStarted) {
if (isRecording()) {
Intent intent = IntentUtils.newIntent(this, TrackRecordingActivity.class)
@@ -741,13 +701,17 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
}
}
// This is used to modify the state of this service while testing; must be called after startNewTrack().
@Deprecated
@VisibleForTesting
public void setRemoteSensorManager(BluetoothRemoteSensorManager remoteSensorManager) {
public void setRemoteSensorManager(@NonNull BluetoothRemoteSensorManager remoteSensorManager) {
this.remoteSensorManager = remoteSensorManager;
}
// This is used to modify the state of this service while testing; must be called after startNewTrack().
@Deprecated
@VisibleForTesting
public void setAltitudeSumManager(AltitudeSumManager altitudeSumManager) {
public void setAltitudeSumManager(@NonNull AltitudeSumManager altitudeSumManager) {
this.altitudeSumManager = altitudeSumManager;
}
@@ -778,15 +742,14 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
tmpLastTrackPoint.setLongitude(lastTrackPoint.getLongitude());
tmpLastTrackPoint.setLatitude(lastTrackPoint.getLatitude());
}
tmpLastTrackPoint.setAltitudeGain(getAltitudeGain_m());
tmpLastTrackPoint.setAltitudeLoss(getAltitudeLoss_m());
SensorDataSet sensorDataSet = fillWithSensorDataSet(tmpLastTrackPoint);
altitudeSumManager.fill(tmpLastTrackPoint);
remoteSensorManager.fill(tmpLastTrackPoint);
tmpTrackStatisticsUpdater.addTrackPoint(tmpLastTrackPoint, recordingDistanceInterval);
track.setTrackStatistics(tmpTrackStatisticsUpdater.getTrackStatistics());
recordingDataObservable.postValue(new RecordingData(track, tmpLastTrackPoint, sensorDataSet));
recordingDataObservable.postValue(new RecordingData(track, tmpLastTrackPoint, remoteSensorManager.getSensorDataSet()));
}
public LiveData<RecordingStatus> getRecordingStatusObservable() {
@@ -7,9 +7,11 @@ import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import de.dennisguse.opentracks.content.data.TrackPoint;
import de.dennisguse.opentracks.util.PressureSensorUtils;
/**
@@ -62,6 +64,11 @@ public class AltitudeSumManager implements SensorEventListener {
this.isConnected = isConnected;
}
public void fill(@NonNull TrackPoint trackPoint) {
trackPoint.setAltitudeGain(altitudeGain_m);
trackPoint.setAltitudeLoss(altitudeLoss_m);
}
public @Nullable
Float getAltitudeGain_m() {
return isConnected ? altitudeGain_m : null;
@@ -22,10 +22,13 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import androidx.annotation.NonNull;
import java.time.Duration;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.Distance;
import de.dennisguse.opentracks.content.data.TrackPoint;
import de.dennisguse.opentracks.content.sensor.SensorData;
import de.dennisguse.opentracks.content.sensor.SensorDataCycling;
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
@@ -158,7 +161,12 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager.
}
}
public SensorDataSet getSensorData() {
public void fill(@NonNull TrackPoint trackPoint) {
sensorDataSet.fillTrackPoint(trackPoint);
}
public SensorDataSet getSensorDataSet() {
// TODO Should return a copy.
return sensorDataSet;
}