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 5f0359033..0662bb5c9 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 @@ -33,6 +33,7 @@ import java.util.UUID; import java.util.regex.Pattern; import nodomain.freeyourgadget.gadgetbridge.BuildConfig; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBException; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.appmanager.AppManagerActivity; @@ -56,8 +57,10 @@ import nodomain.freeyourgadget.gadgetbridge.model.Spo2Sample; import nodomain.freeyourgadget.gadgetbridge.model.StressSample; import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiBleUuids; +import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiPreferences; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.activity.impl.WorkoutSummaryParser; +import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { // On plaintext devices, user id is used as auth key - numeric @@ -158,8 +161,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { @Override public int getAlarmSlotCount(final GBDevice device) { - // TODO the watch returns the slot count - return 10; + return getPrefs(device).getInt(XiaomiPreferences.PREF_ALARM_SLOTS, 0); } @Override @@ -255,11 +257,6 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { return false; } - @Override - public boolean supportsAlarmSnoozing() { - return false; - } - @Override public boolean supportsAlarmDescription(final GBDevice device) { // TODO does it? @@ -279,8 +276,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { @Override public int getReminderSlotCount(final GBDevice device) { - // TODO fetch from watch - return 50; + return getPrefs(device).getInt(XiaomiPreferences.PREF_REMINDER_SLOTS, 0); } @Override @@ -513,6 +509,10 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { return new AbstractNotificationPattern[0]; } + protected static Prefs getPrefs(final GBDevice device) { + return new Prefs(GBApplication.getDeviceSpecificSharedPrefs(device.getAddress())); + } + public boolean supportsMultipleWeatherLocations() { return false; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/miwatch/MiWatchLiteCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/miwatch/MiWatchLiteCoordinator.java index 11a37aa41..f7a4ab230 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/miwatch/MiWatchLiteCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/xiaomi/miwatch/MiWatchLiteCoordinator.java @@ -81,14 +81,4 @@ public class MiWatchLiteCoordinator extends XiaomiCoordinator { public boolean supportsRealtimeData() { return false; } - - @Override - public int getAlarmSlotCount(final GBDevice device) { - return 0; - } - - @Override - public int getReminderSlotCount(final GBDevice device) { - return 0; - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiPreferences.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiPreferences.java index 86c17af4f..e683d550b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiPreferences.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiPreferences.java @@ -28,6 +28,9 @@ import nodomain.freeyourgadget.gadgetbridge.proto.xiaomi.XiaomiProto; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public final class XiaomiPreferences { + public static final String PREF_ALARM_SLOTS = "alarm_slots"; + public static final String PREF_REMINDER_SLOTS = "reminder_slots"; + private XiaomiPreferences() { // util class } 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 1cf105065..6b8266fec 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 @@ -48,7 +48,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.Reminder; import nodomain.freeyourgadget.gadgetbridge.model.WorldClock; import nodomain.freeyourgadget.gadgetbridge.proto.xiaomi.XiaomiProto; -import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiPreferences; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiSupport; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; @@ -165,6 +164,11 @@ public class XiaomiScheduleService extends AbstractXiaomiService { public void handleReminders(final XiaomiProto.Reminders reminders) { LOG.debug("Got {} reminders from the watch", reminders.getReminderCount()); + final GBDeviceEventUpdatePreferences eventUpdatePreferences = new GBDeviceEventUpdatePreferences() + .withPreference(XiaomiPreferences.PREF_REMINDER_SLOTS, reminders.getMaxReminders()); + + getSupport().evaluateGBDeviceEvent(eventUpdatePreferences); + watchReminders.clear(); for (final XiaomiProto.Reminder reminder : reminders.getReminderList()) { final nodomain.freeyourgadget.gadgetbridge.entities.Reminder gbReminder = new nodomain.freeyourgadget.gadgetbridge.entities.Reminder(); @@ -499,6 +503,11 @@ public class XiaomiScheduleService extends AbstractXiaomiService { public void handleAlarms(final XiaomiProto.Alarms alarms) { LOG.debug("Got {} alarms from the watch", alarms.getAlarmCount()); + final GBDeviceEventUpdatePreferences eventUpdatePreferences = new GBDeviceEventUpdatePreferences() + .withPreference(XiaomiPreferences.PREF_ALARM_SLOTS, alarms.getMaxAlarms()); + + getSupport().evaluateGBDeviceEvent(eventUpdatePreferences); + watchAlarms.clear(); for (final XiaomiProto.Alarm alarm : alarms.getAlarmList()) { final nodomain.freeyourgadget.gadgetbridge.entities.Alarm gbAlarm = new nodomain.freeyourgadget.gadgetbridge.entities.Alarm(); diff --git a/app/src/main/proto/xiaomi.proto b/app/src/main/proto/xiaomi.proto index d156cd9aa..ce3abe326 100644 --- a/app/src/main/proto/xiaomi.proto +++ b/app/src/main/proto/xiaomi.proto @@ -825,7 +825,7 @@ message SleepModeSchedule { message Reminders { repeated Reminder reminder = 1; - optional uint32 unknown2 = 2; // 50, max reminder? + optional uint32 maxReminders = 2; } message Reminder {