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";
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";
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";
trackPointCreator.setClock(stopTime);
@@ -815,12 +816,13 @@ public class TrackRecordingServiceRecordingTest {
// when
String sensor1 = "2020-02-02T02:02:03Z";
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
String sensor2 = "2020-02-02T02:02:04Z";
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
String gps1 = "2020-02-02T02:02:05Z";
@@ -829,12 +831,13 @@ public class TrackRecordingServiceRecordingTest {
// when
String sensor3 = "2020-02-02T02:02:06Z";
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
String sensor4 = "2020-02-02T02:02:07Z";
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
String gps2 = "2020-02-02T02:02:08Z";
@@ -843,7 +846,8 @@ public class TrackRecordingServiceRecordingTest {
// when
String sensor5 = "2020-02-02T02:02:10Z";
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
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 final SensorManager.SensorDataChangedObserver observer;
private final SensorManager observer;
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.observer = observer;
this.sensorHandler = sensorHandler;
@@ -29,7 +29,7 @@ public class BluetoothHandlerBarometricPressure implements SensorHandlerInterfac
}
@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);
if (value == null) return;
@@ -29,7 +29,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
}
@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)) {
BluetoothHandlerCyclingPower.Data data = BluetoothHandlerCyclingPower.parseCyclingPower(characteristic);
if (data != null && data.crank() != null) {
@@ -31,7 +31,7 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf
}
@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);
if (data.first != null) {
observer.onChange(new Raw<>(observer.getNow(), data.first));
@@ -31,7 +31,7 @@ public class BluetoothHandlerCyclingPower implements SensorHandlerInterface {
}
@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);
if (cyclingPower != null) {
@@ -41,7 +41,7 @@ public class BluetoothHandlerHeartRate implements SensorHandlerInterface {
}
@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);
if (heartRate != null) {
@@ -34,7 +34,7 @@ public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInte
}
@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);
observer.onChange(new Raw<>(observer.getNow(), data));
}
@@ -30,7 +30,7 @@ public class BluetoothHandlerTemperature implements SensorHandlerInterface {
}
@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);
if (value == null) return;
@@ -49,7 +49,7 @@ public class BluetoothRemoteSensorManager implements SharedPreferences.OnSharedP
private final BluetoothConnectionManager cyclingPower;
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.handler = handler;
@@ -18,7 +18,7 @@ public class GainManager {
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();
@@ -26,7 +26,7 @@ public class GainManager {
private Handler handler;
private Driver driver;
public GainManager(SensorManager.SensorDataChangedObserver listener) {
public GainManager(SensorManager listener) {
this.listener = listener;
}
@@ -34,7 +34,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS
private TrackPointCreator trackPointCreator;
private SensorManager.SensorDataChangedObserver observer;
private SensorManager observer;
private Context context;
private Handler handler;
@@ -43,7 +43,7 @@ public class GpsManager implements LocationListenerCompat, GpsStatusManager.GpsS
private Duration gpsInterval;
private Distance thresholdHorizontalAccuracy;
public GpsManager(TrackPointCreator trackPointCreator, SensorManager.SensorDataChangedObserver observer) {
public GpsManager(TrackPointCreator trackPointCreator, SensorManager observer) {
this.trackPointCreator = trackPointCreator;
this.observer = observer;
}
@@ -43,35 +43,6 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
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 GainManager altitudeSumManager;
@@ -89,9 +60,9 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
wakeLock = SystemUtils.acquireWakeLock(context, wakeLock);
gpsManager = new GpsManager(observer, listener);
altitudeSumManager = new GainManager(listener);
bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, listener);
gpsManager = new GpsManager(observer, this);
altitudeSumManager = new GainManager(this);
bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, this);
onSharedPreferenceChanged(null, null);
@@ -133,9 +104,23 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
if (gps != null) gps.resetAggregated();
}
@VisibleForTesting
public void onChanged(Raw<?> data) {
listener.onChange(data);
@Deprecated
public void onConnect(Aggregator<?, ?> aggregator) {
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() {
@@ -162,20 +147,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
}
}
public interface SensorDataChangedObserver {
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.
//TODO Inlined from SensorDataAggregator; Aggregators will be moved into Drivers.
@VisibleForTesting
public AggregatorHeartRate heartRate;
@@ -252,8 +224,14 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
set(data, data);
}
@Deprecated
public void onChange(Raw<?> data) {
update(data);
observer.onChange();
}
//TODO Refactor generic "fun" here: go explicit.
public void update(@NonNull Raw<?> data) {
private void update(@NonNull Raw<?> data) {
Object value = data.value();
if (value instanceof HeartRate) {
@@ -3,6 +3,8 @@ package de.dennisguse.opentracks.sensors;
public enum SensorType {
NONE("NONE"),
INTERNAL("INTERNAL"),
//NOTE: preferenceValue of REMOTE should not be used anywhere.
REMOTE("*");
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 final SensorManager.SensorDataChangedObserver observer;
private final SensorManager observer;
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;
}
@@ -13,5 +13,5 @@ public interface SensorHandlerInterface {
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);
}