From e4b5b12a0bcaea916d539908d733f822209565cf Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 22 Apr 2026 00:55:15 +0000 Subject: [PATCH] fix: prevent unnecessary service lifecycle on startup for non-users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - stop() now uses stopService() instead of startService(STOP intent). stopService() is a no-op when the service isn't running and avoids starting a service just to stop it, which could throw on Android 12+. - disableAllLayers() only runs when transitioning from enabled → disabled, not on initial load with false. Users who never enabled the service won't trigger any service/WorkManager/AlarmManager calls on login. https://claude.ai/code/session_01LEPfmgGnwjB9a5SDFw5U8t --- .../notifications/AlwaysOnNotificationServiceManager.kt | 6 +++++- .../service/notifications/NotificationRelayService.kt | 6 +----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/AlwaysOnNotificationServiceManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/AlwaysOnNotificationServiceManager.kt index bfbf4139b..37fc34447 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/AlwaysOnNotificationServiceManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/AlwaysOnNotificationServiceManager.kt @@ -50,19 +50,23 @@ class AlwaysOnNotificationServiceManager( } private var watchJob: Job? = null + private var wasEnabled = false /** * Starts watching the given account's always-on setting. * When the setting changes, all layers are started or stopped accordingly. + * On initial load with false, nothing happens (no-op for users who never enabled it). */ fun watchAccount(account: Account) { watchJob?.cancel() + wasEnabled = false watchJob = scope.launch { account.settings.alwaysOnNotificationService.collectLatest { enabled -> if (enabled) { + wasEnabled = true enableAllLayers() - } else { + } else if (wasEnabled) { disableAllLayers() } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationRelayService.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationRelayService.kt index 28c964068..a9f386356 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationRelayService.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/NotificationRelayService.kt @@ -95,11 +95,7 @@ class NotificationRelayService : Service() { } fun stop(context: Context) { - val intent = - Intent(context, NotificationRelayService::class.java).apply { - action = ACTION_STOP - } - context.startService(intent) + context.stopService(Intent(context, NotificationRelayService::class.java)) } fun isEnabled(context: Context): Boolean =