From cda25479d622bd1a89c973e73d1a43b687897756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joris=20Pelgr=C3=B6m?= Date: Fri, 20 Oct 2023 23:45:48 +0200 Subject: [PATCH] Add clear_notification support to Wear OS (#3956) - Move the clear_notification command to common extensions and add support in the Wear OS app --- .../android/notifications/MessagingManager.kt | 18 +++--------------- .../notifications/NotificationFunctions.kt | 11 +++++++++++ .../android/notifications/MessagingManager.kt | 4 ++++ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt b/app/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt index f56b2dd05..53eabb541 100644 --- a/app/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt +++ b/app/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt @@ -49,6 +49,7 @@ import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.notifications.DeviceCommandData import io.homeassistant.companion.android.common.notifications.NotificationData +import io.homeassistant.companion.android.common.notifications.clearNotification import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor import io.homeassistant.companion.android.common.notifications.commandBleTransmitter import io.homeassistant.companion.android.common.notifications.createChannelID @@ -61,7 +62,6 @@ import io.homeassistant.companion.android.common.notifications.parseColor import io.homeassistant.companion.android.common.notifications.parseVibrationPattern import io.homeassistant.companion.android.common.notifications.prepareText import io.homeassistant.companion.android.common.util.TextToSpeechData -import io.homeassistant.companion.android.common.util.cancel import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded import io.homeassistant.companion.android.common.util.getActiveNotification import io.homeassistant.companion.android.common.util.speakText @@ -145,7 +145,6 @@ class MessagingManager @Inject constructor( // special action constants const val REQUEST_LOCATION_UPDATE = "request_location_update" - const val CLEAR_NOTIFICATION = "clear_notification" const val REMOVE_CHANNEL = "remove_channel" const val COMMAND_DND = "command_dnd" const val COMMAND_RINGER_MODE = "command_ringer_mode" @@ -309,9 +308,8 @@ class MessagingManager @Inject constructor( Log.d(TAG, "Request location update") requestAccurateLocationUpdate() } - jsonData[NotificationData.MESSAGE] == CLEAR_NOTIFICATION && !jsonData["tag"].isNullOrBlank() -> { - Log.d(TAG, "Clearing notification with tag: ${jsonData["tag"]}") - clearNotification(jsonData["tag"]!!) + jsonData[NotificationData.MESSAGE] == NotificationData.CLEAR_NOTIFICATION && !jsonData["tag"].isNullOrBlank() -> { + clearNotification(context, jsonData["tag"]!!) } jsonData[NotificationData.MESSAGE] == REMOVE_CHANNEL && !jsonData[NotificationData.CHANNEL].isNullOrBlank() -> { Log.d(TAG, "Removing Notification channel ${jsonData[NotificationData.CHANNEL]}") @@ -545,15 +543,6 @@ class MessagingManager @Inject constructor( context.sendBroadcast(intent) } - private fun clearNotification(tag: String) { - val notificationManagerCompat = NotificationManagerCompat.from(context) - - val messageId = tag.hashCode() - - // Clear notification - notificationManagerCompat.cancel(tag, messageId, true) - } - private fun removeNotificationChannel(channelName: String) { val notificationManagerCompat = NotificationManagerCompat.from(context) @@ -886,7 +875,6 @@ class MessagingManager @Inject constructor( /** * Create and show a simple notification containing the received FCM message. - * */ private suspend fun sendNotification(data: Map, id: Long? = null, received: Long? = null) { val notificationManagerCompat = NotificationManagerCompat.from(context) diff --git a/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationFunctions.kt b/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationFunctions.kt index 5e39b3bf2..e1019bb04 100755 --- a/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationFunctions.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationFunctions.kt @@ -22,6 +22,7 @@ import com.mikepenz.iconics.utils.colorFilter import com.mikepenz.iconics.utils.toAndroidIconCompat import com.vdurmont.emoji.EmojiParser import io.homeassistant.companion.android.common.R +import io.homeassistant.companion.android.common.util.cancel import io.homeassistant.companion.android.common.util.generalChannel import java.util.Locale @@ -51,6 +52,9 @@ object NotificationData { const val MEDIA_STREAM = "media_stream" val ALARM_STREAMS = listOf(ALARM_STREAM, ALARM_STREAM_MAX) + + // special action constants + const val CLEAR_NOTIFICATION = "clear_notification" } fun createChannelID( @@ -279,3 +283,10 @@ fun handleText( builder.setStyle(NotificationCompat.BigTextStyle().bigText(text)) } } + +fun clearNotification(context: Context, tag: String) { + Log.d(NotificationData.TAG, "Clearing notification with tag: $tag") + val notificationManagerCompat = NotificationManagerCompat.from(context) + val messageId = tag.hashCode() + notificationManagerCompat.cancel(tag, messageId, true) +} diff --git a/wear/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt b/wear/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt index 963ae7c5d..fffc857ad 100755 --- a/wear/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt +++ b/wear/src/main/java/io/homeassistant/companion/android/notifications/MessagingManager.kt @@ -9,6 +9,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.notifications.DeviceCommandData import io.homeassistant.companion.android.common.notifications.NotificationData +import io.homeassistant.companion.android.common.notifications.clearNotification import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor import io.homeassistant.companion.android.common.notifications.commandBleTransmitter import io.homeassistant.companion.android.common.notifications.getGroupNotificationBuilder @@ -64,6 +65,9 @@ class MessagingManager @Inject constructor( val allowCommands = serverManager.integrationRepository(serverId).isTrusted() val message = notificationData[NotificationData.MESSAGE] when { + message == NotificationData.CLEAR_NOTIFICATION && !notificationData["tag"].isNullOrBlank() -> { + clearNotification(context, notificationData["tag"]!!) + } message == DeviceCommandData.COMMAND_BEACON_MONITOR && allowCommands -> { if (!commandBeaconMonitor(context, notificationData)) { sendNotification(notificationData, now)