From 2ff92c73f88fbea47d0ba30840d97e15ad8082fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Fri, 8 Dec 2023 20:55:58 +0000 Subject: [PATCH] Xiaomi: Re-enable screen on on notifications preference - Disabled by accident on 2063bc2df - Move preference to XiaomiNotificationService - Get preference value on connection --- .../devices/xiaomi/XiaomiCoordinator.java | 2 +- .../services/XiaomiNotificationService.java | 41 +++++++++++++++++++ .../xiaomi/services/XiaomiSystemService.java | 21 ---------- 3 files changed, 42 insertions(+), 22 deletions(-) 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 a6ab4d597..d12eb45c4 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 @@ -388,7 +388,7 @@ public abstract class XiaomiCoordinator extends AbstractBLEDeviceCoordinator { // TODO not implemented settings.add(R.xml.devicesettings_vibrationpatterns); // TODO not implemented settings.add(R.xml.devicesettings_donotdisturb_withauto_and_always); settings.add(R.xml.devicesettings_send_app_notifications); - // TODO not implemented settings.add(R.xml.devicesettings_screen_on_on_notifications); + settings.add(R.xml.devicesettings_screen_on_on_notifications); // TODO not implemented settings.add(R.xml.devicesettings_autoremove_notifications); if (getCannedRepliesSlotCount(device) > 0) { settings.add(R.xml.devicesettings_canned_dismisscall_16); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiNotificationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiNotificationService.java index bddc0a051..a538bc89f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiNotificationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiNotificationService.java @@ -47,6 +47,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiPrefere import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiSupport; import nodomain.freeyourgadget.gadgetbridge.util.BitmapUtil; import nodomain.freeyourgadget.gadgetbridge.util.NotificationUtils; +import nodomain.freeyourgadget.gadgetbridge.util.Prefs; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; public class XiaomiNotificationService extends AbstractXiaomiService implements XiaomiDataUploadService.Callback { @@ -60,6 +61,8 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements public static final int CMD_NOTIFICATION_DISMISS = 1; public static final int CMD_CALL_REJECT = 2; public static final int CMD_CALL_IGNORE = 5; + public static final int CMD_SCREEN_ON_ON_NOTIFICATIONS_GET = 6; + public static final int CMD_SCREEN_ON_ON_NOTIFICATIONS_SET = 7; public static final int CMD_OPEN_ON_PHONE = 8; public static final int CMD_CANNED_MESSAGES_GET = 9; public static final int CMD_CANNED_MESSAGES_SET = 12; // also canned message reply @@ -78,6 +81,7 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements @Override public void initialize() { + getSupport().sendCommand("get screen on on notifications", COMMAND_TYPE, CMD_SCREEN_ON_ON_NOTIFICATIONS_GET); requestCannedMessages(); } @@ -106,6 +110,15 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements deviceEvtCallControl.event = GBDeviceEventCallControl.Event.IGNORE; getSupport().evaluateGBDeviceEvent(deviceEvtCallControl); return; + case CMD_SCREEN_ON_ON_NOTIFICATIONS_GET: + final boolean screenOnOnNotifications = cmd.getNotification().getScreenOnOnNotifications(); + LOG.debug("Got screen on on notifications: {}", screenOnOnNotifications); + final GBDeviceEventUpdatePreferences eventUpdatePreferences = new GBDeviceEventUpdatePreferences( + DeviceSettingsPreferenceConst.PREF_SCREEN_ON_ON_NOTIFICATIONS, + screenOnOnNotifications + ); + getSupport().evaluateGBDeviceEvent(eventUpdatePreferences); + return; case CMD_OPEN_ON_PHONE: LOG.debug("Open on phone {}", cmd.getNotification().getOpenOnPhone().getId()); deviceEvtNotificationControl.handle = cmd.getNotification().getOpenOnPhone().getId(); @@ -125,6 +138,17 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements LOG.warn("Unhandled notification command {}", cmd.getSubtype()); } + @Override + public boolean onSendConfiguration(final String config, final Prefs prefs) { + switch (config) { + case DeviceSettingsPreferenceConst.PREF_SCREEN_ON_ON_NOTIFICATIONS: + setScreenOnOnNotifications(); + return true; + } + + return super.onSendConfiguration(config, prefs); + } + public void onNotification(final NotificationSpec notificationSpec) { if (!getDevicePrefs().getBoolean(DeviceSettingsPreferenceConst.PREF_SEND_APP_NOTIFICATIONS, true)) { LOG.debug("App notifications disabled - ignoring"); @@ -257,6 +281,23 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements ); } + private void setScreenOnOnNotifications() { + final Prefs prefs = getDevicePrefs(); + + final boolean screenOnOnNotificationsEnabled = prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_SCREEN_ON_ON_NOTIFICATIONS, true); + + LOG.info("Setting screen on on notification: {}", screenOnOnNotificationsEnabled); + + getSupport().sendCommand( + "set screen on on notification", + XiaomiProto.Command.newBuilder() + .setType(COMMAND_TYPE) + .setSubtype(CMD_SCREEN_ON_ON_NOTIFICATIONS_SET) + .setNotification(XiaomiProto.Notification.newBuilder().setScreenOnOnNotifications(screenOnOnNotificationsEnabled).build()) + .build() + ); + } + public void onSetCannedMessages(final CannedMessagesSpec cannedMessagesSpec) { if (cannedMessagesSpec.type != CannedMessagesSpec.TYPE_REJECTEDCALLS) { LOG.warn("Got unsupported canned messages type: {}", cannedMessagesSpec.type); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiSystemService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiSystemService.java index 313d84165..446f9f86e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiSystemService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiSystemService.java @@ -67,7 +67,6 @@ public class XiaomiSystemService extends AbstractXiaomiService implements Xiaomi public static final int CMD_CLOCK = 3; public static final int CMD_FIRMWARE_INSTALL = 5; public static final int CMD_LANGUAGE = 6; - public static final int CMD_SCREEN_ON_ON_NOTIFICAIONS = 7; public static final int CMD_PASSWORD_GET = 9; public static final int CMD_FIND_PHONE = 17; public static final int CMD_FIND_WATCH = 18; @@ -160,9 +159,6 @@ public class XiaomiSystemService extends AbstractXiaomiService implements Xiaomi case HuamiConst.PREF_DISPLAY_ITEMS_SORTABLE: setDisplayItems(); return true; - case DeviceSettingsPreferenceConst.PREF_SCREEN_ON_ON_NOTIFICATIONS: - setScreenOnOnNotifications(); - return true; } return super.onSendConfiguration(config, prefs); @@ -306,23 +302,6 @@ public class XiaomiSystemService extends AbstractXiaomiService implements Xiaomi ); } - private void setScreenOnOnNotifications() { - final Prefs prefs = getDevicePrefs(); - - final boolean screenOnOnNotificationsEnabled = prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_SCREEN_ON_ON_NOTIFICATIONS, true); - - LOG.info("Setting screen on on notification: {}", screenOnOnNotificationsEnabled); - - getSupport().sendCommand( - "set password", - XiaomiProto.Command.newBuilder() - .setType(CMD_SCREEN_ON_ON_NOTIFICAIONS) // Why? Would also expect COMMAND_TYPE here - .setSubtype(CMD_SCREEN_ON_ON_NOTIFICAIONS) - .setNotification(XiaomiProto.Notification.newBuilder().setScreenOnOnNotifications(screenOnOnNotificationsEnabled).build()) - .build() - ); - } - private void handlePassword(final XiaomiProto.Password password) { LOG.debug("Got device password"); final GBDeviceEventUpdatePreferences eventUpdatePreferences = new GBDeviceEventUpdatePreferences(