diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java
index dfc6bdb00b..6e9bfc5e88 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java
@@ -624,4 +624,5 @@ public class DeviceSettingsPreferenceConst {
public static final String PREF_DISPLAY_ENABLED_ALL_DAY = "display_all_day";
public static final String PREF_DISPLAY_ON_START = "display_on_start";
public static final String PREF_DISPLAY_ON_END = "display_on_end";
+ public static final String PREF_CONNECTION_PRIORITY_LOW_POWER = "connection_priority_low_power";
}
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 914b7ae02b..535e6bb8be 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractDeviceCoordinator.java
@@ -1,7 +1,7 @@
-/* Copyright (C) 2015-2024 akasaka / Genjitsu Labs, Alicia Hormann, Andreas
+/* Copyright (C) 2015-2025 akasaka / Genjitsu Labs, Alicia Hormann, Andreas
Shimokawa, Arjan Schrijver, Carsten Pfeiffer, Daniel Dakhno, Daniele Gobbetti,
Davis Mosenkovs, Dmitry Markin, José Rebelo, Matthieu Baerts, Nephiel,
- Petr Vaněk, Taavi Eomäe, Johannes Krude
+ Petr Vaněk, Taavi Eomäe, Johannes Krude, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -800,6 +800,10 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
settings = ArrayUtils.insert(0, settings, R.xml.devicesettings_reconnect_bl_classic);
}
+ if (connectionType.usesBluetoothLE() || connectionType.usesBluetoothClassic()){
+ settings = ArrayUtils.add(settings, R.xml.devicesettings_connection_priority_low_power);
+ }
+
return settings;
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java
index 1e088ea0d6..72bc8f04fa 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/AbstractBTLEDeviceSupport.java
@@ -1,5 +1,6 @@
-/* Copyright (C) 2015-2024 Andreas Böhler, Arjan Schrijver, Carsten Pfeiffer,
- Daniel Dakhno, Daniele Gobbetti, Johannes Krude, JohnnySun, José Rebelo
+/* Copyright (C) 2015-2025 Andreas Böhler, Arjan Schrijver, Carsten Pfeiffer,
+ Daniel Dakhno, Daniele Gobbetti, Johannes Krude, JohnnySun, José Rebelo,
+ Thomas Kuehne
This file is part of Gadgetbridge.
@@ -369,7 +370,14 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
bleApi.initializeDevice(builder);
}
- initializeDevice(builder).queue(getQueue());
+ 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);
+
+ builder.queue(getQueue());
}
@Override
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 7dd430d26c..96b493e7da 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
@@ -454,7 +454,14 @@ public abstract class AbstractBTLEMultiDeviceSupport extends AbstractDeviceSuppo
bleApis[deviceIdx].initializeDevice(builder);
}
- initializeDevice(builder, deviceIdx).queue(getQueue(deviceIdx));
+ 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);
+
+ builder.queue(getQueue(deviceIdx));
}
@Override
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/preferences/DevicePrefs.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/preferences/DevicePrefs.java
index 95f626c25b..ff3f861cba 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/preferences/DevicePrefs.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/preferences/DevicePrefs.java
@@ -1,6 +1,6 @@
-/* Copyright (C) 2016-2024 Andreas Shimokawa, Anemograph, Carsten Pfeiffer,
+/* Copyright (C) 2016-2025 Andreas Shimokawa, Anemograph, Carsten Pfeiffer,
Daniel Dakhno, Daniele Gobbetti, Davis Mosenkovs, Dikay900, Felix Konstantin
- Maurer, José Rebelo, Petr Vaněk, Johannes Krude
+ Maurer, José Rebelo, Petr Vaněk, Johannes Krude, Thomas Kuehne
This file is part of Gadgetbridge.
@@ -120,6 +120,10 @@ public class DevicePrefs extends Prefs {
return getBoolean(PREF_ALLOW_HIGH_MTU, true);
}
+ public boolean getConnectionPriorityLowPower() {
+ return getBoolean(PREF_CONNECTION_PRIORITY_LOW_POWER, false);
+ }
+
public DeviceCoordinator.ConnectionType getForcedConnectionTypeFromPrefs() {
final String connTypePref = getString(DeviceSettingsPreferenceConst.PREF_FORCE_CONNECTION_TYPE, "BOTH");
diff --git a/app/src/main/res/drawable/ic_low_priority.xml b/app/src/main/res/drawable/ic_low_priority.xml
new file mode 100644
index 0000000000..52811e6e4d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_low_priority.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 353bb38dcd..d25cc2122e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -469,6 +469,8 @@
Off - ignore, On - reject
Shake wrist ignore/reject call
Duplicates watch button action
+ Request low power
+ Reduce bluetooth priority and data rate connection parameters.
Device settings
Force synchronize time
diff --git a/app/src/main/res/xml/devicesettings_connection_priority_low_power.xml b/app/src/main/res/xml/devicesettings_connection_priority_low_power.xml
new file mode 100644
index 0000000000..19346763c0
--- /dev/null
+++ b/app/src/main/res/xml/devicesettings_connection_priority_low_power.xml
@@ -0,0 +1,10 @@
+
+
+
+