From 17487961ad69b7a1b05b84c18d33b7795d84e5b9 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 5 Nov 2023 13:02:48 +0100 Subject: [PATCH] Bluetooth: upgrade minSDK=26 for simplification (race condition prevention). Part of #1424. --- build.gradle | 2 +- .../AbstractBluetoothConnectionManager.java | 18 +++++------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 038b7715d..3bfafad2e 100644 --- a/build.gradle +++ b/build.gradle @@ -69,7 +69,7 @@ android { buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\"" - minSdk 24 + minSdk 26 targetSdk 34 testInstrumentationRunner "de.dennisguse.opentracks.TestRunner" diff --git a/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java index 7a7185b68..6692ffabd 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java @@ -16,6 +16,7 @@ package de.dennisguse.opentracks.sensors; +import android.annotation.SuppressLint; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCallback; @@ -24,7 +25,6 @@ import android.bluetooth.BluetoothGattDescriptor; import android.bluetooth.BluetoothGattService; import android.bluetooth.BluetoothProfile; import android.content.Context; -import android.os.Build; import android.os.Handler; import android.util.Log; @@ -40,6 +40,7 @@ import de.dennisguse.opentracks.sensors.sensorData.SensorData; * Manages connection to a Bluetooth LE sensor and subscribes for onChange-notifications. * Also parses the transferred data into {@link SensorDataObserver}. */ +@SuppressLint("MissingPermission") public abstract class AbstractBluetoothConnectionManager { private static final String TAG = AbstractBluetoothConnectionManager.class.getSimpleName(); @@ -122,12 +123,7 @@ public abstract class AbstractBluetoothConnectionManager { SensorData sensorData = parsePayload(serviceMeasurementUUID.get(), gatt.getDevice().getName(), gatt.getDevice().getAddress(), characteristic); if (sensorData != null) { Log.d(TAG, "Decoded data from " + gatt.getDevice().getAddress() + ": " + sensorData); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - observer.onChanged(sensorData); - } else { - //TODO This might lead to NPEs in case of race conditions due to shutdown. - observer.getHandler().post(() -> observer.onChanged(sensorData)); - } + observer.onChanged(sensorData); } } }; @@ -150,11 +146,8 @@ public abstract class AbstractBluetoothConnectionManager { Log.d(TAG, "Connecting to: " + device); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - bluetoothGatt = device.connectGatt(context, false, connectCallback, BluetoothDevice.TRANSPORT_AUTO, 0, this.observer.getHandler()); - } else { - bluetoothGatt = device.connectGatt(context, false, connectCallback); - } + bluetoothGatt = device.connectGatt(context, false, connectCallback, BluetoothDevice.TRANSPORT_AUTO, 0, this.observer.getHandler()); + SensorData sensorData = createEmptySensorData(bluetoothGatt.getDevice().getAddress()); observer.onChanged(sensorData); } @@ -163,7 +156,6 @@ public abstract class AbstractBluetoothConnectionManager { observer.onDisconnecting(createEmptySensorData(bluetoothGatt.getDevice().getAddress())); } - synchronized void disconnect() { if (bluetoothGatt == null) { Log.w(TAG, "Cannot disconnect if not connected.");