From 18ff96733e8f41e4ae5778f24249ccf0ad83777a Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 27 Jan 2026 17:59:08 +0100 Subject: [PATCH] Cleanup: moved Raw into Aggregator. Preparation for refactoring. --- .../io/file/importer/ExportImportTest.java | 5 ++- .../sensorData/AggregatorBarometerTest.java | 2 +- .../sensorData/SensorDataCyclingTest.java | 32 +++++++++---------- .../TrackRecordingServiceRecordingTest.java | 15 ++++----- .../BluetoothHandlerBarometricPressure.java | 3 +- .../BluetoothHandlerCyclingCadence.java | 5 ++- .../BluetoothHandlerCyclingDistanceSpeed.java | 11 ++++--- .../sensors/BluetoothHandlerCyclingPower.java | 7 ++-- .../sensors/BluetoothHandlerHeartRate.java | 7 ++-- ...luetoothHandlerRunningSpeedAndCadence.java | 5 +-- .../sensors/BluetoothHandlerTemperature.java | 3 +- .../opentracks/sensors/GpsManager.java | 6 ++-- .../opentracks/sensors/SensorManager.java | 28 ++++++++-------- .../sensors/driver/BarometerInternal.java | 3 +- .../sensors/sensorData/Aggregator.java | 13 ++++++-- .../opentracks/sensors/sensorData/Raw.java | 22 ------------- .../services/handlers/TrackPointCreator.java | 8 ++--- 17 files changed, 77 insertions(+), 98 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index 16c46d2e4..f35131938 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -75,7 +75,6 @@ import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpee import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower; import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate; import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; @@ -664,12 +663,12 @@ public class ExportImportTest { SensorManager sensorManager = trackPointCreator.getSensorManager(); AggregatorCyclingPower cyclingPower = new AggregatorCyclingPower("", ""); - cyclingPower.add(new Raw<>(trackPointCreator.createNow(), new BluetoothHandlerCyclingPower.Data(Power.of(power), null))); + cyclingPower.add(trackPointCreator.getNow(), new BluetoothHandlerCyclingPower.Data(Power.of(power), null)); sensorManager.add(cyclingPower); AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", ""); - avgHeartRate.add(new Raw<>(trackPointCreator.createNow(), HeartRate.of(heartRate))); + avgHeartRate.add(trackPointCreator.getNow(), HeartRate.of(heartRate)); sensorManager.add(avgHeartRate); AggregatorCyclingCadence cyclingCadence = new AggregatorCyclingCadence("", "") { diff --git a/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometerTest.java b/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometerTest.java index 01d929f3d..c3960161e 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometerTest.java @@ -11,7 +11,7 @@ public class AggregatorBarometerTest { private static void addSensorValue(AggregatorBarometer aggregatorBarometer, float[] values) { for (float f : values) { - aggregatorBarometer.add(new Raw<>(Instant.MIN, AtmosphericPressure.ofHPA(f))); + aggregatorBarometer.add(Instant.MIN, AtmosphericPressure.ofHPA(f)); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingTest.java b/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingTest.java index b317c718a..23d404b03 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingTest.java @@ -25,8 +25,8 @@ public class SensorDataCyclingTest { AggregatorCyclingCadence current = new AggregatorCyclingCadence("", ""); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 2048))); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024)); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 2048)); // then assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01); @@ -37,8 +37,8 @@ public class SensorDataCyclingTest { AggregatorCyclingCadence current = new AggregatorCyclingCadence("", ""); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 6184))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 8016))); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 6184)); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 8016)); // then assertEquals(33.53, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01); @@ -49,8 +49,8 @@ public class SensorDataCyclingTest { AggregatorCyclingCadence current = new AggregatorCyclingCadence("", ""); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 2048))); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024)); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 2048)); // then assertEquals(Cadence.of(0), current.getAggregatedValue(Instant.MIN)); @@ -62,8 +62,8 @@ public class SensorDataCyclingTest { AggregatorCyclingCadence current = new AggregatorCyclingCadence("", ""); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 1024))); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024)); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 1024)); // then assertFalse(current.hasReceivedData()); //TODO Cadence should be 0? @@ -74,8 +74,8 @@ public class SensorDataCyclingTest { AggregatorCyclingCadence current = new AggregatorCyclingCadence("", ""); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, UintUtils.UINT16_MAX - 1024))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 0))); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, UintUtils.UINT16_MAX - 1024)); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 0)); // then assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01); @@ -87,8 +87,8 @@ public class SensorDataCyclingTest { AggregatorCyclingCadence current = new AggregatorCyclingCadence("", ""); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(UintUtils.UINT32_MAX - 1, 1024))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(0, 2048))); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(UintUtils.UINT32_MAX - 1, 1024)); + current.add(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(0, 2048)); // then // TODO See #953 @@ -102,8 +102,8 @@ public class SensorDataCyclingTest { current.setWheelCircumference(Distance.ofMM(2150)); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(1, 6184))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(2, 8016))); + current.add(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(1, 6184)); + current.add(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(2, 8016)); // then assertEquals(2.15, current.getAggregatedValue(Instant.MIN).distance().toM(), 0.01); @@ -117,8 +117,8 @@ public class SensorDataCyclingTest { current.setWheelCircumference(Distance.ofMM(2000)); // when - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(UintUtils.UINT32_MAX - 1, 1024))); - current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(0, 2048))); + current.add(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(UintUtils.UINT32_MAX - 1, 1024)); + current.add(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(0, 2048)); // then diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java index 65c833770..3f98b55fa 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java @@ -49,7 +49,6 @@ import de.dennisguse.opentracks.sensors.SensorManager; import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer; import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate; import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; @@ -345,11 +344,11 @@ public class TrackRecordingServiceRecordingTest { trackPointCreator.setClock(sensor1); //Should be ignored - sensorManager.onChange(new Raw(sensor1, HeartRate.of(5))); + sensorManager.onChange(HeartRate.of(5)); String sensor3 = "2020-02-02T02:02:13Z"; trackPointCreator.setClock(sensor3); - sensorManager.onChange(new Raw(sensor3, HeartRate.of(7))); + sensorManager.onChange(HeartRate.of(7)); String stopTime = "2020-02-02T02:02:15Z"; trackPointCreator.setClock(stopTime); @@ -817,12 +816,12 @@ public class TrackRecordingServiceRecordingTest { String sensor1 = "2020-02-02T02:02:03Z"; trackPointCreator.setClock(sensor1); //Should be ignored - sensorManager.onChange(new Raw(sensor1, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(1), Distance.ZERO))); + sensorManager.onChange(new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(1), Distance.ZERO)); // when String sensor2 = "2020-02-02T02:02:04Z"; trackPointCreator.setClock(sensor2); - sensorManager.onChange(new Raw(sensor2, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(2), Distance.of(2)))); + sensorManager.onChange(new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(2), Distance.of(2))); // when String gps1 = "2020-02-02T02:02:05Z"; @@ -831,13 +830,13 @@ public class TrackRecordingServiceRecordingTest { // when String sensor3 = "2020-02-02T02:02:06Z"; trackPointCreator.setClock(sensor3); - sensorManager.onChange(new Raw(sensor3, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(3), Distance.of(12)))); + sensorManager.onChange(new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(3), Distance.of(12))); // when String sensor4 = "2020-02-02T02:02:07Z"; trackPointCreator.setClock(sensor4); //Should be ignored - sensorManager.onChange(new Raw(sensor4, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(4), Distance.of(14)))); + sensorManager.onChange(new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(4), Distance.of(14))); // when String gps2 = "2020-02-02T02:02:08Z"; @@ -847,7 +846,7 @@ public class TrackRecordingServiceRecordingTest { String sensor5 = "2020-02-02T02:02:10Z"; trackPointCreator.setClock(sensor5); //Should be ignored - sensorManager.onChange(new Raw(sensor5, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(5), Distance.of(16)))); + sensorManager.onChange(new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(5), Distance.of(16))); // when String gps3 = "2020-02-02T02:02:12Z"; diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java index 75868f03f..2ee719541 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java @@ -8,7 +8,6 @@ import java.util.UUID; import de.dennisguse.opentracks.data.models.AtmosphericPressure; import de.dennisguse.opentracks.sensors.sensorData.Aggregator; import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerBarometricPressure implements SensorHandlerInterface { @@ -33,7 +32,7 @@ public class BluetoothHandlerBarometricPressure implements SensorHandlerInterfac AtmosphericPressure value = parseEnvironmentalSensing(characteristic); if (value == null) return; - observer.onChange(new Raw<>(observer.getNow(), value)); + observer.onChange(value); } /** diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java index 98de00f94..9429bd8e9 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingCadence.java @@ -7,7 +7,6 @@ import android.util.Pair; import java.util.List; import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface { @@ -33,7 +32,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface { if (serviceMeasurementUUID.equals(BluetoothHandlerCyclingPower.CYCLING_POWER)) { BluetoothHandlerCyclingPower.Data data = BluetoothHandlerCyclingPower.parseCyclingPower(characteristic); if (data != null && data.crank() != null) { - observer.onChange(new Raw<>(observer.getNow(), data.crank())); + observer.onChange(data.crank()); } return; } @@ -42,7 +41,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface { Pair data = BluetoothHandlerCyclingDistanceSpeed.parseCyclingCrankAndWheel(address, sensorName, characteristic); if (data != null && data.second != null) { - observer.onChange(new Raw<>(observer.getNow(), data.second)); + observer.onChange(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 f7ae6a60e..d582545fb 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingDistanceSpeed.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingDistanceSpeed.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.UUID; import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterface { @@ -33,9 +32,10 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf @Override public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { Pair data = parseCyclingCrankAndWheel(address, sensorName, characteristic); - if (data.first != null) { - observer.onChange(new Raw<>(observer.getNow(), data.first)); - } + if (data == null) return; + if (data.first == null) return; + + observer.onChange(data.first); } @@ -78,5 +78,6 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf long wheelRevolutionsCount, // UINT32 int wheelRevolutionsTime // UINT16; 1/1024s - ) {} + ) { + } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingPower.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingPower.java index b78a7609b..586ae3f12 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingPower.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerCyclingPower.java @@ -10,7 +10,6 @@ import java.util.UUID; import de.dennisguse.opentracks.data.models.Power; import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerCyclingPower implements SensorHandlerInterface { @@ -34,9 +33,9 @@ public class BluetoothHandlerCyclingPower implements SensorHandlerInterface { public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { Data cyclingPower = parseCyclingPower(characteristic); - if (cyclingPower != null) { - observer.onChange(new Raw<>(observer.getNow(), cyclingPower)); - } + if (cyclingPower == null) return; + + observer.onChange(cyclingPower); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerHeartRate.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerHeartRate.java index e9c741ba9..59a8a2499 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerHeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerHeartRate.java @@ -10,7 +10,6 @@ import java.util.UUID; import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerHeartRate implements SensorHandlerInterface { @@ -44,9 +43,9 @@ public class BluetoothHandlerHeartRate implements SensorHandlerInterface { public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { HeartRate heartRate = parseHeartRate(characteristic); - if (heartRate != null) { - observer.onChange(new Raw<>(observer.getNow(), heartRate)); - } + if (heartRate == null) return; + + observer.onChange(heartRate); } @VisibleForTesting diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java index 3d9701b30..6e59ee920 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerRunningSpeedAndCadence.java @@ -12,7 +12,6 @@ import de.dennisguse.opentracks.data.models.Cadence; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInterface { @@ -36,7 +35,9 @@ public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInte @Override public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { Data data = parseRunningSpeedAndCadence(sensorName, characteristic); - observer.onChange(new Raw<>(observer.getNow(), data)); + if (data == null) return; + + observer.onChange(data); } @VisibleForTesting diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerTemperature.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerTemperature.java index 9625832e7..ddfd49a30 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerTemperature.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerTemperature.java @@ -10,7 +10,6 @@ import java.util.UUID; import de.dennisguse.opentracks.data.models.Temperature; import de.dennisguse.opentracks.sensors.sensorData.Aggregator; import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerTemperature implements SensorHandlerInterface { @@ -34,7 +33,7 @@ public class BluetoothHandlerTemperature implements SensorHandlerInterface { Temperature value = parseEnvironmentalSensing(characteristic); if (value == null) return; - observer.onChange(new Raw<>(observer.getNow(), value)); + observer.onChange(value); } /** diff --git a/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java b/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java index eceb62dda..98c71542e 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/GpsManager.java @@ -20,7 +20,6 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Position; import de.dennisguse.opentracks.sensors.sensorData.AggregatorGPS; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.PermissionRequester; @@ -32,6 +31,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS private static final String LOCATION_PROVIDER = LocationManager.GPS_PROVIDER; + //TODO Refactor to just pass information via SensorManager. private TrackPointCreator trackPointCreator; private SensorManager observer; @@ -123,7 +123,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS @Override public void onLocationChanged(@NonNull Location location) { // Send each update to the status; please note that this TrackPoint is not stored. - Position position = Position.of(location, trackPointCreator.createNow()); + Position position = Position.of(location, observer.getNow()); gpsStatusManager.onNewTrackPoint(position); if (!position.hasValidLocation()) { @@ -136,7 +136,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS return; } - observer.onChange(new Raw<>(observer.getNow(), position)); + observer.onChange(position); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java index da2d228fa..ad10f8da5 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java @@ -28,13 +28,13 @@ import de.dennisguse.opentracks.sensors.sensorData.AggregatorGPS; import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate; import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning; import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature; -import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorData; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.SystemUtils; +//TODO provide context and handler for different Managers (not passing via start(), but similar to getNow()). public class SensorManager implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = SensorManager.class.getSimpleName(); @@ -145,7 +145,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange } public Instant getNow() { - return observer.createNow(); + return observer.getNow(); } @VisibleForTesting @@ -225,53 +225,53 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange } @Deprecated - public void onChange(Raw data) { + public void onChange(Record data) { update(data); observer.onChange(); } //TODO Refactor generic "fun" here: go explicit. - private void update(@NonNull Raw data) { - Object value = data.value(); + private void update(@NonNull Record value) { + Instant now = getNow(); if (value instanceof HeartRate) { - this.heartRate.add((Raw) data); + this.heartRate.add(now, (HeartRate) value); return; } if (value instanceof Temperature) { - this.temperature.add((Raw) data); + this.temperature.add(now, (Temperature) value); return; } if (value instanceof BluetoothHandlerCyclingCadence.CrankData) { - this.cyclingCadence.add((Raw) data); + this.cyclingCadence.add(now, (BluetoothHandlerCyclingCadence.CrankData) value); return; } if (value instanceof BluetoothHandlerCyclingDistanceSpeed.WheelData) { this.cyclingDistanceSpeed.setWheelCircumference(PreferencesUtils.getWheelCircumference()); //TODO Fetch once and then listen for changes. - this.cyclingDistanceSpeed.add((Raw) data); + this.cyclingDistanceSpeed.add(now, (BluetoothHandlerCyclingDistanceSpeed.WheelData) value); return; } if (value instanceof BluetoothHandlerRunningSpeedAndCadence.Data) { - this.runningDistanceSpeedCadence.add((Raw) data); + this.runningDistanceSpeedCadence.add(now, (BluetoothHandlerRunningSpeedAndCadence.Data) value); return; } if (value instanceof BluetoothHandlerCyclingPower.Data) { - this.cyclingPower.add((Raw) data); + this.cyclingPower.add(now, (BluetoothHandlerCyclingPower.Data) value); return; } if (value instanceof AtmosphericPressure) { - this.barometer.add((Raw) data); + this.barometer.add(now, (AtmosphericPressure) value); return; } if (value instanceof Position) { - this.gps.add((Raw) data); + this.gps.add(now, (Position) value); return; } - throw new UnsupportedOperationException(data.getClass().getCanonicalName() + " " + data.value().getClass().getCanonicalName()); + throw new UnsupportedOperationException(value.getClass().getCanonicalName()); } public void remove(@NonNull Aggregator type) { 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 d81967b45..a4b5c8229 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java @@ -14,7 +14,6 @@ import java.util.concurrent.TimeUnit; import de.dennisguse.opentracks.data.models.AtmosphericPressure; import de.dennisguse.opentracks.sensors.SensorManager; import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer; -import de.dennisguse.opentracks.sensors.sensorData.Raw; public class BarometerInternal implements Driver { @@ -34,7 +33,7 @@ public class BarometerInternal implements Driver { return; } - observer.onChange(new Raw<>(observer.getNow(), AtmosphericPressure.ofHPA(event.values[0]))); + observer.onChange(AtmosphericPressure.ofHPA(event.values[0])); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Aggregator.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Aggregator.java index 0b20aa1a9..d039c74e2 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Aggregator.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Aggregator.java @@ -29,9 +29,10 @@ public abstract class Aggregator { return sensorName != null ? sensorName : sensorAddress; } - public final void add(Raw current) { - computeValue(current); - previous = current; + public final void add(Instant now, Input current) { + Raw next = new Raw<>(now, current); + computeValue(next); + previous = next; } protected abstract void computeValue(Raw current); @@ -104,4 +105,10 @@ public abstract class Aggregator { public String toString() { return "sensorAddress=" + sensorAddress + " data=" + aggregatedValue; } + + protected record Raw( + @NonNull Instant time, + @NonNull T value + ) { + } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java deleted file mode 100644 index a946dca29..000000000 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Raw.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.dennisguse.opentracks.sensors.sensorData; - - -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; - -import java.time.Clock; -import java.time.Instant; - -public record Raw( - @NonNull Instant time, - @NonNull T value -) { - public Raw(@NonNull Clock clock, @NonNull T value) { - this(clock.instant(), value); - } - - @VisibleForTesting - public Raw(@NonNull String time, @NonNull T value) { - this(Instant.parse(time), value); - } -} 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 5105ed9f5..59ff7a970 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -73,7 +73,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh } public synchronized TrackPoint createSegmentStartManual() { - return TrackPoint.createSegmentStartManualWithTime(createNow()); + return TrackPoint.createSegmentStartManualWithTime(getNow()); } public synchronized TrackPoint createSegmentEnd() { @@ -89,7 +89,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh } public Pair createCurrentTrackPoint(@Nullable TrackPoint lastTrackPointUISpeed, @Nullable TrackPoint lastTrackPointUIAltitude, @Nullable TrackPoint lastStoredTrackPointWithLocation) { - Instant now = createNow(); + Instant now = getNow(); SensorDataSet sensorDataSet = sensorManager.getSensorDataSet(now); Position position = sensorDataSet.position().data(); @@ -123,7 +123,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh } private TrackPoint createTrackPoint(TrackPoint.Type type) { - Instant now = createNow(); + Instant now = getNow(); SensorDataSet sensorDataSet = sensorManager.getSensorDataSet(now); @@ -146,7 +146,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh ); } - public Instant createNow() { + public Instant getNow() { return Instant.now(clock); }