From 5e6bf798a415489512162910068b6ab121000fb8 Mon Sep 17 00:00:00 2001 From: MrYoranimo Date: Tue, 9 Apr 2024 14:56:18 +0200 Subject: [PATCH] Xiaomi: implement setAutoReconnect on XiaomiSupport The DeviceCommunicationService calls `#setAutoReconnect` on new device supports before it calls the connect method. Since this method did not get relayed to the connection-specific support classes, Xiaomi devices using a BLE connection did not automatically reconnect because the `mAutoReconnect` field in `AbstractBTLEDeviceSupport` never got set. --- .../service/devices/xiaomi/XiaomiBleSupport.java | 10 ++++++++++ .../devices/xiaomi/XiaomiConnectionSupport.java | 1 + .../service/devices/xiaomi/XiaomiSppSupport.java | 6 ++++++ .../service/devices/xiaomi/XiaomiSupport.java | 8 ++++++++ 4 files changed, 25 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiBleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiBleSupport.java index 523ef13da..bf9d4e5ae 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiBleSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiBleSupport.java @@ -62,6 +62,11 @@ public class XiaomiBleSupport extends XiaomiConnectionSupport { return XiaomiUuids.BLE_UUIDS.keySet(); } + @Override + public boolean getAutoReconnect() { + return mXiaomiSupport.getAutoReconnect(); + } + @Override protected TransactionBuilder initializeDevice(final TransactionBuilder builder) { XiaomiUuids.XiaomiBleUuidSet uuidSet = null; @@ -267,6 +272,11 @@ public class XiaomiBleSupport extends XiaomiConnectionSupport { this.characteristicDataUpload.write(taskName, chunk, callback); } + @Override + public void setAutoReconnect(boolean enabled) { + this.commsSupport.setAutoReconnect(enabled); + } + /** * Realistically, this function should only be used during auth, as we must schedule the command after * notifications were enabled on the characteristics, and for that we need the builder to guarantee the diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiConnectionSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiConnectionSupport.java index 1b380977f..ce5a9a4fd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiConnectionSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiConnectionSupport.java @@ -33,4 +33,5 @@ public abstract class XiaomiConnectionSupport { public abstract void setContext(final GBDevice device, final BluetoothAdapter adapter, final Context context); public abstract void sendCommand(final String taskName, final XiaomiProto.Command command); public abstract void sendDataChunk(final String taskName, final byte[] chunk, @Nullable final XiaomiCharacteristic.SendCallback callback); + public abstract void setAutoReconnect(final boolean enabled); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSppSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSppSupport.java index ac517076d..8a991d7ec 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSppSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSppSupport.java @@ -323,4 +323,10 @@ public class XiaomiSppSupport extends XiaomiConnectionSupport { callback.onSend(); } } + + @Override + public void setAutoReconnect(boolean enabled) { + // for sanity, but this is not supposed to be set on BT Classic devices + this.commsSupport.setAutoReconnect(enabled); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java index 204bd6f48..d0681e2c9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java @@ -114,6 +114,14 @@ public class XiaomiSupport extends AbstractDeviceSupport { return true; } + @Override + public void setAutoReconnect(boolean enabled) { + super.setAutoReconnect(enabled); + if (this.connectionSupport != null) { + this.connectionSupport.setAutoReconnect(enabled); + } + } + @Override public boolean getImplicitCallbackModify() { return false;