diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java index f5ec0b60e..254078106 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/XiaomiCoordinator.java @@ -581,4 +581,14 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { public boolean checkDecryptionMac() { return true; } + + /** + * Whether the device supports alarms. This differs from {@link #getAlarmSlotCount} since that + * returns the number of alarms dynamically after requesting them, but some devices will crash + * if we even attempt to request alarms and they do not support them - see + * #3766 + */ + public boolean supportsAlarms() { + return true; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmismartbandpro/RedmiSmartBandProCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmismartbandpro/RedmiSmartBandProCoordinator.java index 26ac08708..c27b31f29 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmismartbandpro/RedmiSmartBandProCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/redmismartbandpro/RedmiSmartBandProCoordinator.java @@ -69,7 +69,14 @@ public class RedmiSmartBandProCoordinator extends XiaomiCoordinator { @Override public boolean checkDecryptionMac() { + // Sometimes it fails to decrypt with an invalid mac // https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3766 return false; } + + @Override + public boolean supportsAlarms() { + // Crashes when requesting alarms + return false; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiScheduleService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiScheduleService.java index dbe817e9a..611eaf30e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiScheduleService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiScheduleService.java @@ -141,7 +141,9 @@ public class XiaomiScheduleService extends AbstractXiaomiService { @Override public void initialize() { - requestAlarms(); + if (getCoordinator().supportsAlarms()) { + requestAlarms(); + } requestReminders(); requestWorldClocks(); getSupport().sendCommand("get sleep mode", COMMAND_TYPE, CMD_SLEEP_MODE_GET);