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 1e7106e02..335af64cb 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
@@ -549,23 +549,23 @@ public class ExportImportTest {
SensorDataSet sensorDataSet = trackPointCreator.getSensorManager().sensorDataSet;
AggregatorCyclingPower cyclingPower = Mockito.mock(AggregatorCyclingPower.class);
- Mockito.when(cyclingPower.hasValue()).thenReturn(true);
- Mockito.when(cyclingPower.getValue(Mockito.any())).thenReturn(Power.of(power));
+ Mockito.when(cyclingPower.hasAggregatedValue()).thenReturn(true);
+ Mockito.when(cyclingPower.getAggregatedValue(Mockito.any())).thenReturn(Power.of(power));
sensorDataSet.add(cyclingPower);
AggregatorHeartRate avgHeartRate = Mockito.mock(AggregatorHeartRate.class);
- Mockito.when(avgHeartRate.getValue(Mockito.any())).thenReturn(HeartRate.of(heartRate));
+ Mockito.when(avgHeartRate.getAggregatedValue(Mockito.any())).thenReturn(HeartRate.of(heartRate));
sensorDataSet.add(avgHeartRate);
AggregatorCyclingCadence cyclingCadence = Mockito.mock(AggregatorCyclingCadence.class);
- Mockito.when(cyclingCadence.hasValue()).thenReturn(true);
- Mockito.when(cyclingCadence.getValue(Mockito.any())).thenReturn(Cadence.of(cadence));
+ Mockito.when(cyclingCadence.hasAggregatedValue()).thenReturn(true);
+ Mockito.when(cyclingCadence.getAggregatedValue(Mockito.any())).thenReturn(Cadence.of(cadence));
sensorDataSet.add(cyclingCadence);
if (distance != null && speed != null) {
AggregatorCyclingDistanceSpeed distanceSpeed = Mockito.mock(AggregatorCyclingDistanceSpeed.class);
- Mockito.when(distanceSpeed.hasValue()).thenReturn(true);
- Mockito.when(distanceSpeed.getValue(Mockito.any())).thenReturn(new AggregatorCyclingDistanceSpeed.Data(null, distance, Speed.of(speed)));
+ Mockito.when(distanceSpeed.hasAggregatedValue()).thenReturn(true);
+ Mockito.when(distanceSpeed.getAggregatedValue(Mockito.any())).thenReturn(new AggregatorCyclingDistanceSpeed.Data(null, distance, Speed.of(speed)));
sensorDataSet.add(distanceSpeed);
} else {
sensorDataSet.add(new AggregatorCyclingDistanceSpeed("", ""));
@@ -581,8 +581,8 @@ public class ExportImportTest {
if (altitudeGain != null) {
AggregatorBarometer barometer = Mockito.mock(AggregatorBarometer.class);
- Mockito.when(barometer.hasValue()).thenReturn(true);
- Mockito.when(barometer.getValue(Mockito.any())).thenReturn(new AltitudeGainLoss(altitudeGain, altitudeGain));
+ Mockito.when(barometer.hasAggregatedValue()).thenReturn(true);
+ Mockito.when(barometer.getAggregatedValue(Mockito.any())).thenReturn(new AltitudeGainLoss(altitudeGain, altitudeGain));
sensorDataSet.add(barometer);
} else {
sensorDataSet.add(new AggregatorBarometer("test", null));
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 7e8373c74..01d929f3d 100644
--- a/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometerTest.java
+++ b/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometerTest.java
@@ -24,7 +24,7 @@ public class AggregatorBarometerTest {
addSensorValue(subject, new float[]{1015f, 1015.01f, 1015.02f, 1015.03f, 1015.04f, 1015.05f, 1015.06f, 1015.07f, 1015.08f, 1015.09f, 1015.10f, 1015.11f, 1015.12f, 1015.13f, 1018f, 1018.1f, 1018.1f, 1018.1f, 1018.1f});
// then
- Assert.assertEquals(0f, subject.value.gain_m(), 0.01);
- Assert.assertEquals(15f, subject.value.loss_m(), 0.01);
+ Assert.assertEquals(0f, subject.aggregatedValue.gain_m(), 0.01);
+ Assert.assertEquals(15f, subject.aggregatedValue.loss_m(), 0.01);
}
}
\ No newline at end of file
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 161c04e8d..e58e32ffc 100644
--- a/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingTest.java
+++ b/src/androidTest/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingTest.java
@@ -2,7 +2,6 @@ package de.dennisguse.opentracks.sensors.sensorData;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -13,6 +12,7 @@ import java.time.Instant;
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.BluetoothHandlerCyclingCadence;
import de.dennisguse.opentracks.sensors.BluetoothHandlerCyclingDistanceSpeed;
import de.dennisguse.opentracks.sensors.UintUtils;
@@ -29,7 +29,7 @@ public class SensorDataCyclingTest {
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 2048)));
// then
- assertEquals(60, current.getValue(Instant.MIN).getRPM(), 0.01);
+ assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
}
@Test
@@ -41,7 +41,7 @@ public class SensorDataCyclingTest {
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 8016)));
// then
- assertEquals(33.53, current.getValue(Instant.MIN).getRPM(), 0.01);
+ assertEquals(33.53, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
}
@Test
@@ -53,7 +53,7 @@ public class SensorDataCyclingTest {
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 2048)));
// then
- assertEquals(Cadence.of(0), current.getValue(Instant.MIN));
+ assertEquals(Cadence.of(0), current.getAggregatedValue(Instant.MIN));
}
@@ -66,7 +66,7 @@ public class SensorDataCyclingTest {
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 1024)));
// then
- assertFalse(current.hasValue()); //TODO Cadence should be 0?
+ assertFalse(current.hasAggregatedValue()); //TODO Cadence should be 0?
}
@Test
@@ -78,7 +78,7 @@ public class SensorDataCyclingTest {
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(2, 0)));
// then
- assertEquals(60, current.getValue(Instant.MIN).getRPM(), 0.01);
+ assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
}
@Test
@@ -93,7 +93,7 @@ public class SensorDataCyclingTest {
// then
// TODO See #953
// assertEquals(60, current.getValue().getRPM(), 0.01);
- assertNull(current.getValue(Instant.MIN));
+ assertEquals(Cadence.of(0), current.getAggregatedValue(Instant.MIN));
}
@Test
@@ -106,8 +106,8 @@ public class SensorDataCyclingTest {
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(2, 8016)));
// then
- assertEquals(2.15, current.getValue(Instant.MIN).distance().toM(), 0.01);
- assertEquals(1.20, current.getValue(Instant.MIN).speed().toMPS(), 0.01);
+ assertEquals(2.15, current.getAggregatedValue(Instant.MIN).distance().toM(), 0.01);
+ assertEquals(1.20, current.getAggregatedValue(Instant.MIN).speed().toMPS(), 0.01);
}
@Test
@@ -125,6 +125,6 @@ public class SensorDataCyclingTest {
// TODO See #953
// assertEquals(2, current.getValue().getDistance().toM(), 0.01);
// assertEquals(2, current.getValue().getSpeed().toMPS(), 0.01);
- assertNull(current.getValue(Instant.MIN));
+ assertEquals(new AggregatorCyclingDistanceSpeed.Data(Distance.of(0), Distance.of(0), Speed.of(0)), current.getAggregatedValue(Instant.MIN));
}
}
\ No newline at end of file
diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java
index 63a304723..2acc6d459 100644
--- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java
+++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java
@@ -729,8 +729,8 @@ public class TrackRecordingServiceRecordingTest {
private void mockAltitudeChange(TrackPointCreator trackPointCreator, float altitudeGain) {
AggregatorBarometer barometer = Mockito.mock(AggregatorBarometer.class);
- Mockito.when(barometer.hasValue()).thenReturn(true);
- Mockito.when(barometer.getValue(Mockito.any())).thenReturn(new AltitudeGainLoss(altitudeGain, altitudeGain));
+ Mockito.when(barometer.hasAggregatedValue()).thenReturn(true);
+ Mockito.when(barometer.getAggregatedValue(Mockito.any())).thenReturn(new AltitudeGainLoss(altitudeGain, altitudeGain));
trackPointCreator.getSensorManager().sensorDataSet.barometer = barometer;
}
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 0ffe9c2ef..c46d4491a 100644
--- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Aggregator.java
+++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/Aggregator.java
@@ -1,5 +1,7 @@
package de.dennisguse.opentracks.sensors.sensorData;
+import android.util.Pair;
+
import androidx.annotation.NonNull;
import java.time.Instant;
@@ -10,7 +12,7 @@ public abstract class Aggregator {
protected Raw previous;
- protected Output value;
+ protected Output aggregatedValue;
private final String sensorAddress;
private final String sensorName;
@@ -35,27 +37,35 @@ public abstract class Aggregator {
protected abstract void computeValue(Raw current);
- public boolean hasValue() {
- return value != null;
+ public boolean hasAggregatedValue() {
+ return aggregatedValue != null;
}
@NonNull
protected abstract Output getNoneValue();
- public Output getValue(Instant now) {
- if (!hasValue()) {
- return null; //TODO Check if this is a good idea!
+ @NonNull
+ public Output getAggregatedValue(Instant now) {
+ if (!hasAggregatedValue()) {
+ return getNoneValue();
}
+ //TODO This should only affect measured data (like heartrate), but not aggregated values.
+ //Remove current measurements, but provide aggregates?
if (isRecent(now)) {
- return value;
+ return aggregatedValue;
}
return getNoneValue();
}
+ @NonNull
+ public Pair