From 9c85d5995c1295dc613acb42a7827f62365daa9b Mon Sep 17 00:00:00 2001 From: Gideon Zenz Date: Sun, 4 Jan 2026 17:14:51 +0100 Subject: [PATCH] Zepp OS: Enable workout detection sensitivity for Helio Strap - Add supportsWorkoutActivityTypesConfiguration() to enable workout settings for devices without display - Add supportsWorkoutDetectionCategories() to control visibility of workout categories - Update ZeppOsSettingsCustomizer to hide workout categories preference for devices that don't support it - Enable workout detection sensitivity configuration for Amazfit Helio Strap - Workout categories selector is hidden for Helio Strap, only alert and sensitivity settings are shown This allows the Helio Strap to configure automatic workout detection sensitivity despite having no display. --- .../huami/zeppos/ZeppOsCoordinator.java | 26 +++++++++++++------ .../zeppos/ZeppOsSettingsCustomizer.java | 11 ++++++++ .../straps/AmazfitHelioStrapCoordinator.java | 10 +++++++ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsCoordinator.java index 8f380494c5..b8c9cd2929 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsCoordinator.java @@ -466,16 +466,18 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator { // // Workout // - if (hasDisplay()) { + if (hasDisplay() || supportsWorkoutActivityTypesConfiguration()) { final List workout = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.WORKOUT); - if (hasGps(device)) { - workout.add(R.xml.devicesettings_gps_agps); - } else { - // If the device has GPS, it doesn't report workout start/end to the phone - workout.add(R.xml.devicesettings_workout_start_on_phone); - workout.add(R.xml.devicesettings_workout_send_gps_to_band); + if (hasDisplay()) { + if (hasGps(device)) { + workout.add(R.xml.devicesettings_gps_agps); + } else { + // If the device has GPS, it doesn't report workout start/end to the phone + workout.add(R.xml.devicesettings_workout_start_on_phone); + workout.add(R.xml.devicesettings_workout_send_gps_to_band); + } + workout.add(R.xml.devicesettings_workout_keep_screen_on); } - workout.add(R.xml.devicesettings_workout_keep_screen_on); workout.add(R.xml.devicesettings_workout_detection); } @@ -649,6 +651,14 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator { return false; } + public boolean supportsWorkoutActivityTypesConfiguration() { + return hasDisplay(); + } + + public boolean supportsWorkoutDetectionCategories() { + return hasDisplay(); + } + public boolean supportsFtpServer(final GBDevice device) { return false; } 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 242e618646..df1b71dc76 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 @@ -54,9 +54,11 @@ import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class ZeppOsSettingsCustomizer extends HuamiSettingsCustomizer { private static final Logger LOG = LoggerFactory.getLogger(ZeppOsSettingsCustomizer.class); + private final GBDevice device; public ZeppOsSettingsCustomizer(final GBDevice device, final List vibrationPatternNotificationTypes) { super(device, vibrationPatternNotificationTypes); + this.device = device; } @Override @@ -202,6 +204,15 @@ public class ZeppOsSettingsCustomizer extends HuamiSettingsCustomizer { ); } + // Hide workout detection categories for devices without display (e.g., Helio Strap) + final ZeppOsCoordinator coordinator = (ZeppOsCoordinator) device.getDeviceCoordinator(); + if (!coordinator.supportsWorkoutDetectionCategories()) { + final Preference workoutCategoriesPref = handler.findPreference("workout_detection_categories"); + if (workoutCategoriesPref != null) { + workoutCategoriesPref.setVisible(false); + } + } + // Hides the headers if none of the preferences under them are available hidePrefIfNoneVisible(handler, DeviceSettingsPreferenceConst.PREF_HEADER_APPS, Arrays.asList( LoyaltyCardsSettingsConst.PREF_KEY_LOYALTY_CARDS diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/straps/AmazfitHelioStrapCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/straps/AmazfitHelioStrapCoordinator.java index 24adbea0bf..eaff59052f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/straps/AmazfitHelioStrapCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/straps/AmazfitHelioStrapCoordinator.java @@ -52,6 +52,16 @@ public class AmazfitHelioStrapCoordinator extends ZeppOsCoordinator { return false; } + @Override + public boolean supportsWorkoutActivityTypesConfiguration() { + return true; + } + + @Override + public boolean supportsWorkoutDetectionCategories() { + return false; + } + @Override public DeviceKind getDeviceKind(@NonNull GBDevice device) { return DeviceKind.FITNESS_BAND;