From 3948f95505045f597456fb585b2ec7fcb6aefc64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sat, 28 Oct 2023 14:56:55 +0100 Subject: [PATCH] Xiaomi: Dismiss notification from phone when dismiss from watch --- .../externalevents/NotificationListener.java | 3 +++ .../xiaomi/services/XiaomiNotificationService.java | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java index db1c3cdc8..33a352a3a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java @@ -785,6 +785,9 @@ public class NotificationListener extends NotificationListenerService { // Clean up removed notifications from internal list notificationsActive.removeAll(notificationsToRemove); + // TODO prevent this from being called multiple times for the same ID + // TODO prevent thins from being called form notifications removed from the device + // Send notification remove request to device List devices = GBApplication.app().getDeviceManager().getDevices(); for (GBDevice device : devices) { 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 2729c87f0..adcf35fd6 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 @@ -34,6 +34,7 @@ import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.BuildConfig; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCallControl; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventNotificationControl; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; @@ -73,8 +74,16 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements @Override public void handleCommand(final XiaomiProto.Command cmd) { final GBDeviceEventCallControl deviceEvtCallControl = new GBDeviceEventCallControl(); + final GBDeviceEventNotificationControl deviceEvtNotificationControl = new GBDeviceEventNotificationControl(); switch (cmd.getSubtype()) { + case CMD_NOTIFICATION_DISMISS: + final int dismissNotificationId = cmd.getNotification().getNotification4().getNotificationId().getId(); + LOG.info("Watch dismiss notification {}", dismissNotificationId); + deviceEvtNotificationControl.handle = dismissNotificationId; + deviceEvtNotificationControl.event = GBDeviceEventNotificationControl.Event.DISMISS; + getSupport().evaluateGBDeviceEvent(deviceEvtNotificationControl); + return; case CMD_CALL_REJECT: LOG.debug("Reject call"); deviceEvtCallControl.event = GBDeviceEventCallControl.Event.REJECT; @@ -304,6 +313,7 @@ public class XiaomiNotificationService extends AbstractXiaomiService implements final Drawable icon = NotificationUtils.getAppIcon(getSupport().getContext(), iconPackageName); if (icon == null) { + // FIXME the packageName is sometimes truncated LOG.warn("Failed to get icon for {}", iconPackageName); return; }