From 10cd4e09b1b272a68b797c4c72f76d2f8c8ff7a8 Mon Sep 17 00:00:00 2001 From: Damien 'Psolyca' Gaignon Date: Sun, 31 Mar 2024 19:25:02 +0200 Subject: [PATCH] [Huawei] Add enable SpO2 force option --- .../DeviceSettingsPreferenceConst.java | 1 + .../devices/huawei/HuaweiCoordinator.java | 4 ++++ .../devices/huawei/HuaweiSettingsCustomizer.java | 14 +++++++++++++- app/src/main/res/values/strings.xml | 2 ++ .../main/res/xml/devicesettings_huawei_debug.xml | 8 ++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) 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 fa33186f6..7edd6506b 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 @@ -419,6 +419,7 @@ public class DeviceSettingsPreferenceConst { public static final String PREF_FORCE_ENABLE_WEAR_LOCATION = "pref_force_enable_wear_location"; public static final String PREF_FORCE_DND_SUPPORT = "pref_force_dnd_support"; public static final String PREF_FORCE_ENABLE_HEARTRATE_SUPPORT = "pref_force_enable_heartrate_support"; + public static final String PREF_FORCE_ENABLE_SPO2_SUPPORT = "pref_force_enable_spo2_support"; public static final String PREF_IGNORE_WAKEUP_STATUS_START = "pref_force_ignore_wakeup_status_start"; public static final String PREF_IGNORE_WAKEUP_STATUS_END = "pref_force_ignore_wakeup_status_end"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java index b8d32ad1c..61f1d7a17 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiCoordinator.java @@ -334,6 +334,10 @@ public class HuaweiCoordinator { return supportsCommandForService(0x07, 0x24); } + public boolean supportsSPo2(GBDevice gbDevice) { + return supportsSPo2() || getForceOption(gbDevice, PREF_FORCE_ENABLE_SPO2_SUPPORT); + } + public boolean supportsFitnessThresholdValue() { return supportsCommandForService(0x07, 0x29); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSettingsCustomizer.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSettingsCustomizer.java index 7229402f9..2ad03622c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSettingsCustomizer.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiSettingsCustomizer.java @@ -103,6 +103,11 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize if (this.coordinator.supportsHeartRate(handler.getDevice())) { heartRate.setVisible(true); } + final ListPreference spo2 = handler.findPreference(PREF_SPO_AUTOMATIC_ENABLE); + spo2.setVisible(false); + if (this.coordinator.supportsSPo2(handler.getDevice())) { + spo2.setVisible(true); + } } } @@ -114,6 +119,7 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize handler.addPreferenceHandlerFor(PREF_FORCE_ENABLE_WEAR_LOCATION); handler.addPreferenceHandlerFor(PREF_FORCE_DND_SUPPORT); handler.addPreferenceHandlerFor(PREF_FORCE_ENABLE_HEARTRATE_SUPPORT); + handler.addPreferenceHandlerFor(PREF_FORCE_ENABLE_SPO2_SUPPORT); handler.addPreferenceHandlerFor(PREF_HUAWEI_WORKMODE); handler.addPreferenceHandlerFor(PREF_HUAWEI_TRUSLEEP); @@ -125,7 +131,8 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize boolean supportsSmartAlarm = this.coordinator.supportsSmartAlarm(); boolean supportsWearLocation = this.coordinator.supportsWearLocation(); boolean supportsHeartRate = this.coordinator.supportsHeartRate(); - if (!supportsSmartAlarm || !supportsWearLocation || !supportsHeartRate) { + boolean supportsSpO2 = this.coordinator.supportsSPo2(); + if (!supportsSmartAlarm || !supportsWearLocation || !supportsHeartRate || !supportsSpO2) { forceOptions.setVisible(true); final SwitchPreferenceCompat forceSmartAlarm = handler.findPreference(PREF_FORCE_ENABLE_SMART_ALARM); forceSmartAlarm.setVisible(false); @@ -142,6 +149,11 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize if (!supportsHeartRate) { forceHeartRate.setVisible(true); } + final SwitchPreferenceCompat forceSpO2 = handler.findPreference(PREF_FORCE_ENABLE_SPO2_SUPPORT); + forceSpO2.setVisible(false); + if (!supportsSpO2) { + forceSpO2.setVisible(true); + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2fee482c0..9a1805359 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2408,6 +2408,8 @@ Force Do Not Disturb support.\nUSE AT YOUR OWN RISK Force heart rate support Force enable heart rate support.\nUSE AT YOUR OWN RISK + Force SpO2 support + Force enable SpO2 support.\nUSE AT YOUR OWN RISK Ignore wakeup start status May help with proper sleep detection. Visible immediately in the daily activities view. Ignore wakeup end status diff --git a/app/src/main/res/xml/devicesettings_huawei_debug.xml b/app/src/main/res/xml/devicesettings_huawei_debug.xml index 3edcd2e4e..4aab40627 100644 --- a/app/src/main/res/xml/devicesettings_huawei_debug.xml +++ b/app/src/main/res/xml/devicesettings_huawei_debug.xml @@ -55,6 +55,14 @@ android:title="@string/pref_force_enable_heartrate_support" android:summary="@string/pref_force_enable_heartrate_support_summary" /> + +