From bffc1e976cbba75c64d303eebce24a4554fc8195 Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Wed, 15 Nov 2023 14:08:44 +0000 Subject: [PATCH 1/6] mobile_app_notification_cleared for wearos --- .../android/notifications/MessagingManager.kt | 1 + .../NotificationDeleteReceiver.kt | 0 .../android/notifications/MessagingManager.kt | 26 +++++++++++++++++++ 3 files changed, 27 insertions(+) rename {app/src/main/java/io/homeassistant/companion/android => common/src/main/java/io/homeassistant/companion/android/common}/notifications/NotificationDeleteReceiver.kt (100%) 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 53eabb54191..385cf3c5ab6 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 @@ -61,6 +61,7 @@ import io.homeassistant.companion.android.common.notifications.handleText 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.notifications.NotificationDeleteReceiver import io.homeassistant.companion.android.common.util.TextToSpeechData import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded import io.homeassistant.companion.android.common.util.getActiveNotification diff --git a/app/src/main/java/io/homeassistant/companion/android/notifications/NotificationDeleteReceiver.kt b/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationDeleteReceiver.kt similarity index 100% rename from app/src/main/java/io/homeassistant/companion/android/notifications/NotificationDeleteReceiver.kt rename to common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationDeleteReceiver.kt 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 fffc857adad..7fe9903ee12 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 @@ -16,6 +16,7 @@ import io.homeassistant.companion.android.common.notifications.getGroupNotificat import io.homeassistant.companion.android.common.notifications.handleChannel import io.homeassistant.companion.android.common.notifications.handleSmallIcon import io.homeassistant.companion.android.common.notifications.handleText +import io.homeassistant.companion.android.common.notifications.NotificationDeleteReceiver import io.homeassistant.companion.android.common.util.TextToSpeechData import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded import io.homeassistant.companion.android.common.util.getActiveNotification @@ -116,6 +117,8 @@ class MessagingManager @Inject constructor( handleText(notificationBuilder, data) + handleDeleteIntent(notificationBuilder, data, messageId, group, groupId, id) + notificationManagerCompat.apply { Log.d(TAG, "Show notification with tag \"$tag\" and id \"$messageId\"") notify(tag, messageId, notificationBuilder.build()) @@ -133,4 +136,27 @@ class MessagingManager @Inject constructor( } } } + + private fun handleDeleteIntent( + builder: NotificationCompat.Builder, + data: Map, + messageId: Int, + group: String?, + groupId: Int, + databaseId: Long? + ) { + val deleteIntent = Intent(context, NotificationDeleteReceiver::class.java).apply { + putExtra(NotificationDeleteReceiver.EXTRA_DATA, HashMap(data)) + putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP, group) + putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP_ID, groupId) + putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_DB, databaseId) + } + val deletePendingIntent = PendingIntent.getBroadcast( + context, + messageId, + deleteIntent, + PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + builder.setDeleteIntent(deletePendingIntent) + } } From cbcd513f3ec9a62b2ba3cfadc73f8e26b7662ecb Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Tue, 28 Nov 2023 19:41:25 +0000 Subject: [PATCH 2/6] Fix imports --- .../common/notifications/NotificationDeleteReceiver.kt | 2 +- .../companion/android/notifications/MessagingManager.kt | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationDeleteReceiver.kt b/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationDeleteReceiver.kt index 2604df7687c..f27f629bd05 100644 --- a/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationDeleteReceiver.kt +++ b/common/src/main/java/io/homeassistant/companion/android/common/notifications/NotificationDeleteReceiver.kt @@ -1,4 +1,4 @@ -package io.homeassistant.companion.android.notifications +package io.homeassistant.companion.android.common.notifications import android.content.BroadcastReceiver import android.content.Context 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 7fe9903ee12..727ecc64f8e 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 @@ -3,6 +3,8 @@ package io.homeassistant.companion.android.notifications import android.annotation.SuppressLint import android.content.Context import android.util.Log +import android.app.PendingIntent +import android.content.Intent import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import dagger.hilt.android.qualifiers.ApplicationContext @@ -88,7 +90,7 @@ class MessagingManager @Inject constructor( } @SuppressLint("MissingPermission") - private fun sendNotification(data: Map, received: Long? = null) { + private fun sendNotification(data: Map, id: Long? = null, received: Long? = null) { val notificationManagerCompat = NotificationManagerCompat.from(context) val tag = data["tag"] From aee8085ebe591fd3424031dc2b24d20f9d138a5a Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Tue, 28 Nov 2023 19:54:20 +0000 Subject: [PATCH 3/6] Remove database id extra --- .../android/notifications/MessagingManager.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) 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 727ecc64f8e..a6d0b325444 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 @@ -84,13 +84,13 @@ class MessagingManager @Inject constructor( message == TextToSpeechData.TTS -> speakText(context, notificationData) message == TextToSpeechData.COMMAND_STOP_TTS -> stopTTS() message == DeviceCommandData.COMMAND_UPDATE_SENSORS -> SensorReceiver.updateAllSensors(context) - else -> sendNotification(notificationData, now) + else -> sendNotification(notificationData, now) } } } @SuppressLint("MissingPermission") - private fun sendNotification(data: Map, id: Long? = null, received: Long? = null) { + private fun sendNotification(data: Map, received: Long? = null) { val notificationManagerCompat = NotificationManagerCompat.from(context) val tag = data["tag"] @@ -119,7 +119,7 @@ class MessagingManager @Inject constructor( handleText(notificationBuilder, data) - handleDeleteIntent(notificationBuilder, data, messageId, group, groupId, id) + handleDeleteIntent(notificationBuilder, data, messageId, group, groupId) notificationManagerCompat.apply { Log.d(TAG, "Show notification with tag \"$tag\" and id \"$messageId\"") @@ -144,14 +144,12 @@ class MessagingManager @Inject constructor( data: Map, messageId: Int, group: String?, - groupId: Int, - databaseId: Long? + groupId: Int ) { val deleteIntent = Intent(context, NotificationDeleteReceiver::class.java).apply { putExtra(NotificationDeleteReceiver.EXTRA_DATA, HashMap(data)) putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP, group) putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP_ID, groupId) - putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_DB, databaseId) } val deletePendingIntent = PendingIntent.getBroadcast( context, From a8c29ba7cf7bbc261e3c1d5a847bdc3b39cd047d Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Tue, 28 Nov 2023 19:56:14 +0000 Subject: [PATCH 4/6] Fix whitespace --- .../companion/android/notifications/MessagingManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a6d0b325444..c6b5f477a9e 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 @@ -84,7 +84,7 @@ class MessagingManager @Inject constructor( message == TextToSpeechData.TTS -> speakText(context, notificationData) message == TextToSpeechData.COMMAND_STOP_TTS -> stopTTS() message == DeviceCommandData.COMMAND_UPDATE_SENSORS -> SensorReceiver.updateAllSensors(context) - else -> sendNotification(notificationData, now) + else -> sendNotification(notificationData, now) } } } From 97a12918474902358247d839a2c42808040f02be Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Wed, 29 Nov 2023 22:40:34 +0000 Subject: [PATCH 5/6] Reformatted imports and added the receiver to the manifest --- app/src/main/AndroidManifest.xml | 5 ----- .../companion/android/notifications/MessagingManager.kt | 2 +- common/src/main/AndroidManifest.xml | 5 +++++ wear/src/main/AndroidManifest.xml | 1 + .../companion/android/notifications/MessagingManager.kt | 6 +++--- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 317da665b6b..0db2a533b6e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -871,11 +871,6 @@ android:enabled="true" android:exported="true" /> - - 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 385cf3c5ab6..457dd126e52 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.NotificationDeleteReceiver import io.homeassistant.companion.android.common.notifications.clearNotification import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor import io.homeassistant.companion.android.common.notifications.commandBleTransmitter @@ -61,7 +62,6 @@ import io.homeassistant.companion.android.common.notifications.handleText 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.notifications.NotificationDeleteReceiver import io.homeassistant.companion.android.common.util.TextToSpeechData import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded import io.homeassistant.companion.android.common.util.getActiveNotification diff --git a/common/src/main/AndroidManifest.xml b/common/src/main/AndroidManifest.xml index 12601643615..82307ba2445 100644 --- a/common/src/main/AndroidManifest.xml +++ b/common/src/main/AndroidManifest.xml @@ -11,6 +11,11 @@ + + \ No newline at end of file diff --git a/wear/src/main/AndroidManifest.xml b/wear/src/main/AndroidManifest.xml index f4d31032cd0..19dc629b31b 100644 --- a/wear/src/main/AndroidManifest.xml +++ b/wear/src/main/AndroidManifest.xml @@ -263,6 +263,7 @@ + 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 c6b5f477a9e..4a4f28dfd21 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 @@ -1,16 +1,17 @@ package io.homeassistant.companion.android.notifications import android.annotation.SuppressLint -import android.content.Context -import android.util.Log import android.app.PendingIntent +import android.content.Context import android.content.Intent +import android.util.Log import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat 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.NotificationDeleteReceiver import io.homeassistant.companion.android.common.notifications.clearNotification import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor import io.homeassistant.companion.android.common.notifications.commandBleTransmitter @@ -18,7 +19,6 @@ import io.homeassistant.companion.android.common.notifications.getGroupNotificat import io.homeassistant.companion.android.common.notifications.handleChannel import io.homeassistant.companion.android.common.notifications.handleSmallIcon import io.homeassistant.companion.android.common.notifications.handleText -import io.homeassistant.companion.android.common.notifications.NotificationDeleteReceiver import io.homeassistant.companion.android.common.util.TextToSpeechData import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded import io.homeassistant.companion.android.common.util.getActiveNotification From bebdbb1ca3c401cf562e212c255cdf9d4959b00c Mon Sep 17 00:00:00 2001 From: Joseph Abbey Date: Fri, 1 Dec 2023 20:48:10 +0000 Subject: [PATCH 6/6] Move `handleDeleteIntent` to common --- .../android/notifications/MessagingManager.kt | 27 ++----------------- .../notifications/NotificationFunctions.kt | 26 ++++++++++++++++++ .../android/notifications/MessagingManager.kt | 27 ++----------------- 3 files changed, 30 insertions(+), 50 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 457dd126e52..3b998a4a73e 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,7 +49,6 @@ 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.NotificationDeleteReceiver import io.homeassistant.companion.android.common.notifications.clearNotification import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor import io.homeassistant.companion.android.common.notifications.commandBleTransmitter @@ -57,6 +56,7 @@ import io.homeassistant.companion.android.common.notifications.createChannelID import io.homeassistant.companion.android.common.notifications.getGroupNotificationBuilder import io.homeassistant.companion.android.common.notifications.handleChannel import io.homeassistant.companion.android.common.notifications.handleColor +import io.homeassistant.companion.android.common.notifications.handleDeleteIntent import io.homeassistant.companion.android.common.notifications.handleSmallIcon import io.homeassistant.companion.android.common.notifications.handleText import io.homeassistant.companion.android.common.notifications.parseColor @@ -936,7 +936,7 @@ class MessagingManager @Inject constructor( handleReplyHistory(notificationBuilder, data) - handleDeleteIntent(notificationBuilder, data, messageId, group, groupId, id) + handleDeleteIntent(context, notificationBuilder, data, messageId, group, groupId, id) handleContentIntent(notificationBuilder, data) @@ -1034,29 +1034,6 @@ class MessagingManager @Inject constructor( } } - private fun handleDeleteIntent( - builder: NotificationCompat.Builder, - data: Map, - messageId: Int, - group: String?, - groupId: Int, - databaseId: Long? - ) { - val deleteIntent = Intent(context, NotificationDeleteReceiver::class.java).apply { - putExtra(NotificationDeleteReceiver.EXTRA_DATA, HashMap(data)) - putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP, group) - putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP_ID, groupId) - putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_DB, databaseId) - } - val deletePendingIntent = PendingIntent.getBroadcast( - context, - messageId, - deleteIntent, - PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE - ) - builder.setDeleteIntent(deletePendingIntent) - } - private fun handlePersistent( builder: NotificationCompat.Builder, tag: String?, 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 e1019bb0416..4ed54bb1ef5 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 @@ -2,7 +2,9 @@ package io.homeassistant.companion.android.common.notifications import android.app.NotificationChannel import android.app.NotificationManager +import android.app.PendingIntent import android.content.Context +import android.content.Intent import android.graphics.Color import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter @@ -290,3 +292,27 @@ fun clearNotification(context: Context, tag: String) { val messageId = tag.hashCode() notificationManagerCompat.cancel(tag, messageId, true) } + +fun handleDeleteIntent( + context: Context, + builder: NotificationCompat.Builder, + data: Map, + messageId: Int, + group: String?, + groupId: Int, + databaseId: Long? +) { + val deleteIntent = Intent(context, NotificationDeleteReceiver::class.java).apply { + putExtra(NotificationDeleteReceiver.EXTRA_DATA, HashMap(data)) + putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP, group) + putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP_ID, groupId) + putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_DB, databaseId) + } + val deletePendingIntent = PendingIntent.getBroadcast( + context, + messageId, + deleteIntent, + PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + builder.setDeleteIntent(deletePendingIntent) +} 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 4a4f28dfd21..76cd38f90d9 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 @@ -1,9 +1,7 @@ package io.homeassistant.companion.android.notifications import android.annotation.SuppressLint -import android.app.PendingIntent import android.content.Context -import android.content.Intent import android.util.Log import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat @@ -11,12 +9,12 @@ 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.NotificationDeleteReceiver 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 import io.homeassistant.companion.android.common.notifications.handleChannel +import io.homeassistant.companion.android.common.notifications.handleDeleteIntent import io.homeassistant.companion.android.common.notifications.handleSmallIcon import io.homeassistant.companion.android.common.notifications.handleText import io.homeassistant.companion.android.common.util.TextToSpeechData @@ -119,7 +117,7 @@ class MessagingManager @Inject constructor( handleText(notificationBuilder, data) - handleDeleteIntent(notificationBuilder, data, messageId, group, groupId) + handleDeleteIntent(context, notificationBuilder, data, messageId, group, groupId, null) notificationManagerCompat.apply { Log.d(TAG, "Show notification with tag \"$tag\" and id \"$messageId\"") @@ -138,25 +136,4 @@ class MessagingManager @Inject constructor( } } } - - private fun handleDeleteIntent( - builder: NotificationCompat.Builder, - data: Map, - messageId: Int, - group: String?, - groupId: Int - ) { - val deleteIntent = Intent(context, NotificationDeleteReceiver::class.java).apply { - putExtra(NotificationDeleteReceiver.EXTRA_DATA, HashMap(data)) - putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP, group) - putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP_ID, groupId) - } - val deletePendingIntent = PendingIntent.getBroadcast( - context, - messageId, - deleteIntent, - PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE - ) - builder.setDeleteIntent(deletePendingIntent) - } }