diff --git a/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt b/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt index 72b89cb4c..94a74e308 100644 --- a/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt +++ b/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt @@ -228,7 +228,7 @@ class MessagingService : FirebaseMessagingService() { handleActions(notificationBuilder, tag, messageId, data) - handleDeleteIntent(notificationBuilder, messageId, group, groupId) + handleDeleteIntent(notificationBuilder, data, messageId, group, groupId) handleContentIntent(notificationBuilder, messageId, group, groupId, data) @@ -274,12 +274,15 @@ class MessagingService : FirebaseMessagingService() { private fun handleDeleteIntent( builder: NotificationCompat.Builder, + data: Map, messageId: Int, group: String?, groupId: Int + ) { val deleteIntent = Intent(this, NotificationDeleteReceiver::class.java).apply { + putExtra(NotificationDeleteReceiver.EXTRA_DATA, HashMap(data)) putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP, group) putExtra(NotificationDeleteReceiver.EXTRA_NOTIFICATION_GROUP_ID, groupId) } diff --git a/app/src/full/java/io/homeassistant/companion/android/notifications/NotificationDeleteReceiver.kt b/app/src/full/java/io/homeassistant/companion/android/notifications/NotificationDeleteReceiver.kt index d1e91dbc9..e97390ce6 100644 --- a/app/src/full/java/io/homeassistant/companion/android/notifications/NotificationDeleteReceiver.kt +++ b/app/src/full/java/io/homeassistant/companion/android/notifications/NotificationDeleteReceiver.kt @@ -3,17 +3,36 @@ package io.homeassistant.companion.android.notifications import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.util.Log +import android.widget.Toast import androidx.core.app.NotificationManagerCompat +import io.homeassistant.companion.android.R +import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor +import io.homeassistant.companion.android.common.data.integration.IntegrationRepository import io.homeassistant.companion.android.util.cancelGroupIfNeeded +import javax.inject.Inject +import kotlinx.coroutines.runBlocking class NotificationDeleteReceiver : BroadcastReceiver() { companion object { + const val EXTRA_DATA = "EXTRA_DATA" const val EXTRA_NOTIFICATION_GROUP = "EXTRA_NOTIFICATION_GROUP" const val EXTRA_NOTIFICATION_GROUP_ID = "EXTRA_NOTIFICATION_GROUP_ID" + const val TAG = "NotifDeleteReceiver" } + @Inject + lateinit var integrationRepository: IntegrationRepository + override fun onReceive(context: Context, intent: Intent) { + DaggerServiceComponent.builder() + .appComponent((context.applicationContext as GraphComponentAccessor).appComponent) + .build() + .inject(this) + + @SuppressWarnings("unchecked") + val hashData = intent.getSerializableExtra(EXTRA_DATA) as HashMap val group = intent.getStringExtra(EXTRA_NOTIFICATION_GROUP) val groupId = intent.getIntExtra(EXTRA_NOTIFICATION_GROUP_ID, -1) @@ -23,5 +42,19 @@ class NotificationDeleteReceiver : BroadcastReceiver() { // This maybe the case if timeoutAfter has deleted the notification // Then only the empty group is left and needs to be cancelled notificationManagerCompat.cancelGroupIfNeeded(group, groupId) + + runBlocking { + try { + integrationRepository.fireEvent("mobile_app_notification_dismissed", hashData) + Log.d(TAG, "Notification dismiss event successful!") + } catch (e: Exception) { + Log.e(TAG, "Issue sending event to Home Assistant", e) + Toast.makeText( + context, + R.string.notification_dismiss_failure, + Toast.LENGTH_LONG + ).show() + } + } } } diff --git a/app/src/full/java/io/homeassistant/companion/android/notifications/ServiceComponent.kt b/app/src/full/java/io/homeassistant/companion/android/notifications/ServiceComponent.kt index a74ece277..08d77be79 100644 --- a/app/src/full/java/io/homeassistant/companion/android/notifications/ServiceComponent.kt +++ b/app/src/full/java/io/homeassistant/companion/android/notifications/ServiceComponent.kt @@ -9,4 +9,6 @@ interface ServiceComponent { fun inject(service: MessagingService) fun inject(receiver: NotificationActionReceiver) + + fun inject(receiver: NotificationDeleteReceiver) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7e93110bc..86bbadad8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -138,6 +138,7 @@ Home Assistant instance enter address manually Map Need Help? + Failed to send event on notification dismissed Create duplicate Fire event Read NFC Tag