fix: prevent unnecessary service lifecycle on startup for non-users
- 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
This commit is contained in:
+5
-1
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user