1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-07-22 14:52:25 +02:00

Add more granular smart wakeup support

Specifically:
- Add position to smart wakeup support coordinator function
- Add interface to stop smart alarm checkbox from being changed
This commit is contained in:
Martin.JM 2024-02-18 17:24:29 +01:00
parent 01ef422812
commit 89b6ae9f24
58 changed files with 66 additions and 233 deletions

View File

@ -126,8 +126,10 @@ public class AlarmDetails extends AbstractGBActivity {
timePicker.setCurrentMinute(alarm.getMinute());
cbSmartWakeup.setChecked(alarm.getSmartWakeup());
int smartAlarmVisibility = supportsSmartWakeup() ? View.VISIBLE : View.GONE;
int smartAlarmVisibility = supportsSmartWakeup(alarm.getPosition()) ? View.VISIBLE : View.GONE;
cbSmartWakeup.setVisibility(smartAlarmVisibility);
boolean smartAlarmEnabled = !forcedSmartWakeup(alarm.getPosition());
cbSmartWakeup.setEnabled(smartAlarmEnabled);
cbSnooze.setChecked(alarm.getSnooze());
int snoozeVisibility = supportsSnoozing() ? View.VISIBLE : View.GONE;
@ -153,10 +155,21 @@ public class AlarmDetails extends AbstractGBActivity {
cbSunday.setChecked(alarm.getRepetition(Alarm.ALARM_SUN));
}
private boolean supportsSmartWakeup() {
private boolean supportsSmartWakeup(int position) {
if (device != null) {
DeviceCoordinator coordinator = device.getDeviceCoordinator();
return coordinator.supportsSmartWakeup(device);
return coordinator.supportsSmartWakeup(device, position);
}
return false;
}
/**
* The alarm at this position *must* be a smart alarm
*/
private boolean forcedSmartWakeup(int position) {
if (device != null) {
DeviceCoordinator coordinator = device.getDeviceCoordinator();
return coordinator.forcedSmartWakeup(device, position);
}
return false;
}
@ -210,7 +223,7 @@ public class AlarmDetails extends AbstractGBActivity {
alarm.setUnused(false);
alarm.setEnabled(true);
}
alarm.setSmartWakeup(supportsSmartWakeup() && cbSmartWakeup.isChecked());
alarm.setSmartWakeup(supportsSmartWakeup(alarm.getPosition()) && cbSmartWakeup.isChecked());
alarm.setSnooze(supportsSnoozing() && cbSnooze.isChecked());
int repetitionMask = AlarmUtils.createRepetitionMask(cbMonday.isChecked(), cbTuesday.isChecked(), cbWednesday.isChecked(), cbThursday.isChecked(), cbFriday.isChecked(), cbSaturday.isChecked(), cbSunday.isChecked());
alarm.setRepetition(repetitionMask);

View File

@ -319,7 +319,12 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(final GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int alarmPosition) {
return false;
}
@Override
public boolean forcedSmartWakeup(GBDevice device, int alarmPosition) {
return false;
}

View File

@ -332,10 +332,17 @@ public interface DeviceCoordinator {
int getAlarmSlotCount(GBDevice device);
/**
* Returns true if this device/coordinator supports alarms with smart wakeup
* @return
* Returns true if this device/coordinator supports an alarm with smart wakeup for the current position
* @param alarmPosition Position of the alarm
*/
boolean supportsSmartWakeup(GBDevice device);
boolean supportsSmartWakeup(GBDevice device, int alarmPosition);
/**
* Returns true if the alarm at the specified position *must* be a smart alarm for this device/coordinator
* @param alarmPosition Position of the alarm
* @return True if it must be a smart alarm, false otherwise
*/
boolean forcedSmartWakeup(GBDevice device, int alarmPosition);
/**
* Returns true if this device/coordinator supports alarm snoozing

View File

@ -151,11 +151,6 @@ public class UnknownDeviceCoordinator extends AbstractDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -156,11 +156,6 @@ public class AsteroidOSDeviceCoordinator extends AbstractDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -112,11 +112,6 @@ public class BangleJSCoordinator extends AbstractBLEDeviceCoordinator {
return false;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -118,11 +118,6 @@ public class BinarySensorCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -111,11 +111,6 @@ public class CasioGB6900DeviceCoordinator extends CasioDeviceCoordinator {
return 5; // 4 regular and one snooze
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -142,11 +142,6 @@ public class CasioGBX100DeviceCoordinator extends CasioDeviceCoordinator {
return 4;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -115,11 +115,6 @@ public class CasioGWB5600DeviceCoordinator extends CasioDeviceCoordinator {
return false;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsAppsManagement(final GBDevice device) {
return false;

View File

@ -80,11 +80,6 @@ public class DomyosT540Coordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -105,11 +105,6 @@ public class FitProDeviceCoordinator extends AbstractBLEDeviceCoordinator {
return 8;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -90,11 +90,6 @@ public class FlipperZeroCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public String getManufacturer() {
return "Flipper devices";

View File

@ -80,11 +80,6 @@ public abstract class GalaxyBudsGenericCoordinator extends AbstractBLClassicDevi
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -136,11 +136,6 @@ public class HPlusCoordinator extends AbstractBLEDeviceCoordinator {
return 3; // FIXME - check the real value
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -53,7 +53,7 @@ public class SG2Coordinator extends HPlusCoordinator {
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int position) {
return true;
}

View File

@ -525,11 +525,6 @@ public abstract class HuamiCoordinator extends AbstractBLEDeviceCoordinator {
return false;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsFindDevice() {
return true;

View File

@ -307,7 +307,7 @@ public abstract class ZeppOsCoordinator extends HuamiCoordinator {
}
@Override
public boolean supportsSmartWakeup(final GBDevice device) {
public boolean supportsSmartWakeup(final GBDevice device, int position) {
return true;
}

View File

@ -112,8 +112,13 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return huaweiCoordinator.supportsSmartAlarm(device);
public boolean supportsSmartWakeup(GBDevice device, int position) {
return huaweiCoordinator.supportsSmartAlarm(device, position);
}
@Override
public boolean forcedSmartWakeup(GBDevice device, int alarmPosition) {
return huaweiCoordinator.forcedSmartWakeup(device, alarmPosition);
}
@Override

View File

@ -308,10 +308,19 @@ public class HuaweiCoordinator {
public boolean supportsSmartAlarm() {
return supportsCommandForService(0x08, 0x02) ;
}
public boolean supportsSmartAlarm(GBDevice gbDevice) {
return supportsSmartAlarm() || getForceOption(gbDevice, PREF_FORCE_ENABLE_SMART_ALARM);
}
public boolean supportsSmartAlarm(GBDevice gbDevice, int alarmPosition) {
return supportsSmartAlarm(gbDevice) && alarmPosition == 0;
}
public boolean forcedSmartWakeup(GBDevice device, int alarmPosition) {
return supportsSmartAlarm(device, alarmPosition) && alarmPosition == 0;
}
/**
* @return True if alarms can be changed on the device, false otherwise
*/

View File

@ -112,8 +112,13 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return huaweiCoordinator.supportsSmartAlarm(device);
public boolean supportsSmartWakeup(GBDevice device, int position) {
return huaweiCoordinator.supportsSmartAlarm(device, position);
}
@Override
public boolean forcedSmartWakeup(GBDevice device, int alarmPosition) {
return huaweiCoordinator.forcedSmartWakeup(device, alarmPosition);
}
@Override

View File

@ -105,11 +105,6 @@ public class ID115Coordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -102,11 +102,6 @@ public class ITagCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -188,12 +188,6 @@ public class BFH16DeviceCoordinator extends AbstractBLEDeviceCoordinator
return false;
}
@Override
public boolean supportsSmartWakeup(GBDevice device)
{
return false;
}
@Override
public boolean supportsWeather()
{

View File

@ -140,11 +140,6 @@ public class TeclastH30Coordinator extends AbstractBLEDeviceCoordinator {
return 3;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -92,7 +92,7 @@ public class Y5Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int position) {
return true;
}

View File

@ -108,11 +108,6 @@ public class LefunDeviceCoordinator extends AbstractBLEDeviceCoordinator {
return NUM_ALARM_SLOTS;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -140,11 +140,6 @@ public class WatchXPlusDeviceCoordinator extends AbstractBLEDeviceCoordinator {
return 3;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -80,11 +80,6 @@ public class LiveviewCoordinator extends AbstractBLClassicDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -223,11 +223,6 @@ public class MakibesHR3Coordinator extends AbstractBLEDeviceCoordinator {
return 8;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -139,7 +139,7 @@ public class MiBandCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int position) {
return true;
}

View File

@ -115,11 +115,6 @@ public class MiScale2DeviceCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -101,11 +101,6 @@ public class No1F1Coordinator extends AbstractBLEDeviceCoordinator {
return 3;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -109,11 +109,6 @@ public class NutCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -131,11 +131,6 @@ public class PebbleCoordinator extends AbstractBLClassicDeviceCoordinator {
return 16;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return PebbleUtils.hasHRM(device.getModel());

View File

@ -84,11 +84,6 @@ public class PineTimeJFCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -99,11 +99,6 @@ public class QC35Coordinator extends AbstractBLClassicDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -166,11 +166,6 @@ public class QHybridCoordinator extends AbstractBLEDeviceCoordinator {
return isHybridHR();
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return this.isHybridHR();

View File

@ -89,11 +89,6 @@ public abstract class RoidmiCoordinator extends AbstractBLClassicDeviceCoordinat
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -107,12 +107,6 @@ public class SMAQ2OSSCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -79,11 +79,6 @@ public class SoFlowCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -98,11 +98,6 @@ public abstract class SonyHeadphonesCoordinator extends AbstractBLClassicDeviceC
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -213,7 +213,7 @@ public class SonyWena3Coordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int position) {
return true;
}

View File

@ -93,7 +93,7 @@ public class SonySWR12DeviceCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int position) {
return true;
}

View File

@ -113,11 +113,6 @@ public class SuperCarsCoordinator extends AbstractDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public String getManufacturer() {
return "Brand Base";

View File

@ -207,7 +207,7 @@ public class TestDeviceCoordinator extends AbstractDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(final GBDevice device) {
public boolean supportsSmartWakeup(final GBDevice device, int position) {
return supports(getTestDevice(), TestFeature.SMART_WAKEUP);
}

View File

@ -88,11 +88,6 @@ public class TLW64Coordinator extends AbstractBLEDeviceCoordinator {
return 3;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -118,11 +118,6 @@ public class UM25Coordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -125,11 +125,6 @@ public class VescCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -81,11 +81,6 @@ public class VibratissimoCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -94,11 +94,6 @@ public class VivomoveHrCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return true;

View File

@ -104,11 +104,6 @@ public class WaspOSCoordinator extends AbstractBLEDeviceCoordinator {
return false;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -116,10 +116,6 @@ public class Watch9DeviceCoordinator extends AbstractBLEDeviceCoordinator {
return 3; // FIXME - check the real value
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {

View File

@ -131,7 +131,7 @@ public class WithingsSteelHRDeviceCoordinator extends AbstractDeviceCoordinator
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
public boolean supportsSmartWakeup(GBDevice device, int position) {
return true;
}

View File

@ -174,7 +174,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(final GBDevice device) {
public boolean supportsSmartWakeup(final GBDevice device, int position) {
return true;
}

View File

@ -87,11 +87,6 @@ public class XWatchCoordinator extends AbstractBLEDeviceCoordinator {
return 0;
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsHeartRateMeasurement(GBDevice device) {
return false;

View File

@ -129,11 +129,6 @@ public class ZeTimeCoordinator extends AbstractBLEDeviceCoordinator {
}
@Override
public boolean supportsSmartWakeup(GBDevice device) {
return false;
}
@Override
public boolean supportsRealtimeData() {
return true;

View File

@ -125,7 +125,7 @@ public class ZeppOsAlarmsService extends AbstractZeppOsService {
if (alarm.getEnabled()) {
alarmFlags = FLAG_ENABLED;
}
if (coordinator.supportsSmartWakeup(getSupport().getDevice()) && alarm.getSmartWakeup()) {
if (coordinator.supportsSmartWakeup(getSupport().getDevice(), alarm.getPosition()) && alarm.getSmartWakeup()) {
alarmFlags |= FLAG_SMART;
}
alarmMessage = new byte[]{