From 9bfc861aeacda1b61d2614a39d679028b280ff0c Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 23 Dec 2024 22:50:01 +0700 Subject: [PATCH] android: cancel worker task if the service was disabled (#5410) --- .../main/java/chat/simplex/app/MessagesFetcherWorker.kt | 6 ++++-- .../android/src/main/java/chat/simplex/app/SimplexApp.kt | 8 +++++++- .../src/main/java/chat/simplex/app/SimplexService.kt | 2 ++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/MessagesFetcherWorker.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/MessagesFetcherWorker.kt index b18204d905..9264ca6abf 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/MessagesFetcherWorker.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/MessagesFetcherWorker.kt @@ -32,8 +32,10 @@ object MessagesFetcherWorker { SimplexApp.context.getWorkManagerInstance().enqueueUniqueWork(UNIQUE_WORK_TAG, ExistingWorkPolicy.REPLACE, periodicWorkRequest) } - fun cancelAll() { - Log.d(TAG, "Worker: canceled all tasks") + fun cancelAll(withLog: Boolean = true) { + if (withLog) { + Log.d(TAG, "Worker: canceled all tasks") + } SimplexApp.context.getWorkManagerInstance().cancelUniqueWork(UNIQUE_WORK_TAG) } } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt index 07685a4526..ee259a98d0 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt @@ -33,6 +33,7 @@ import chat.simplex.common.views.helpers.* import chat.simplex.common.views.onboarding.OnboardingStage import com.jakewharton.processphoenix.ProcessPhoenix import kotlinx.coroutines.* +import kotlinx.coroutines.flow.map import java.io.* import java.util.* import java.util.concurrent.TimeUnit @@ -151,6 +152,7 @@ class SimplexApp: Application(), LifecycleEventObserver { * */ fun schedulePeriodicServiceRestartWorker() = CoroutineScope(Dispatchers.Default).launch { if (!allowToStartServiceAfterAppExit()) { + getWorkManagerInstance().cancelUniqueWork(SimplexService.SERVICE_START_WORKER_WORK_NAME_PERIODIC) return@launch } val workerVersion = chatController.appPrefs.autoRestartWorkerVersion.get() @@ -172,6 +174,7 @@ class SimplexApp: Application(), LifecycleEventObserver { fun schedulePeriodicWakeUp() = CoroutineScope(Dispatchers.Default).launch { if (!allowToStartPeriodically()) { + MessagesFetcherWorker.cancelAll(withLog = false) return@launch } MessagesFetcherWorker.scheduleWork() @@ -227,7 +230,9 @@ class SimplexApp: Application(), LifecycleEventObserver { SimplexService.safeStopService() } } - + if (mode != NotificationsMode.SERVICE) { + getWorkManagerInstance().cancelUniqueWork(SimplexService.SERVICE_START_WORKER_WORK_NAME_PERIODIC) + } if (mode != NotificationsMode.PERIODIC) { MessagesFetcherWorker.cancelAll() } @@ -244,6 +249,7 @@ class SimplexApp: Application(), LifecycleEventObserver { } override fun androidChatStopped() { + getWorkManagerInstance().cancelUniqueWork(SimplexService.SERVICE_START_WORKER_WORK_NAME_PERIODIC) SimplexService.safeStopService() MessagesFetcherWorker.cancelAll() } diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt index 3b9f2ade26..cb50336fce 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt @@ -139,6 +139,7 @@ class SimplexService: Service() { if (chatDbStatus != DBMigrationResult.OK) { Log.w(chat.simplex.app.TAG, "SimplexService: problem with the database: $chatDbStatus") showPassphraseNotification(chatDbStatus) + androidAppContext.getWorkManagerInstance().cancelUniqueWork(SimplexService.SERVICE_START_WORKER_WORK_NAME_PERIODIC) safeStopService() return@withLongRunningApi } @@ -681,6 +682,7 @@ class SimplexService: Service() { } ChatController.appPrefs.notificationsMode.set(NotificationsMode.OFF) StartReceiver.toggleReceiver(false) + androidAppContext.getWorkManagerInstance().cancelUniqueWork(SimplexService.SERVICE_START_WORKER_WORK_NAME_PERIODIC) MessagesFetcherWorker.cancelAll() safeStopService() }