From 3694a61fb4f70bf9677282080687f17c1bc5cda6 Mon Sep 17 00:00:00 2001 From: t-p-white Date: Mon, 15 Jan 2024 11:49:37 +0000 Subject: [PATCH] Bug 1874675 - Replaced usages of runBlocking in MessageNotificationWorker --- app/build.gradle | 4 +- .../messaging/MessageNotificationWorker.kt | 67 ++++++++++--------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index de18512c7..80778b623 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -636,12 +636,14 @@ dependencies { implementation FenixDependencies.androidx_navigation_ui implementation ComponentsDependencies.androidx_compose_navigation implementation ComponentsDependencies.androidx_recyclerview + implementation ComponentsDependencies.androidx_lifecycle_common implementation ComponentsDependencies.androidx_lifecycle_livedata implementation ComponentsDependencies.androidx_lifecycle_process implementation ComponentsDependencies.androidx_lifecycle_runtime - implementation ComponentsDependencies.androidx_lifecycle_viewmodel + implementation ComponentsDependencies.androidx_lifecycle_service + implementation ComponentsDependencies.androidx_core implementation ComponentsDependencies.androidx_core_ktx implementation FenixDependencies.androidx_core_splashscreen diff --git a/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt b/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt index 4d8d9ade4..7211e0047 100644 --- a/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt +++ b/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt @@ -4,26 +4,26 @@ package org.mozilla.fenix.messaging -import android.app.Activity import android.app.Notification import android.app.PendingIntent -import android.app.Service import android.content.Context import android.content.Intent import android.os.Bundle -import android.os.IBinder +import androidx.activity.ComponentActivity +import androidx.lifecycle.LifecycleService +import androidx.lifecycle.lifecycleScope import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import androidx.work.WorkerParameters +import kotlinx.coroutines.launch import mozilla.components.service.nimbus.messaging.FxNimbusMessaging import mozilla.components.service.nimbus.messaging.Message import mozilla.components.support.base.ids.SharedIdsHelper import mozilla.components.support.utils.BootUtils import org.mozilla.fenix.ext.components import org.mozilla.fenix.onboarding.ensureMarketingChannelExists -import org.mozilla.fenix.perf.runBlockingIncrement import org.mozilla.fenix.utils.IntentUtils import org.mozilla.fenix.utils.createBaseNotification import java.util.concurrent.TimeUnit @@ -170,28 +170,27 @@ class MessageNotificationWorker( * When a [Message] [Notification] is dismissed by the user record telemetry data and update the * [Message.metadata]. * - * This [Service] is only intended to be used by the [MessageNotificationWorker.createOnDismissPendingIntent] function. + * This Service is only intended to be used by the [MessageNotificationWorker.createOnDismissPendingIntent] function. */ -class NotificationDismissedService : Service() { - - /** - * This service cannot be bound to. - */ - override fun onBind(intent: Intent?): IBinder? = null +class NotificationDismissedService : LifecycleService() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + super.onStartCommand(intent, flags, startId) + if (intent != null) { val nimbusMessagingController = FenixNimbusMessagingController(applicationContext.components.analytics.messagingStorage) - // Get the relevant message. - val message = intent.getStringExtra(DISMISSED_MESSAGE_ID)?.let { messageId -> - runBlockingIncrement { nimbusMessagingController.getMessage(messageId) } - } + lifecycleScope.launch { + // Get the relevant message. + val message = intent.getStringExtra(DISMISSED_MESSAGE_ID)?.let { messageId -> + nimbusMessagingController.getMessage(messageId) + } - if (message != null) { - // Update message as 'dismissed'. - runBlockingIncrement { nimbusMessagingController.onMessageDismissed(message.metadata) } + if (message != null) { + // Update message as 'dismissed'. + nimbusMessagingController.onMessageDismissed(message.metadata) + } } } @@ -203,9 +202,9 @@ class NotificationDismissedService : Service() { * When a [Message] [Notification] is clicked by the user record telemetry data and update the * [Message.metadata]. * - * This [Activity] is only intended to be used by the [MessageNotificationWorker.createOnClickPendingIntent] function. + * This Activity is only intended to be used by the [MessageNotificationWorker.createOnClickPendingIntent] function. */ -class NotificationClickedReceiverActivity : Activity() { +class NotificationClickedReceiverActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -213,22 +212,24 @@ class NotificationClickedReceiverActivity : Activity() { val nimbusMessagingController = FenixNimbusMessagingController(components.analytics.messagingStorage) - // Get the relevant message. - val message = intent.getStringExtra(CLICKED_MESSAGE_ID)?.let { messageId -> - runBlockingIncrement { nimbusMessagingController.getMessage(messageId) } - } + lifecycleScope.launch { + // Get the relevant message. + val message = intent.getStringExtra(CLICKED_MESSAGE_ID)?.let { messageId -> + nimbusMessagingController.getMessage(messageId) + } - if (message != null) { - // Update message as 'clicked'. - runBlockingIncrement { nimbusMessagingController.onMessageClicked(message.metadata) } + if (message != null) { + // Update message as 'clicked'. + nimbusMessagingController.onMessageClicked(message.metadata) - // Create the intent. - val intent = nimbusMessagingController.getIntentForMessage(message) - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + // Create the intent. + val intent = nimbusMessagingController.getIntentForMessage(message) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) - // Start the message intent. - startActivity(intent) + // Start the message intent. + startActivity(intent) + } } // End this activity.