mobile_app_notification_cleared for wearos (#4035)

* mobile_app_notification_cleared for wearos

* Fix imports

* Remove database id extra

* Fix whitespace

* Reformatted imports and added the receiver to the manifest

* Move `handleDeleteIntent` to common
This commit is contained in:
Joseph Abbey 2023-12-13 19:45:46 +00:00 committed by GitHub
parent 17f86efd18
commit 6b56bc579a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 38 additions and 30 deletions

View file

@ -871,11 +871,6 @@
android:enabled="true"
android:exported="true" />
<receiver
android:name=".notifications.NotificationDeleteReceiver"
android:enabled="true"
android:exported="true" />
</application>
</manifest>

View file

@ -56,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
@ -935,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)
@ -1033,29 +1034,6 @@ class MessagingManager @Inject constructor(
}
}
private fun handleDeleteIntent(
builder: NotificationCompat.Builder,
data: Map<String, String>,
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?,

View file

@ -11,6 +11,11 @@
<action android:name="io.homeassistant.companion.android.UPDATE_SENSORS" />
</intent-filter>
</receiver>
<receiver
android:name=".notifications.NotificationDeleteReceiver"
android:enabled="true"
android:exported="true" />
</application>
</manifest>

View file

@ -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

View file

@ -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<String, String>,
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)
}

View file

@ -263,6 +263,7 @@
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>

View file

@ -14,6 +14,7 @@ import io.homeassistant.companion.android.common.notifications.commandBeaconMoni
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
@ -116,6 +117,8 @@ class MessagingManager @Inject constructor(
handleText(notificationBuilder, data)
handleDeleteIntent(context, notificationBuilder, data, messageId, group, groupId, null)
notificationManagerCompat.apply {
Log.d(TAG, "Show notification with tag \"$tag\" and id \"$messageId\"")
notify(tag, messageId, notificationBuilder.build())