From de287fcb66cd74f9df50fa0e1a9d9c763617ec97 Mon Sep 17 00:00:00 2001 From: darken Date: Tue, 28 Jul 2026 20:22:43 +0200 Subject: [PATCH] fix(monitor): Log FGS start rejections distinctly with full stack --- .../capod/monitor/core/worker/MonitorControl.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorControl.kt b/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorControl.kt index 70eac0e5..ffba030c 100644 --- a/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorControl.kt +++ b/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorControl.kt @@ -1,11 +1,15 @@ package eu.darken.capod.monitor.core.worker +import android.annotation.SuppressLint +import android.app.ForegroundServiceStartNotAllowedException import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.Logging.Priority.WARN +import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag +import eu.darken.capod.common.hasApiLevel import eu.darken.capod.common.permissions.Permission import eu.darken.capod.common.startServiceCompat import javax.inject.Inject @@ -16,6 +20,7 @@ class MonitorControl @Inject constructor( @ApplicationContext private val context: Context, ) { + @SuppressLint("NewApi") fun startMonitor( forceStart: Boolean = false, ) { @@ -32,9 +37,13 @@ class MonitorControl @Inject constructor( context.startServiceCompat(MonitorService.intent(context, forceStart)) log(TAG) { "Monitor start request sent." } } catch (e: IllegalStateException) { - log(TAG, WARN) { "Failed to start monitor service: ${e.message}" } + if (hasApiLevel(31) && e is ForegroundServiceStartNotAllowedException) { + log(TAG, WARN) { "Start rejected, app is not allowed to start a FGS from the background: ${e.asLog()}" } + } else { + log(TAG, WARN) { "Failed to start monitor service: ${e.asLog()}" } + } } catch (e: SecurityException) { - log(TAG, WARN) { "Failed to start monitor service, permission issue: ${e.message}" } + log(TAG, WARN) { "Failed to start monitor service, permission issue: ${e.asLog()}" } } }