diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java index d29e5ebbcf..a3ed9ba28b 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java @@ -33,7 +33,7 @@ public void handlePayload(SensorManager.SensorDataChangedObserver observer, Serv AtmosphericPressure value = parseEnvironmentalSensing(characteristic); if (value == null) return; - observer.onChange(new Raw<>(value)); + observer.onChange(new Raw<>(observer.getNow(), value)); } /** diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java index 2e8d8e48c7..9fee7dcca0 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java @@ -33,7 +33,7 @@ public void handlePayload(SensorManager.SensorDataChangedObserver observer, Serv if (serviceMeasurementUUID.equals(BluetoothHandlerManagerCyclingPower.CYCLING_POWER)) { BluetoothHandlerManagerCyclingPower.Data data = BluetoothHandlerManagerCyclingPower.parseCyclingPower(characteristic); if (data != null && data.crank() != null) { - observer.onChange(new Raw<>(data.crank())); + observer.onChange(new Raw<>(observer.getNow(), data.crank())); } return; } @@ -42,7 +42,7 @@ public void handlePayload(SensorManager.SensorDataChangedObserver observer, Serv Pair data = BluetoothHandlerCyclingDistanceSpeed.parseCyclingCrankAndWheel(address, sensorName, characteristic); if (data != null && data.second != null) { - observer.onChange(new Raw<>(data.second)); + observer.onChange(new Raw<>(observer.getNow(), data.second)); } return; } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingDistanceSpeed.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingDistanceSpeed.java index f3d6ec9a4f..28219799fa 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingDistanceSpeed.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingDistanceSpeed.java @@ -34,7 +34,7 @@ public AggregatorCyclingDistanceSpeed createEmptySensorData(String address, Stri public void handlePayload(SensorManager.SensorDataChangedObserver observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { Pair data = parseCyclingCrankAndWheel(address, sensorName, characteristic); if (data.first != null) { - observer.onChange(new Raw<>(data.first)); + observer.onChange(new Raw<>(observer.getNow(), data.first)); } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerCyclingPower.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerCyclingPower.java index 275f8dc600..8105a402be 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerCyclingPower.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerCyclingPower.java @@ -35,7 +35,7 @@ public void handlePayload(SensorManager.SensorDataChangedObserver observer, @Non Data cyclingPower = parseCyclingPower(characteristic); if (cyclingPower != null) { - observer.onChange(new Raw<>(cyclingPower)); + observer.onChange(new Raw<>(observer.getNow(), cyclingPower)); } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerHeartRate.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerHeartRate.java index a9ff6e832b..76345b18f7 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerHeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerManagerHeartRate.java @@ -45,7 +45,7 @@ public void handlePayload(SensorManager.SensorDataChangedObserver observer, @Non HeartRate heartRate = parseHeartRate(characteristic); if (heartRate != null) { - observer.onChange(new Raw<>(heartRate)); + observer.onChange(new Raw<>(observer.getNow(), heartRate)); } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java index 962d43fbf2..fd147845ce 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java @@ -36,7 +36,7 @@ public AggregatorRunning createEmptySensorData(String address, String name) { @Override public void handlePayload(SensorManager.SensorDataChangedObserver observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { Data data = parseRunningSpeedAndCadence(sensorName, characteristic); - observer.onChange(new Raw<>(data)); + observer.onChange(new Raw<>(observer.getNow(), data)); } @VisibleForTesting diff --git a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java index 8a2908b24f..3f8b40b98e 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java @@ -8,6 +8,8 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import java.time.Instant; + import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.sensors.sensorData.Aggregator; import de.dennisguse.opentracks.sensors.sensorData.Raw; @@ -47,6 +49,11 @@ public void onDisconnect(Aggregator aggregator) { public void onRemove(Aggregator aggregator) { sensorDataSet.remove(aggregator); } + + @Override + public Instant getNow() { + return observer.createNow(); + } }; private BluetoothRemoteSensorManager bluetoothSensorManager; @@ -138,5 +145,7 @@ public interface SensorDataChangedObserver { void onDisconnect(Aggregator sensorData); void onRemove(Aggregator sensorData); + + Instant getNow(); } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java b/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java index 74ef061f8c..0929e875cf 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java @@ -22,7 +22,7 @@ public class BarometerInternal implements Driver { private static final int SAMPLING_PERIOD = (int) TimeUnit.SECONDS.toMicros(5); - private final SensorManager.SensorDataChangedObserver listener; + private final SensorManager.SensorDataChangedObserver observer; private Context context; @@ -34,7 +34,7 @@ public void onSensorChanged(SensorEvent event) { return; } - listener.onChange(new Raw<>(AtmosphericPressure.ofHPA(event.values[0]))); + observer.onChange(new Raw<>(observer.getNow(), AtmosphericPressure.ofHPA(event.values[0]))); } @Override @@ -43,8 +43,8 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; - public BarometerInternal(@NonNull SensorManager.SensorDataChangedObserver listener) { - this.listener = listener; + public BarometerInternal(@NonNull SensorManager.SensorDataChangedObserver observer) { + this.observer = observer; } @@ -60,7 +60,7 @@ public void connect(Context context, Handler handler, String addressIgnored) { if (sensorManager.registerListener(sensorEventListener, pressureSensor, SAMPLING_PERIOD, handler)) { this.context = context; - listener.onConnect(new AggregatorBarometer("internal", null)); + observer.onConnect(new AggregatorBarometer("internal", null)); return; } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java index 125d2268fc..fd8b2b67cb 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java @@ -6,11 +6,11 @@ import java.time.Instant; public record Raw( - @NonNull T value, - - @NonNull Instant time + @NonNull Instant time, + @NonNull T value ) { + @Deprecated public Raw(@NonNull T value) { - this(value, Instant.now()); //TODO We should be using the MonotonicClock + this(Instant.now(), value); //TODO We should be using the MonotonicClock } } diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java index 8892a53f58..38fea710c0 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java @@ -37,7 +37,7 @@ public class GPSManager implements SensorConnector, LocationListenerCompat, GpsS private TrackPointCreator trackPointCreator; - private SensorManager.SensorDataChangedObserver listener; + private SensorManager.SensorDataChangedObserver observer; private Context context; private Handler handler; @@ -46,9 +46,9 @@ public class GPSManager implements SensorConnector, LocationListenerCompat, GpsS private Duration gpsInterval; private Distance thresholdHorizontalAccuracy; - public GPSManager(TrackPointCreator trackPointCreator, SensorManager.SensorDataChangedObserver listener) { + public GPSManager(TrackPointCreator trackPointCreator, SensorManager.SensorDataChangedObserver observer) { this.trackPointCreator = trackPointCreator; - this.listener = listener; + this.observer = observer; } public void start(@NonNull Context context, @NonNull Handler handler) { @@ -60,7 +60,7 @@ public void start(@NonNull Context context, @NonNull Handler handler) { gpsStatusManager = new GpsStatusManager(context, this, handler); locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - listener.onConnect(new AggregatorGPS("internal")); + observer.onConnect(new AggregatorGPS("internal")); registerLocationListener(); gpsStatusManager.start(); @@ -82,8 +82,8 @@ public void stop(Context context) { gpsStatusManager.stop(); gpsStatusManager = null; - listener.onDisconnect(new AggregatorGPS("internal")); - listener = null; + observer.onDisconnect(new AggregatorGPS("internal")); + observer = null; trackPointCreator = null; } @@ -139,7 +139,7 @@ public void onLocationChanged(@NonNull Location location) { return; } - listener.onChange(new Raw<>(Position.of(location))); + observer.onChange(new Raw<>(observer.getNow(), Position.of(location))); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java index 6e521404ad..e015247069 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -124,8 +124,7 @@ public Pair createCurrentTrackPoint(@Nullable TrackPo return new Pair<>(currentTrackPoint, sensorDataSet); } - @VisibleForTesting - Instant createNow() { + public Instant createNow() { return Instant.now(clock); }