From 7096e11dcfc20ab2afd793d8cc68b5f0b41e0354 Mon Sep 17 00:00:00 2001 From: Gideon Zenz Date: Tue, 17 Feb 2026 20:27:10 +0100 Subject: [PATCH] Fix: Hide only all-day HR interval and activity monitoring for devices without display --- .../capabilities/HeartRateCapability.java | 15 ++++++++++++--- .../huami/zeppos/ZeppOsSettingsCustomizer.java | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/HeartRateCapability.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/HeartRateCapability.java index a7e70e0f72..5864fd7ed0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/HeartRateCapability.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/HeartRateCapability.java @@ -36,6 +36,7 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsHandler; +import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator; public class HeartRateCapability { public enum MeasurementInterval { @@ -95,8 +96,16 @@ public class HeartRateCapability { final ListPreference heartrateAlertLow = handler.findPreference(PREF_HEARTRATE_ALERT_LOW_THRESHOLD); // Newer devices that have low alert threshold can only use it if measurement interval is smart (-1) or 1 minute final boolean hrAlertsNeedSmartOrOne = heartrateAlertActiveHigh != null && heartrateAlertHigh != null && heartrateAlertLow != null && heartrateMeasurementInterval != null; + // Devices without display (like Helio Strap) have continuous HR monitoring by default + final boolean deviceHasContinuousHr; + if (handler.getDevice().getDeviceCoordinator() instanceof ZeppOsCoordinator) { + deviceHasContinuousHr = !((ZeppOsCoordinator) handler.getDevice().getDeviceCoordinator()).hasDisplay(); + } else { + deviceHasContinuousHr = false; + } if (hrAlertsNeedSmartOrOne) { - final boolean hrMonitoringIsSmartOrOne = heartrateMeasurementInterval.getValue().equals("60") || + final boolean hrMonitoringIsSmartOrOne = deviceHasContinuousHr || + heartrateMeasurementInterval.getValue().equals("60") || heartrateMeasurementInterval.getValue().equals("-1"); heartrateAlertHigh.setEnabled(hrMonitoringIsSmartOrOne); @@ -132,8 +141,8 @@ public class HeartRateCapability { heartrateAlertEnabled.setEnabled(isMeasurementIntervalEnabled); } if (hrAlertsNeedSmartOrOne) { - // Same as above, check if smart or 1 minute - final boolean hrMonitoringIsSmartOrOne = newVal.equals("60") || newVal.equals("-1"); + // Same as above, check if smart or 1 minute (or device has continuous HR) + final boolean hrMonitoringIsSmartOrOne = deviceHasContinuousHr || newVal.equals("60") || newVal.equals("-1"); heartrateAlertActiveHigh.setEnabled(hrMonitoringIsSmartOrOne); heartrateAlertHigh.setEnabled(hrMonitoringIsSmartOrOne); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsSettingsCustomizer.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsSettingsCustomizer.java index 728e224c36..51a7de53f2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsSettingsCustomizer.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsSettingsCustomizer.java @@ -263,11 +263,19 @@ public class ZeppOsSettingsCustomizer extends HuamiSettingsCustomizer { setupGpsPreference(handler, prefs); setupButtonClickPreferences(handler); - // Hide heart rate monitoring for devices without display like Helio Strap (they have continuous monitoring by default) + // For devices without display (like Helio Strap): they have continuous HR monitoring by default + // Hide the preferences that can't be changed - the actual values come from the device on connection if (!coordinator.hasDisplay()) { - final Preference heartRateMonitoringPref = handler.findPreference(DeviceSettingsPreferenceConst.PREF_SCREEN_HEARTRATE_MONITORING); - if (heartRateMonitoringPref != null) { - heartRateMonitoringPref.setVisible(false); + // Hide the entire "All-day heart rate monitoring" category (contains only the interval preference) + final Preference allDayHrCategory = handler.findPreference("pref_key_header_heartrate_allday"); + if (allDayHrCategory != null) { + allDayHrCategory.setVisible(false); + } + + // Hide activity monitoring preference + final Preference heartRateActivityMonitoring = handler.findPreference(DeviceSettingsPreferenceConst.PREF_HEARTRATE_ACTIVITY_MONITORING); + if (heartRateActivityMonitoring != null) { + heartRateActivityMonitoring.setVisible(false); } }