Cleanup: SensorManager.SensorDataChangedObserver inlined into SensorManager.

Preparation for refactoring.
This commit is contained in:
Dennis Guse
2026-01-26 20:22:01 +01:00
parent 1a14fed287
commit 74954df600
16 changed files with 58 additions and 74 deletions
@@ -344,11 +344,12 @@ public class TrackRecordingServiceRecordingTest {
String sensor1 = "2020-02-02T02:02:03Z"; String sensor1 = "2020-02-02T02:02:03Z";
trackPointCreator.setClock(sensor1); trackPointCreator.setClock(sensor1);
sensorManager.onChanged(new Raw<>(sensor1, HeartRate.of(5))); //Should be ignored //Should be ignored
sensorManager.onChange(new Raw<HeartRate>(sensor1, HeartRate.of(5)));
String sensor3 = "2020-02-02T02:02:13Z"; String sensor3 = "2020-02-02T02:02:13Z";
trackPointCreator.setClock(sensor3); trackPointCreator.setClock(sensor3);
sensorManager.onChanged(new Raw<>(sensor3, HeartRate.of(7))); sensorManager.onChange(new Raw<HeartRate>(sensor3, HeartRate.of(7)));
String stopTime = "2020-02-02T02:02:15Z"; String stopTime = "2020-02-02T02:02:15Z";
trackPointCreator.setClock(stopTime); trackPointCreator.setClock(stopTime);
@@ -815,12 +816,13 @@ public class TrackRecordingServiceRecordingTest {
// when // when
String sensor1 = "2020-02-02T02:02:03Z"; String sensor1 = "2020-02-02T02:02:03Z";
trackPointCreator.setClock(sensor1); trackPointCreator.setClock(sensor1);
sensorManager.onChanged(new Raw<>(sensor1, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(1), Distance.ZERO))); //Should be ignored //Should be ignored
sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(sensor1, 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.onChanged(new Raw<>(sensor2, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(2), Distance.of(2)))); sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(sensor2, 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";
@@ -829,12 +831,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.onChanged(new Raw<>(sensor3, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(3), Distance.of(12)))); sensorManager.onChange(new Raw<BluetoothHandlerRunningSpeedAndCadence.Data>(sensor3, 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);
sensorManager.onChanged(new Raw<>(sensor4, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(4), Distance.of(14)))); //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))));
// when // when
String gps2 = "2020-02-02T02:02:08Z"; String gps2 = "2020-02-02T02:02:08Z";
@@ -843,7 +846,8 @@ public class TrackRecordingServiceRecordingTest {
// when // when
String sensor5 = "2020-02-02T02:02:10Z"; String sensor5 = "2020-02-02T02:02:10Z";
trackPointCreator.setClock(sensor5); trackPointCreator.setClock(sensor5);
sensorManager.onChanged(new Raw<>(sensor5, new BluetoothHandlerRunningSpeedAndCadence.Data(Speed.of(5), Cadence.of(5), Distance.of(16)))); //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))));
// when // when
String gps3 = "2020-02-02T02:02:12Z"; String gps3 = "2020-02-02T02:02:12Z";
@@ -45,7 +45,7 @@ public class BluetoothConnectionManager implements Driver {
private static final String TAG = BluetoothConnectionManager.class.getSimpleName(); private static final String TAG = BluetoothConnectionManager.class.getSimpleName();
private final SensorManager.SensorDataChangedObserver observer; private final SensorManager observer;
private final SensorHandlerInterface sensorHandler; private final SensorHandlerInterface sensorHandler;
@@ -131,7 +131,7 @@ public class BluetoothConnectionManager implements Driver {
} }
}; };
BluetoothConnectionManager(BluetoothAdapter bluetoothAdapter, SensorManager.SensorDataChangedObserver observer, SensorHandlerInterface sensorHandler) { BluetoothConnectionManager(BluetoothAdapter bluetoothAdapter, SensorManager observer, SensorHandlerInterface sensorHandler) {
this.bluetoothAdapter = bluetoothAdapter; this.bluetoothAdapter = bluetoothAdapter;
this.observer = observer; this.observer = observer;
this.sensorHandler = sensorHandler; this.sensorHandler = sensorHandler;
@@ -29,7 +29,7 @@ public class BluetoothHandlerBarometricPressure implements SensorHandlerInterfac
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
AtmosphericPressure value = parseEnvironmentalSensing(characteristic); AtmosphericPressure value = parseEnvironmentalSensing(characteristic);
if (value == null) return; if (value == null) return;
@@ -29,7 +29,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
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) {
@@ -31,7 +31,7 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver 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.first != null) {
observer.onChange(new Raw<>(observer.getNow(), data.first)); observer.onChange(new Raw<>(observer.getNow(), data.first));
@@ -31,7 +31,7 @@ public class BluetoothHandlerCyclingPower implements SensorHandlerInterface {
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver 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) {
@@ -41,7 +41,7 @@ public class BluetoothHandlerHeartRate implements SensorHandlerInterface {
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver 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) {
@@ -34,7 +34,7 @@ public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInte
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver 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)); observer.onChange(new Raw<>(observer.getNow(), data));
} }
@@ -30,7 +30,7 @@ public class BluetoothHandlerTemperature implements SensorHandlerInterface {
} }
@Override @Override
public void handlePayload(SensorManager.SensorDataChangedObserver observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
Temperature value = parseEnvironmentalSensing(characteristic); Temperature value = parseEnvironmentalSensing(characteristic);
if (value == null) return; if (value == null) return;
@@ -49,7 +49,7 @@ public class BluetoothRemoteSensorManager implements SharedPreferences.OnSharedP
private final BluetoothConnectionManager cyclingPower; private final BluetoothConnectionManager cyclingPower;
private final BluetoothConnectionManager runningSpeedAndCadence; private final BluetoothConnectionManager runningSpeedAndCadence;
public BluetoothRemoteSensorManager(@NonNull Context context, @NonNull Handler handler, @Nullable SensorManager.SensorDataChangedObserver observer) { public BluetoothRemoteSensorManager(@NonNull Context context, @NonNull Handler handler, @Nullable SensorManager observer) {
this.context = context; this.context = context;
this.handler = handler; this.handler = handler;
@@ -18,7 +18,7 @@ public class GainManager {
private static final String TAG = GainManager.class.getSimpleName(); private static final String TAG = GainManager.class.getSimpleName();
private final SensorManager.SensorDataChangedObserver listener; private final SensorManager listener;
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> connect(); private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> connect();
@@ -26,7 +26,7 @@ public class GainManager {
private Handler handler; private Handler handler;
private Driver driver; private Driver driver;
public GainManager(SensorManager.SensorDataChangedObserver listener) { public GainManager(SensorManager listener) {
this.listener = listener; this.listener = listener;
} }
@@ -34,7 +34,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS
private TrackPointCreator trackPointCreator; private TrackPointCreator trackPointCreator;
private SensorManager.SensorDataChangedObserver observer; private SensorManager observer;
private Context context; private Context context;
private Handler handler; private Handler handler;
@@ -43,7 +43,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS
private Duration gpsInterval; private Duration gpsInterval;
private Distance thresholdHorizontalAccuracy; private Distance thresholdHorizontalAccuracy;
public GpsManager(TrackPointCreator trackPointCreator, SensorManager.SensorDataChangedObserver observer) { public GpsManager(TrackPointCreator trackPointCreator, SensorManager observer) {
this.trackPointCreator = trackPointCreator; this.trackPointCreator = trackPointCreator;
this.observer = observer; this.observer = observer;
} }
@@ -43,35 +43,6 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
private final TrackPointCreator observer; private final TrackPointCreator observer;
private final SensorDataChangedObserver listener = new SensorDataChangedObserver() {
@Override
public void onConnect(Aggregator<?, ?> aggregator) {
add(aggregator);
}
@Override
public void onChange(Raw<?> data) {
update(data);
observer.onChange();
}
@Override
public void onDisconnect(Aggregator<?, ?> aggregator) {
add(aggregator);
}
@Override
public void onRemove(Aggregator<?, ?> aggregator) {
remove(aggregator);
}
@Override
public Instant getNow() {
return observer.createNow();
}
};
private BluetoothRemoteSensorManager bluetoothSensorManager; private BluetoothRemoteSensorManager bluetoothSensorManager;
private GainManager altitudeSumManager; private GainManager altitudeSumManager;
@@ -89,9 +60,9 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
wakeLock = SystemUtils.acquireWakeLock(context, wakeLock); wakeLock = SystemUtils.acquireWakeLock(context, wakeLock);
gpsManager = new GpsManager(observer, listener); gpsManager = new GpsManager(observer, this);
altitudeSumManager = new GainManager(listener); altitudeSumManager = new GainManager(this);
bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, listener); bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, this);
onSharedPreferenceChanged(null, null); onSharedPreferenceChanged(null, null);
@@ -133,9 +104,23 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
if (gps != null) gps.resetAggregated(); if (gps != null) gps.resetAggregated();
} }
@VisibleForTesting @Deprecated
public void onChanged(Raw<?> data) { public void onConnect(Aggregator<?, ?> aggregator) {
listener.onChange(data); add(aggregator);
}
@Deprecated
public void onDisconnect(Aggregator<?, ?> aggregator) {
add(aggregator);
}
@Deprecated
public void onRemove(Aggregator<?, ?> aggregator) {
remove(aggregator);
}
public Instant getNow() {
return observer.createNow();
} }
public GpsManager getGpsManager() { public GpsManager getGpsManager() {
@@ -162,20 +147,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
} }
} }
public interface SensorDataChangedObserver { //TODO Inlined from SensorDataAggregator; Aggregators will be moved into Drivers.
void onConnect(Aggregator<?, ?> sensorData);
void onChange(Raw<?> sensorData);
void onDisconnect(Aggregator<?, ?> sensorData);
void onRemove(Aggregator<?, ?> sensorData);
Instant getNow();
}
//TODO Inline from SensorDataAggregator; Aggregators will be moved into Drivers.
@VisibleForTesting @VisibleForTesting
public AggregatorHeartRate heartRate; public AggregatorHeartRate heartRate;
@@ -252,8 +224,14 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
set(data, data); set(data, data);
} }
@Deprecated
public void onChange(Raw<?> data) {
update(data);
observer.onChange();
}
//TODO Refactor generic "fun" here: go explicit. //TODO Refactor generic "fun" here: go explicit.
public void update(@NonNull Raw<?> data) { private void update(@NonNull Raw<?> data) {
Object value = data.value(); Object value = data.value();
if (value instanceof HeartRate) { if (value instanceof HeartRate) {
@@ -3,6 +3,8 @@ package de.dennisguse.opentracks.sensors;
public enum SensorType { public enum SensorType {
NONE("NONE"), NONE("NONE"),
INTERNAL("INTERNAL"), INTERNAL("INTERNAL"),
//NOTE: preferenceValue of REMOTE should not be used anywhere.
REMOTE("*"); REMOTE("*");
private final String preferenceValue; private final String preferenceValue;
@@ -22,7 +22,7 @@ public class BarometerInternal implements Driver {
private static final int SAMPLING_PERIOD = (int) TimeUnit.SECONDS.toMicros(5); private static final int SAMPLING_PERIOD = (int) TimeUnit.SECONDS.toMicros(5);
private final SensorManager.SensorDataChangedObserver observer; private final SensorManager observer;
private Context context; private Context context;
@@ -43,7 +43,7 @@ public class BarometerInternal implements Driver {
} }
}; };
public BarometerInternal(@NonNull SensorManager.SensorDataChangedObserver observer) { public BarometerInternal(@NonNull SensorManager observer) {
this.observer = observer; this.observer = observer;
} }
@@ -13,5 +13,5 @@ public interface SensorHandlerInterface {
Aggregator<?, ?> createEmptySensorData(String address, String name); Aggregator<?, ?> createEmptySensorData(String address, String name);
void handlePayload(SensorManager.SensorDataChangedObserver observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic); void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic);
} }