Bugfix: a BLE sensor disconnect should only replace the aggregator.

Fixes #1799.
This commit is contained in:
Dennis Guse
2024-01-03 21:56:00 +01:00
parent d038f5c33a
commit 80d7f8d92e
4 changed files with 21 additions and 11 deletions
@@ -148,6 +148,7 @@ public class BluetoothConnectionManager implements Driver {
Log.w(TAG, "NONE: going to disconnect"); Log.w(TAG, "NONE: going to disconnect");
if (isConnected()) { if (isConnected()) {
disconnect(); disconnect();
observer.onRemove(sensorHandler.createEmptySensorData(null, null));
} }
return; return;
} }
@@ -52,7 +52,11 @@ public class GainManager implements SensorConnector {
String address = PreferencesUtils.getBarometerSensorAddress(); String address = PreferencesUtils.getBarometerSensorAddress();
switch (PreferencesUtils.getSensorType(address)) { switch (PreferencesUtils.getSensorType(address)) {
case NONE -> driver = null; case NONE -> {
driver = null;
listener.onRemove(new AggregatorBarometer(null, null));
return;
}
case INTERNAL -> driver = new BarometerInternal(listener); case INTERNAL -> driver = new BarometerInternal(listener);
case REMOTE -> driver = case REMOTE -> driver =
new BluetoothConnectionManager( new BluetoothConnectionManager(
@@ -63,9 +67,7 @@ public class GainManager implements SensorConnector {
default -> throw new RuntimeException("Not implemented"); default -> throw new RuntimeException("Not implemented");
} }
if (driver != null) { driver.connect(context, handler, address);
driver.connect(context, handler, address);
}
} }
private void onDisconnect() { private void onDisconnect() {
@@ -28,20 +28,26 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
private final SensorDataChangedObserver listener = new SensorDataChangedObserver() { private final SensorDataChangedObserver listener = new SensorDataChangedObserver() {
@Override @Override
public void onConnect(Aggregator<?, ?> sensorData) { public void onConnect(Aggregator<?, ?> aggregator) {
sensorDataSet.add(sensorData); sensorDataSet.add(aggregator);
observer.onChange(new SensorDataSet(sensorDataSet)); observer.onChange(new SensorDataSet(sensorDataSet));
} }
@Override @Override
public void onChange(Raw<?> sensorData) { public void onChange(Raw<?> data) {
sensorDataSet.update(sensorData); sensorDataSet.update(data);
observer.onChange(new SensorDataSet(sensorDataSet)); observer.onChange(new SensorDataSet(sensorDataSet));
} }
@Override @Override
public void onDisconnect(Aggregator<?, ?> sensorData) { public void onDisconnect(Aggregator<?, ?> aggregator) {
sensorDataSet.remove(sensorData); sensorDataSet.add(aggregator);
observer.onChange(new SensorDataSet(sensorDataSet));
}
@Override
public void onRemove(Aggregator<?, ?> aggregator) {
sensorDataSet.remove(aggregator);
observer.onChange(new SensorDataSet(sensorDataSet)); observer.onChange(new SensorDataSet(sensorDataSet));
} }
}; };
@@ -134,5 +140,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
void onChange(Raw<?> sensorData); void onChange(Raw<?> sensorData);
void onDisconnect(Aggregator<?, ?> sensorData); void onDisconnect(Aggregator<?, ?> sensorData);
void onRemove(Aggregator<?, ?> sensorData);
} }
} }
@@ -30,7 +30,6 @@ public class AltitudeCorrectionManager {
public void correctAltitude(Context context, TrackPoint trackPoint) { public void correctAltitude(Context context, TrackPoint trackPoint) {
if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) { if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) {
Log.d(TAG, "No altitude correction necessary.");
return; return;
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && altitudeConverter != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && altitudeConverter != null) {