From 4490fddb7ed059eac7960ef926b50091704a4a91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Tue, 12 May 2026 22:03:13 +0100 Subject: [PATCH] Casio: Disable connection priority change on connection --- .../devices/AbstractDeviceCoordinator.java | 9 ++++++++- .../gadgetbridge/devices/DeviceCoordinator.java | 6 ++++++ .../devices/casio/CasioDeviceCoordinator.java | 5 +++++ .../service/btle/AbstractBTLEMultiDeviceSupport.java | 11 +++++++---- .../service/btle/AbstractBTLESingleDeviceSupport.java | 11 +++++++---- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java index d3fe3b6da7..56bd7fa70d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java @@ -990,7 +990,9 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator { if (connectionType.usesBluetoothClassic() || connectionType.usesBluetoothLE()) { settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_reconnect_periodic); settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_device_connect_back); - settings = ArrayUtils.add(settings, R.xml.devicesettings_connection_priority_low_power); + if (supportsConnectionPriority()) { + settings = ArrayUtils.add(settings, R.xml.devicesettings_connection_priority_low_power); + } } return settings; @@ -1201,4 +1203,9 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator { // 2 seconds. return 2000; } + + @Override + public boolean supportsConnectionPriority() { + return true; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index 4512f416b4..7542a75218 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -965,4 +965,10 @@ public interface DeviceCoordinator { * @return delay in ms for this device to wait before a reconnection attempt is made. */ int getReconnectionDelay(); + + /** + * Returns whether the device supports changing bluetooth connection priority. + * @return + */ + boolean supportsConnectionPriority(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/casio/CasioDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/casio/CasioDeviceCoordinator.java index 2f78543859..17dfc6f767 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/casio/CasioDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/casio/CasioDeviceCoordinator.java @@ -46,4 +46,9 @@ public abstract class CasioDeviceCoordinator extends AbstractBLEDeviceCoordinato public DeviceKind getDeviceKind(@NonNull GBDevice device) { return DeviceKind.WATCH; } + + @Override + public boolean supportsConnectionPriority() { + return false; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEMultiDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEMultiDeviceSupport.java index d493b716f6..044a813f0b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEMultiDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEMultiDeviceSupport.java @@ -458,10 +458,13 @@ public abstract class AbstractBTLEMultiDeviceSupport extends AbstractBTLEDeviceS initializeDevice(builder, deviceIdx); - boolean lowPower = getDevicePrefs().getConnectionPriorityLowPower(); - // have to explicitly request normal ("balanced") as some Android devices remember the last - // request. Else low power would become a set once option. - builder.requestConnectionPriority(lowPower ? BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER : BluetoothGatt.CONNECTION_PRIORITY_BALANCED); + if (getDevice().getDeviceCoordinator().supportsConnectionPriority()) { + final boolean lowPower = getDevicePrefs().getConnectionPriorityLowPower(); + // have to explicitly request normal ("balanced") as some Android devices remember the last + // request. Else low power would become a set once option. + // #5054 / #5956 - However, on some devices requesting it altogether can make the connection fail + builder.requestConnectionPriority(lowPower ? BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER : BluetoothGatt.CONNECTION_PRIORITY_BALANCED); + } builder.queue(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLESingleDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLESingleDeviceSupport.java index fc8ba6daf0..f661645d09 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLESingleDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLESingleDeviceSupport.java @@ -366,10 +366,13 @@ public abstract class AbstractBTLESingleDeviceSupport extends AbstractBTLEDevice initializeDevice(builder); - boolean lowPower = getDevicePrefs().getConnectionPriorityLowPower(); - // have to explicitly request normal ("balanced") as some Android devices remember the last - // request. Else low power would become a set once option. - builder.requestConnectionPriority(lowPower ? BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER : BluetoothGatt.CONNECTION_PRIORITY_BALANCED); + if (getDevice().getDeviceCoordinator().supportsConnectionPriority()) { + final boolean lowPower = getDevicePrefs().getConnectionPriorityLowPower(); + // have to explicitly request normal ("balanced") as some Android devices remember the last + // request. Else low power would become a set once option. + // #5054 / #5956 - However, on some devices requesting it altogether can make the connection fail + builder.requestConnectionPriority(lowPower ? BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER : BluetoothGatt.CONNECTION_PRIORITY_BALANCED); + } builder.queue(); }