From 3b715bc46128ebebf2be89a6d7995256e84ab1a8 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Tue, 2 Sep 2025 17:31:52 -0400 Subject: [PATCH] Catch foreground service not allowed exceptions. --- .../securesms/service/GenericForegroundService.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.kt b/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.kt index 82aee08d05..54ca719bca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.service +import android.app.ForegroundServiceStartNotAllowedException import android.app.PendingIntent import android.app.Service import android.content.Context @@ -190,6 +191,14 @@ class GenericForegroundService : Service() { stopSelf() } + private fun stop() { + lock.withLock { + allActiveMessages.clear() + } + ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE) + stopSelf() + } + fun replaceTitle(id: Int, title: String) { lock.withLock { updateEntry(id) { oldEntry -> @@ -236,7 +245,11 @@ class GenericForegroundService : Service() { if (Build.VERSION.SDK_INT >= 31 && e.message?.contains("Time limit", ignoreCase = true) == true) { Log.w(TAG, "Foreground service timed out, but not in onTimeout call", e) stopDueToTimeout() + } else if (Build.VERSION.SDK_INT >= 31 && e is ForegroundServiceStartNotAllowedException) { + Log.w(TAG, "Unable to start foreground service", e) + stop() } else { + Log.w(TAG, "Unhandled exception being thrown when starting a foreground service.", e) throw e } }