forked from upstream-mirrors/OpenTracks
Cleanup: moved Raw into Aggregator.
Preparation for refactoring.
This commit is contained in:
+2
-3
@@ -75,7 +75,6 @@ import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpee
|
|||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature;
|
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.TrackRecordingService;
|
||||||
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
||||||
|
|
||||||
@@ -664,12 +663,12 @@ public class ExportImportTest {
|
|||||||
SensorManager sensorManager = trackPointCreator.getSensorManager();
|
SensorManager sensorManager = trackPointCreator.getSensorManager();
|
||||||
|
|
||||||
AggregatorCyclingPower cyclingPower = new AggregatorCyclingPower("", "");
|
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);
|
sensorManager.add(cyclingPower);
|
||||||
|
|
||||||
|
|
||||||
AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", "");
|
AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", "");
|
||||||
avgHeartRate.add(new Raw<>(trackPointCreator.createNow(), HeartRate.of(heartRate)));
|
avgHeartRate.add(trackPointCreator.getNow(), HeartRate.of(heartRate));
|
||||||
sensorManager.add(avgHeartRate);
|
sensorManager.add(avgHeartRate);
|
||||||
|
|
||||||
AggregatorCyclingCadence cyclingCadence = new AggregatorCyclingCadence("", "") {
|
AggregatorCyclingCadence cyclingCadence = new AggregatorCyclingCadence("", "") {
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ public class AggregatorBarometerTest {
|
|||||||
|
|
||||||
private static void addSensorValue(AggregatorBarometer aggregatorBarometer, float[] values) {
|
private static void addSensorValue(AggregatorBarometer aggregatorBarometer, float[] values) {
|
||||||
for (float f : values) {
|
for (float f : values) {
|
||||||
aggregatorBarometer.add(new Raw<>(Instant.MIN, AtmosphericPressure.ofHPA(f)));
|
aggregatorBarometer.add(Instant.MIN, AtmosphericPressure.ofHPA(f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-16
@@ -25,8 +25,8 @@ public class SensorDataCyclingTest {
|
|||||||
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024)));
|
current.add(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(2, 2048));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
|
assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
|
||||||
@@ -37,8 +37,8 @@ public class SensorDataCyclingTest {
|
|||||||
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 6184)));
|
current.add(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(2, 8016));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(33.53, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
|
assertEquals(33.53, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
|
||||||
@@ -49,8 +49,8 @@ public class SensorDataCyclingTest {
|
|||||||
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024)));
|
current.add(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, 2048));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(Cadence.of(0), current.getAggregatedValue(Instant.MIN));
|
assertEquals(Cadence.of(0), current.getAggregatedValue(Instant.MIN));
|
||||||
@@ -62,8 +62,8 @@ public class SensorDataCyclingTest {
|
|||||||
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, 1024)));
|
current.add(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(2, 1024));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertFalse(current.hasReceivedData()); //TODO Cadence should be 0?
|
assertFalse(current.hasReceivedData()); //TODO Cadence should be 0?
|
||||||
@@ -74,8 +74,8 @@ public class SensorDataCyclingTest {
|
|||||||
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(1, UintUtils.UINT16_MAX - 1024)));
|
current.add(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(2, 0));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
|
assertEquals(60, current.getAggregatedValue(Instant.MIN).getRPM(), 0.01);
|
||||||
@@ -87,8 +87,8 @@ public class SensorDataCyclingTest {
|
|||||||
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
AggregatorCyclingCadence current = new AggregatorCyclingCadence("", "");
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingCadence.CrankData(UintUtils.UINT32_MAX - 1, 1024)));
|
current.add(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(0, 2048));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
// TODO See #953
|
// TODO See #953
|
||||||
@@ -102,8 +102,8 @@ public class SensorDataCyclingTest {
|
|||||||
current.setWheelCircumference(Distance.ofMM(2150));
|
current.setWheelCircumference(Distance.ofMM(2150));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(1, 6184)));
|
current.add(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(2, 8016));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(2.15, current.getAggregatedValue(Instant.MIN).distance().toM(), 0.01);
|
assertEquals(2.15, current.getAggregatedValue(Instant.MIN).distance().toM(), 0.01);
|
||||||
@@ -117,8 +117,8 @@ public class SensorDataCyclingTest {
|
|||||||
current.setWheelCircumference(Distance.ofMM(2000));
|
current.setWheelCircumference(Distance.ofMM(2000));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
current.add(new Raw<>(Instant.MIN, new BluetoothHandlerCyclingDistanceSpeed.WheelData(UintUtils.UINT32_MAX - 1, 1024)));
|
current.add(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(0, 2048));
|
||||||
|
|
||||||
|
|
||||||
// then
|
// then
|
||||||
|
|||||||
+7
-8
@@ -49,7 +49,6 @@ import de.dennisguse.opentracks.sensors.SensorManager;
|
|||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
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.services.handlers.TrackPointCreator;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
|
|
||||||
@@ -345,11 +344,11 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
trackPointCreator.setClock(sensor1);
|
trackPointCreator.setClock(sensor1);
|
||||||
|
|
||||||
//Should be ignored
|
//Should be ignored
|
||||||
sensorManager.onChange(new Raw<HeartRate>(sensor1, HeartRate.of(5)));
|
sensorManager.onChange(HeartRate.of(5));
|
||||||
|
|
||||||
String sensor3 = "2020-02-02T02:02:13Z";
|
String sensor3 = "2020-02-02T02:02:13Z";
|
||||||
trackPointCreator.setClock(sensor3);
|
trackPointCreator.setClock(sensor3);
|
||||||
sensorManager.onChange(new Raw<HeartRate>(sensor3, HeartRate.of(7)));
|
sensorManager.onChange(HeartRate.of(7));
|
||||||
|
|
||||||
String stopTime = "2020-02-02T02:02:15Z";
|
String stopTime = "2020-02-02T02:02:15Z";
|
||||||
trackPointCreator.setClock(stopTime);
|
trackPointCreator.setClock(stopTime);
|
||||||
@@ -817,12 +816,12 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
String sensor1 = "2020-02-02T02:02:03Z";
|
String sensor1 = "2020-02-02T02:02:03Z";
|
||||||
trackPointCreator.setClock(sensor1);
|
trackPointCreator.setClock(sensor1);
|
||||||
//Should be ignored
|
//Should be ignored
|
||||||
sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(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
|
// when
|
||||||
String sensor2 = "2020-02-02T02:02:04Z";
|
String sensor2 = "2020-02-02T02:02:04Z";
|
||||||
trackPointCreator.setClock(sensor2);
|
trackPointCreator.setClock(sensor2);
|
||||||
sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(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
|
// when
|
||||||
String gps1 = "2020-02-02T02:02:05Z";
|
String gps1 = "2020-02-02T02:02:05Z";
|
||||||
@@ -831,13 +830,13 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
// when
|
// when
|
||||||
String sensor3 = "2020-02-02T02:02:06Z";
|
String sensor3 = "2020-02-02T02:02:06Z";
|
||||||
trackPointCreator.setClock(sensor3);
|
trackPointCreator.setClock(sensor3);
|
||||||
sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(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
|
// when
|
||||||
String sensor4 = "2020-02-02T02:02:07Z";
|
String sensor4 = "2020-02-02T02:02:07Z";
|
||||||
trackPointCreator.setClock(sensor4);
|
trackPointCreator.setClock(sensor4);
|
||||||
//Should be ignored
|
//Should be ignored
|
||||||
sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(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
|
// when
|
||||||
String gps2 = "2020-02-02T02:02:08Z";
|
String gps2 = "2020-02-02T02:02:08Z";
|
||||||
@@ -847,7 +846,7 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
String sensor5 = "2020-02-02T02:02:10Z";
|
String sensor5 = "2020-02-02T02:02:10Z";
|
||||||
trackPointCreator.setClock(sensor5);
|
trackPointCreator.setClock(sensor5);
|
||||||
//Should be ignored
|
//Should be ignored
|
||||||
sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(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
|
// when
|
||||||
String gps3 = "2020-02-02T02:02:12Z";
|
String gps3 = "2020-02-02T02:02:12Z";
|
||||||
|
|||||||
+1
-2
@@ -8,7 +8,6 @@ import java.util.UUID;
|
|||||||
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerBarometricPressure implements SensorHandlerInterface {
|
public class BluetoothHandlerBarometricPressure implements SensorHandlerInterface {
|
||||||
@@ -33,7 +32,7 @@ public class BluetoothHandlerBarometricPressure implements SensorHandlerInterfac
|
|||||||
AtmosphericPressure value = parseEnvironmentalSensing(characteristic);
|
AtmosphericPressure value = parseEnvironmentalSensing(characteristic);
|
||||||
if (value == null) return;
|
if (value == null) return;
|
||||||
|
|
||||||
observer.onChange(new Raw<>(observer.getNow(), value));
|
observer.onChange(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import android.util.Pair;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
|
public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
|
||||||
@@ -33,7 +32,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
|
|||||||
if (serviceMeasurementUUID.equals(BluetoothHandlerCyclingPower.CYCLING_POWER)) {
|
if (serviceMeasurementUUID.equals(BluetoothHandlerCyclingPower.CYCLING_POWER)) {
|
||||||
BluetoothHandlerCyclingPower.Data data = BluetoothHandlerCyclingPower.parseCyclingPower(characteristic);
|
BluetoothHandlerCyclingPower.Data data = BluetoothHandlerCyclingPower.parseCyclingPower(characteristic);
|
||||||
if (data != null && data.crank() != null) {
|
if (data != null && data.crank() != null) {
|
||||||
observer.onChange(new Raw<>(observer.getNow(), data.crank()));
|
observer.onChange(data.crank());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -42,7 +41,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
|
|||||||
Pair<BluetoothHandlerCyclingDistanceSpeed.WheelData, CrankData> data = BluetoothHandlerCyclingDistanceSpeed.parseCyclingCrankAndWheel(address, sensorName, characteristic);
|
Pair<BluetoothHandlerCyclingDistanceSpeed.WheelData, CrankData> data = BluetoothHandlerCyclingDistanceSpeed.parseCyclingCrankAndWheel(address, sensorName, characteristic);
|
||||||
|
|
||||||
if (data != null && data.second != null) {
|
if (data != null && data.second != null) {
|
||||||
observer.onChange(new Raw<>(observer.getNow(), data.second));
|
observer.onChange(data.second);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-5
@@ -10,7 +10,6 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterface {
|
public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterface {
|
||||||
@@ -33,9 +32,10 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf
|
|||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Pair<WheelData, BluetoothHandlerCyclingCadence.CrankData> data = parseCyclingCrankAndWheel(address, sensorName, characteristic);
|
Pair<WheelData, BluetoothHandlerCyclingCadence.CrankData> data = parseCyclingCrankAndWheel(address, sensorName, characteristic);
|
||||||
if (data.first != null) {
|
if (data == null) return;
|
||||||
observer.onChange(new Raw<>(observer.getNow(), data.first));
|
if (data.first == null) return;
|
||||||
}
|
|
||||||
|
observer.onChange(data.first);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -78,5 +78,6 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf
|
|||||||
long wheelRevolutionsCount, // UINT32
|
long wheelRevolutionsCount, // UINT32
|
||||||
|
|
||||||
int wheelRevolutionsTime // UINT16; 1/1024s
|
int wheelRevolutionsTime // UINT16; 1/1024s
|
||||||
) {}
|
) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.Power;
|
import de.dennisguse.opentracks.data.models.Power;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerCyclingPower implements 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) {
|
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Data cyclingPower = parseCyclingPower(characteristic);
|
Data cyclingPower = parseCyclingPower(characteristic);
|
||||||
|
|
||||||
if (cyclingPower != null) {
|
if (cyclingPower == null) return;
|
||||||
observer.onChange(new Raw<>(observer.getNow(), cyclingPower));
|
|
||||||
}
|
observer.onChange(cyclingPower);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.HeartRate;
|
import de.dennisguse.opentracks.data.models.HeartRate;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerHeartRate implements 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) {
|
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
HeartRate heartRate = parseHeartRate(characteristic);
|
HeartRate heartRate = parseHeartRate(characteristic);
|
||||||
|
|
||||||
if (heartRate != null) {
|
if (heartRate == null) return;
|
||||||
observer.onChange(new Raw<>(observer.getNow(), heartRate));
|
|
||||||
}
|
observer.onChange(heartRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
+3
-2
@@ -12,7 +12,6 @@ import de.dennisguse.opentracks.data.models.Cadence;
|
|||||||
import de.dennisguse.opentracks.data.models.Distance;
|
import de.dennisguse.opentracks.data.models.Distance;
|
||||||
import de.dennisguse.opentracks.data.models.Speed;
|
import de.dennisguse.opentracks.data.models.Speed;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInterface {
|
public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInterface {
|
||||||
@@ -36,7 +35,9 @@ public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInte
|
|||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Data data = parseRunningSpeedAndCadence(sensorName, characteristic);
|
Data data = parseRunningSpeedAndCadence(sensorName, characteristic);
|
||||||
observer.onChange(new Raw<>(observer.getNow(), data));
|
if (data == null) return;
|
||||||
|
|
||||||
|
observer.onChange(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import java.util.UUID;
|
|||||||
import de.dennisguse.opentracks.data.models.Temperature;
|
import de.dennisguse.opentracks.data.models.Temperature;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
public class BluetoothHandlerTemperature implements SensorHandlerInterface {
|
public class BluetoothHandlerTemperature implements SensorHandlerInterface {
|
||||||
@@ -34,7 +33,7 @@ public class BluetoothHandlerTemperature implements SensorHandlerInterface {
|
|||||||
Temperature value = parseEnvironmentalSensing(characteristic);
|
Temperature value = parseEnvironmentalSensing(characteristic);
|
||||||
if (value == null) return;
|
if (value == null) return;
|
||||||
|
|
||||||
observer.onChange(new Raw<>(observer.getNow(), value));
|
observer.onChange(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import de.dennisguse.opentracks.R;
|
|||||||
import de.dennisguse.opentracks.data.models.Distance;
|
import de.dennisguse.opentracks.data.models.Distance;
|
||||||
import de.dennisguse.opentracks.data.models.Position;
|
import de.dennisguse.opentracks.data.models.Position;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorGPS;
|
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.services.handlers.TrackPointCreator;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
import de.dennisguse.opentracks.util.PermissionRequester;
|
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;
|
private static final String LOCATION_PROVIDER = LocationManager.GPS_PROVIDER;
|
||||||
|
|
||||||
|
//TODO Refactor to just pass information via SensorManager.
|
||||||
private TrackPointCreator trackPointCreator;
|
private TrackPointCreator trackPointCreator;
|
||||||
|
|
||||||
private SensorManager observer;
|
private SensorManager observer;
|
||||||
@@ -123,7 +123,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS
|
|||||||
@Override
|
@Override
|
||||||
public void onLocationChanged(@NonNull Location location) {
|
public void onLocationChanged(@NonNull Location location) {
|
||||||
// Send each update to the status; please note that this TrackPoint is not stored.
|
// 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);
|
gpsStatusManager.onNewTrackPoint(position);
|
||||||
|
|
||||||
if (!position.hasValidLocation()) {
|
if (!position.hasValidLocation()) {
|
||||||
@@ -136,7 +136,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
observer.onChange(new Raw<>(observer.getNow(), position));
|
observer.onChange(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -28,13 +28,13 @@ import de.dennisguse.opentracks.sensors.sensorData.AggregatorGPS;
|
|||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature;
|
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.SensorData;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
||||||
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
import de.dennisguse.opentracks.util.SystemUtils;
|
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 {
|
public class SensorManager implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private static final String TAG = SensorManager.class.getSimpleName();
|
private static final String TAG = SensorManager.class.getSimpleName();
|
||||||
@@ -145,7 +145,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Instant getNow() {
|
public Instant getNow() {
|
||||||
return observer.createNow();
|
return observer.getNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -225,53 +225,53 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void onChange(Raw<?> data) {
|
public void onChange(Record data) {
|
||||||
update(data);
|
update(data);
|
||||||
observer.onChange();
|
observer.onChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO Refactor generic "fun" here: go explicit.
|
//TODO Refactor generic "fun" here: go explicit.
|
||||||
private void update(@NonNull Raw<?> data) {
|
private void update(@NonNull Record value) {
|
||||||
Object value = data.value();
|
Instant now = getNow();
|
||||||
|
|
||||||
if (value instanceof HeartRate) {
|
if (value instanceof HeartRate) {
|
||||||
this.heartRate.add((Raw<HeartRate>) data);
|
this.heartRate.add(now, (HeartRate) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value instanceof Temperature) {
|
if (value instanceof Temperature) {
|
||||||
this.temperature.add((Raw<Temperature>) data);
|
this.temperature.add(now, (Temperature) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value instanceof BluetoothHandlerCyclingCadence.CrankData) {
|
if (value instanceof BluetoothHandlerCyclingCadence.CrankData) {
|
||||||
this.cyclingCadence.add((Raw<BluetoothHandlerCyclingCadence.CrankData>) data);
|
this.cyclingCadence.add(now, (BluetoothHandlerCyclingCadence.CrankData) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof BluetoothHandlerCyclingDistanceSpeed.WheelData) {
|
if (value instanceof BluetoothHandlerCyclingDistanceSpeed.WheelData) {
|
||||||
this.cyclingDistanceSpeed.setWheelCircumference(PreferencesUtils.getWheelCircumference()); //TODO Fetch once and then listen for changes.
|
this.cyclingDistanceSpeed.setWheelCircumference(PreferencesUtils.getWheelCircumference()); //TODO Fetch once and then listen for changes.
|
||||||
this.cyclingDistanceSpeed.add((Raw<BluetoothHandlerCyclingDistanceSpeed.WheelData>) data);
|
this.cyclingDistanceSpeed.add(now, (BluetoothHandlerCyclingDistanceSpeed.WheelData) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof BluetoothHandlerRunningSpeedAndCadence.Data) {
|
if (value instanceof BluetoothHandlerRunningSpeedAndCadence.Data) {
|
||||||
this.runningDistanceSpeedCadence.add((Raw<BluetoothHandlerRunningSpeedAndCadence.Data>) data);
|
this.runningDistanceSpeedCadence.add(now, (BluetoothHandlerRunningSpeedAndCadence.Data) value);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof BluetoothHandlerCyclingPower.Data) {
|
if (value instanceof BluetoothHandlerCyclingPower.Data) {
|
||||||
this.cyclingPower.add((Raw<BluetoothHandlerCyclingPower.Data>) data);
|
this.cyclingPower.add(now, (BluetoothHandlerCyclingPower.Data) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof AtmosphericPressure) {
|
if (value instanceof AtmosphericPressure) {
|
||||||
this.barometer.add((Raw<AtmosphericPressure>) data);
|
this.barometer.add(now, (AtmosphericPressure) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof Position) {
|
if (value instanceof Position) {
|
||||||
this.gps.add((Raw<Position>) data);
|
this.gps.add(now, (Position) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new UnsupportedOperationException(data.getClass().getCanonicalName() + " " + data.value().getClass().getCanonicalName());
|
throw new UnsupportedOperationException(value.getClass().getCanonicalName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove(@NonNull Aggregator<?, ?> type) {
|
public void remove(@NonNull Aggregator<?, ?> type) {
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
||||||
import de.dennisguse.opentracks.sensors.SensorManager;
|
import de.dennisguse.opentracks.sensors.SensorManager;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Raw;
|
|
||||||
|
|
||||||
public class BarometerInternal implements Driver {
|
public class BarometerInternal implements Driver {
|
||||||
|
|
||||||
@@ -34,7 +33,7 @@ public class BarometerInternal implements Driver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
observer.onChange(new Raw<>(observer.getNow(), AtmosphericPressure.ofHPA(event.values[0])));
|
observer.onChange(AtmosphericPressure.ofHPA(event.values[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ public abstract class Aggregator<Input, Output> {
|
|||||||
return sensorName != null ? sensorName : sensorAddress;
|
return sensorName != null ? sensorName : sensorAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void add(Raw<Input> current) {
|
public final void add(Instant now, Input current) {
|
||||||
computeValue(current);
|
Raw next = new Raw<>(now, current);
|
||||||
previous = current;
|
computeValue(next);
|
||||||
|
previous = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void computeValue(Raw<Input> current);
|
protected abstract void computeValue(Raw<Input> current);
|
||||||
@@ -104,4 +105,10 @@ public abstract class Aggregator<Input, Output> {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return "sensorAddress=" + sensorAddress + " data=" + aggregatedValue;
|
return "sensorAddress=" + sensorAddress + " data=" + aggregatedValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected record Raw<T>(
|
||||||
|
@NonNull Instant time,
|
||||||
|
@NonNull T value
|
||||||
|
) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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<T>(
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -73,7 +73,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized TrackPoint createSegmentStartManual() {
|
public synchronized TrackPoint createSegmentStartManual() {
|
||||||
return TrackPoint.createSegmentStartManualWithTime(createNow());
|
return TrackPoint.createSegmentStartManualWithTime(getNow());
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized TrackPoint createSegmentEnd() {
|
public synchronized TrackPoint createSegmentEnd() {
|
||||||
@@ -89,7 +89,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastTrackPointUISpeed, @Nullable TrackPoint lastTrackPointUIAltitude, @Nullable TrackPoint lastStoredTrackPointWithLocation) {
|
public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastTrackPointUISpeed, @Nullable TrackPoint lastTrackPointUIAltitude, @Nullable TrackPoint lastStoredTrackPointWithLocation) {
|
||||||
Instant now = createNow();
|
Instant now = getNow();
|
||||||
SensorDataSet sensorDataSet = sensorManager.getSensorDataSet(now);
|
SensorDataSet sensorDataSet = sensorManager.getSensorDataSet(now);
|
||||||
|
|
||||||
Position position = sensorDataSet.position().data();
|
Position position = sensorDataSet.position().data();
|
||||||
@@ -123,7 +123,7 @@ public class TrackPointCreator implements SharedPreferences.OnSharedPreferenceCh
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TrackPoint createTrackPoint(TrackPoint.Type type) {
|
private TrackPoint createTrackPoint(TrackPoint.Type type) {
|
||||||
Instant now = createNow();
|
Instant now = getNow();
|
||||||
|
|
||||||
SensorDataSet sensorDataSet = sensorManager.getSensorDataSet(now);
|
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);
|
return Instant.now(clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user