From 4e3f80539085f041ef05f92dfe96cadd218a2d00 Mon Sep 17 00:00:00 2001 From: Boris Safonov Date: Wed, 29 Jan 2025 14:29:20 +0200 Subject: [PATCH] fix: Delete conversation Crash --- .../notification/NotificationConstants.kt | 1 + .../android/workmanager/WireWorkerFactory.kt | 2 +- .../worker/DeleteConversationLocallyWorker.kt | 30 ++++++++++++++++++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/wire/android/notification/NotificationConstants.kt b/app/src/main/kotlin/com/wire/android/notification/NotificationConstants.kt index 80660e36fd..654a6baaf6 100644 --- a/app/src/main/kotlin/com/wire/android/notification/NotificationConstants.kt +++ b/app/src/main/kotlin/com/wire/android/notification/NotificationConstants.kt @@ -93,5 +93,6 @@ enum class NotificationIds { MIGRATION_NOTIFICATION_ID, SINGLE_USER_MIGRATION_NOTIFICATION_ID, MIGRATION_ERROR_NOTIFICATION_ID, + DELETING_CONVERSATION_NOTIFICATION_ID, PLAYING_AUDIO_MESSAGE_ID } diff --git a/app/src/main/kotlin/com/wire/android/workmanager/WireWorkerFactory.kt b/app/src/main/kotlin/com/wire/android/workmanager/WireWorkerFactory.kt index 47adebbf40..3d4b901c81 100644 --- a/app/src/main/kotlin/com/wire/android/workmanager/WireWorkerFactory.kt +++ b/app/src/main/kotlin/com/wire/android/workmanager/WireWorkerFactory.kt @@ -65,7 +65,7 @@ class WireWorkerFactory @Inject constructor( PersistentWebsocketCheckWorker(appContext, workerParameters, startPersistentWebsocketIfNecessary) DeleteConversationLocallyWorker::class.java.canonicalName -> - DeleteConversationLocallyWorker(appContext, workerParameters, coreLogic) + DeleteConversationLocallyWorker(appContext, workerParameters, coreLogic, notificationChannelsManager) else -> null } diff --git a/app/src/main/kotlin/com/wire/android/workmanager/worker/DeleteConversationLocallyWorker.kt b/app/src/main/kotlin/com/wire/android/workmanager/worker/DeleteConversationLocallyWorker.kt index dc1fc112e1..c9d87eb60a 100644 --- a/app/src/main/kotlin/com/wire/android/workmanager/worker/DeleteConversationLocallyWorker.kt +++ b/app/src/main/kotlin/com/wire/android/workmanager/worker/DeleteConversationLocallyWorker.kt @@ -18,15 +18,22 @@ package com.wire.android.workmanager.worker import android.content.Context +import androidx.core.app.NotificationCompat import androidx.hilt.work.HiltWorker import androidx.work.CoroutineWorker import androidx.work.ExistingWorkPolicy +import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OutOfQuotaPolicy import androidx.work.WorkInfo import androidx.work.WorkManager import androidx.work.WorkerParameters import androidx.work.workDataOf +import com.wire.android.R +import com.wire.android.notification.NotificationChannelsManager +import com.wire.android.notification.NotificationConstants +import com.wire.android.notification.NotificationIds +import com.wire.android.notification.openAppPendingIntent import com.wire.kalium.logic.CoreLogic import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl @@ -54,7 +61,8 @@ import kotlinx.coroutines.flow.mapNotNull class DeleteConversationLocallyWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, - private val coreLogic: CoreLogic + private val coreLogic: CoreLogic, + private val notificationChannelsManager: NotificationChannelsManager ) : CoroutineWorker(appContext, workerParams) { override suspend fun doWork(): Result = coroutineScope { inputData.getString(CONVERSATION_ID)?.let { id -> @@ -71,6 +79,26 @@ class DeleteConversationLocallyWorker @AssistedInject constructor( } ?: Result.failure() } + override suspend fun getForegroundInfo(): ForegroundInfo { + notificationChannelsManager.createRegularChannel( + NotificationConstants.OTHER_CHANNEL_ID, + NotificationConstants.OTHER_CHANNEL_NAME + ) + + val notification = NotificationCompat.Builder(applicationContext, NotificationConstants.OTHER_CHANNEL_ID) + .setSmallIcon(R.drawable.notification_icon_small) + .setAutoCancel(true) + .setSilent(true) + .setCategory(NotificationCompat.CATEGORY_SERVICE) + .setProgress(0, 0, true) + .setContentTitle(applicationContext.getString(R.string.notification_deleting_conversation)) + .setPriority(NotificationCompat.PRIORITY_MIN) + .setContentIntent(openAppPendingIntent(applicationContext)) + .build() + + return ForegroundInfo(NotificationIds.DELETING_CONVERSATION_NOTIFICATION_ID.ordinal, notification) + } + companion object { private const val NAME = "delete_conversation_locally_" const val CONVERSATION_ID = "delete_conversation_locally_conversation_id" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ff56f4feea..6a283fd6e0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -973,6 +973,7 @@ Incoming group call Tap to return to call - Calling... Audio message + Deleting conversation… Constant Bit Rate Microphone