Fix: Hide only all-day HR interval and activity monitoring for devices without display

This commit is contained in:
Gideon Zenz
2026-03-12 23:22:15 +01:00
parent b5e6fa82a6
commit 7096e11dcf
2 changed files with 24 additions and 7 deletions
@@ -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);
@@ -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);
}
}