From 80d7f8d92efea32bc9a29483203884963ff06fe6 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 3 Jan 2024 21:56:00 +0100 Subject: [PATCH] Bugfix: a BLE sensor disconnect should only replace the aggregator. Fixes #1799. --- .../sensors/BluetoothConnectionManager.java | 1 + .../opentracks/sensors/GainManager.java | 10 ++++++---- .../opentracks/sensors/SensorManager.java | 20 +++++++++++++------ .../handlers/AltitudeCorrectionManager.java | 1 - 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java index c3aabdc95..ac1cc7ee2 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java @@ -148,6 +148,7 @@ public class BluetoothConnectionManager implements Driver { Log.w(TAG, "NONE: going to disconnect"); if (isConnected()) { disconnect(); + observer.onRemove(sensorHandler.createEmptySensorData(null, null)); } return; } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java b/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java index 6dca516d4..fc5971383 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java @@ -52,7 +52,11 @@ public class GainManager implements SensorConnector { String address = PreferencesUtils.getBarometerSensorAddress(); 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 REMOTE -> driver = new BluetoothConnectionManager( @@ -63,9 +67,7 @@ public class GainManager implements SensorConnector { default -> throw new RuntimeException("Not implemented"); } - if (driver != null) { - driver.connect(context, handler, address); - } + driver.connect(context, handler, address); } private void onDisconnect() { diff --git a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java index 4104c778c..a4815ba0b 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java @@ -28,20 +28,26 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange private final SensorDataChangedObserver listener = new SensorDataChangedObserver() { @Override - public void onConnect(Aggregator sensorData) { - sensorDataSet.add(sensorData); + public void onConnect(Aggregator aggregator) { + sensorDataSet.add(aggregator); observer.onChange(new SensorDataSet(sensorDataSet)); } @Override - public void onChange(Raw sensorData) { - sensorDataSet.update(sensorData); + public void onChange(Raw data) { + sensorDataSet.update(data); observer.onChange(new SensorDataSet(sensorDataSet)); } @Override - public void onDisconnect(Aggregator sensorData) { - sensorDataSet.remove(sensorData); + public void onDisconnect(Aggregator aggregator) { + sensorDataSet.add(aggregator); + observer.onChange(new SensorDataSet(sensorDataSet)); + } + + @Override + public void onRemove(Aggregator aggregator) { + sensorDataSet.remove(aggregator); observer.onChange(new SensorDataSet(sensorDataSet)); } }; @@ -134,5 +140,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange void onChange(Raw sensorData); void onDisconnect(Aggregator sensorData); + + void onRemove(Aggregator sensorData); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java b/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java index 161cdaeba..f23588c34 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java @@ -30,7 +30,6 @@ public class AltitudeCorrectionManager { public void correctAltitude(Context context, TrackPoint trackPoint) { if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) { - Log.d(TAG, "No altitude correction necessary."); return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && altitudeConverter != null) {