Cleanup: SensorManager avoids instanceof for testing.

This commit is contained in:
Dennis Guse
2026-01-31 19:51:26 +01:00
parent a1a363698f
commit fa558c9ab7
3 changed files with 50 additions and 53 deletions
@@ -664,12 +664,12 @@ public class ExportImportTest {
AggregatorCyclingPower cyclingPower = new AggregatorCyclingPower("", ""); AggregatorCyclingPower cyclingPower = new AggregatorCyclingPower("", "");
cyclingPower.add(trackPointCreator.getNow(), new CyclingPowerBluetooth.Data(Power.of(power), null)); cyclingPower.add(trackPointCreator.getNow(), new CyclingPowerBluetooth.Data(Power.of(power), null));
sensorManager.add(cyclingPower); sensorManager.setAggregator(cyclingPower);
AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", ""); AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", "");
avgHeartRate.add(trackPointCreator.getNow(), HeartRate.of(heartRate)); avgHeartRate.add(trackPointCreator.getNow(), HeartRate.of(heartRate));
sensorManager.add(avgHeartRate); sensorManager.setAggregator(avgHeartRate);
AggregatorCyclingCadence cyclingCadence = new AggregatorCyclingCadence("", "") { AggregatorCyclingCadence cyclingCadence = new AggregatorCyclingCadence("", "") {
@NonNull @NonNull
@@ -683,7 +683,7 @@ public class ExportImportTest {
return true; return true;
} }
}; };
sensorManager.add(cyclingCadence); sensorManager.setAggregator(cyclingCadence);
if (distance != null && speed != null) { if (distance != null && speed != null) {
AggregatorCyclingDistanceSpeed aggregatorCyclingDistanceSpeed = new AggregatorCyclingDistanceSpeed("", "") { AggregatorCyclingDistanceSpeed aggregatorCyclingDistanceSpeed = new AggregatorCyclingDistanceSpeed("", "") {
@@ -698,14 +698,14 @@ public class ExportImportTest {
return true; return true;
} }
}; };
sensorManager.add(aggregatorCyclingDistanceSpeed); sensorManager.setAggregator(aggregatorCyclingDistanceSpeed);
} else { } else {
sensorManager.add(new AggregatorCyclingDistanceSpeed("", "")); sensorManager.setAggregator(new AggregatorCyclingDistanceSpeed("", ""));
} }
mockAltitudeChange(trackPointCreator, altitudeGain); mockAltitudeChange(trackPointCreator, altitudeGain);
sensorManager.add(new AggregatorTemperature("", "'") { sensorManager.setAggregator(new AggregatorTemperature("", "'") {
@NonNull @NonNull
@Override @Override
public Temperature getAggregatedValue(Instant now) { public Temperature getAggregatedValue(Instant now) {
@@ -341,7 +341,7 @@ public class TrackRecordingServiceRecordingTest {
trackPointCreator.setClock(sensor1); trackPointCreator.setClock(sensor1);
AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", ""); AggregatorHeartRate avgHeartRate = new AggregatorHeartRate("", "");
sensorManager.add(avgHeartRate); sensorManager.setAggregator(avgHeartRate);
//Should be ignored //Should be ignored
avgHeartRate.add(trackPointCreator.getNow(), HeartRate.of(5)); avgHeartRate.add(trackPointCreator.getNow(), HeartRate.of(5));
@@ -812,7 +812,7 @@ public class TrackRecordingServiceRecordingTest {
AggregatorRunning aggregatorRunning = new AggregatorRunning("", ""); AggregatorRunning aggregatorRunning = new AggregatorRunning("", "");
SensorManager sensorManager = trackPointCreator.getSensorManager(); SensorManager sensorManager = trackPointCreator.getSensorManager();
sensorManager.add(aggregatorRunning); sensorManager.setAggregator(aggregatorRunning);
// when // when
String sensor1 = "2020-02-02T02:02:03Z"; String sensor1 = "2020-02-02T02:02:03Z";
@@ -17,7 +17,6 @@ import de.dennisguse.opentracks.data.models.Distance;
import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.data.models.HeartRate;
import de.dennisguse.opentracks.data.models.Position; import de.dennisguse.opentracks.data.models.Position;
import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.Speed;
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence; import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed; import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed;
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower; import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
@@ -247,42 +246,25 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
return null; return null;
} }
//TODO Remove
@VisibleForTesting
@Deprecated
public void add(@NonNull Aggregator<?, ?> data) {
if (data instanceof AggregatorHeartRate) {
heartRateHandler.setAggregator((AggregatorHeartRate) data);
return;
}
if (data instanceof AggregatorTemperature) {
temperatureHandler.setAggregator((AggregatorTemperature) data);
return;
}
if (data instanceof AggregatorCyclingCadence) {
cyclingCadenceHandler.setAggregator((AggregatorCyclingCadence) data);
return;
}
if (data instanceof AggregatorCyclingDistanceSpeed) {
cyclingDistanceSpeedHandler.setAggregator((AggregatorCyclingDistanceSpeed) data);
return;
}
if (data instanceof AggregatorCyclingPower) {
cyclingPowerHandler.setAggregator((AggregatorCyclingPower) data);
return;
}
if (data instanceof AggregatorRunning) {
runningSpeedCadenceDistanceHandler.setAggregator((AggregatorRunning) data);
return;
}
throw new UnsupportedOperationException(data.getClass().getCanonicalName());
}
public void onChange() { public void onChange() {
observer.onChange(); observer.onChange();
} }
public SensorDataSet getSensorDataSet(Instant now) {
AggregatorGPS gps = gpsManager.getAggregatorGPS();
return new SensorDataSet(
gps != null && gps.hasReceivedData() ? gps.getAggregatedValueWithSensorName(now) : new SensorData<>(Position.of(now), ""),
getSpeed(now),
getDistance(now),
getHeartRate(now),
temperatureHandler.getSensorData(now),
getCadence(now),
cyclingPowerHandler.getSensorData(now),
altitudeChangeHandler.getSensorData(now)
);
}
@VisibleForTesting @VisibleForTesting
public void clear() { public void clear() {
Log.i(TAG, "Removing all aggregators"); Log.i(TAG, "Removing all aggregators");
@@ -314,18 +296,33 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
} }
} }
public SensorDataSet getSensorDataSet(Instant now) { @VisibleForTesting
AggregatorGPS gps = gpsManager.getAggregatorGPS(); public void setAggregator(AggregatorHeartRate data) {
heartRateHandler.setAggregator(data);
}
return new SensorDataSet( @VisibleForTesting
gps != null && gps.hasReceivedData() ? gps.getAggregatedValueWithSensorName(now) : new SensorData<>(Position.of(now), ""), public void setAggregator(@NonNull AggregatorTemperature data) {
getSpeed(now), temperatureHandler.setAggregator(data);
getDistance(now), }
getHeartRate(now),
temperatureHandler.getSensorData(now), @VisibleForTesting
getCadence(now), public void setAggregator(@NonNull AggregatorCyclingCadence data) {
cyclingPowerHandler.getSensorData(now), cyclingCadenceHandler.setAggregator(data);
altitudeChangeHandler.getSensorData(now) }
);
@VisibleForTesting
public void setAggregator(@NonNull AggregatorCyclingDistanceSpeed data) {
cyclingDistanceSpeedHandler.setAggregator(data);
}
@VisibleForTesting
public void setAggregator(@NonNull AggregatorCyclingPower data) {
cyclingPowerHandler.setAggregator(data);
}
@VisibleForTesting
public void setAggregator(@NonNull AggregatorRunning data) {
runningSpeedCadenceDistanceHandler.setAggregator(data);
} }
} }