From bf048e2a753a185c46125ac64db144d4a4d4f074 Mon Sep 17 00:00:00 2001 From: Clark Date: Wed, 7 Jun 2023 14:12:35 -0400 Subject: [PATCH] Dont block main thread when we try to stop FCM fetch service. --- .../securesms/gcm/FcmFetchForegroundService.kt | 1 + .../securesms/gcm/FcmFetchManager.kt | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchForegroundService.kt b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchForegroundService.kt index 1348a74d86..0b577411a3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchForegroundService.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchForegroundService.kt @@ -47,6 +47,7 @@ class FcmFetchForegroundService : Service() { return if (intent != null && intent.getBooleanExtra(KEY_STOP_SELF, false)) { stopForeground(true) stopSelf() + FcmFetchManager.onForegroundFetchServiceStop() START_NOT_STICKY } else { START_STICKY diff --git a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt index bd3c754882..2b756fd362 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmFetchManager.kt @@ -39,6 +39,9 @@ object FcmFetchManager { @Volatile private var startedForeground = false + @Volatile + private var stoppingForeground = false + /** * @return True if a service was successfully started, otherwise false. */ @@ -89,6 +92,7 @@ object FcmFetchManager { if (startedForeground) { try { context.startService(FcmFetchForegroundService.buildStopIntent(context)) + stoppingForeground = true } catch (e: IllegalStateException) { Log.w(TAG, "Failed to stop the foreground notification!", e) } @@ -102,7 +106,10 @@ object FcmFetchManager { @JvmStatic fun tryLegacyFallback(context: Context) { synchronized(this) { - if (startedForeground) { + if (startedForeground || stoppingForeground) { + if (stoppingForeground) { + Log.i(TAG, "Legacy fallback: foreground service is stopping, but trying to run in background anyways.") + } val performedReplace = EXECUTOR.enqueue { fetch(context) } if (performedReplace) { @@ -134,4 +141,11 @@ object FcmFetchManager { } } } + + fun onForegroundFetchServiceStop() { + synchronized(this) { + stoppingForeground = false + Log.i(TAG, "Foreground service stopped successfully") + } + } }