From 5a25c31b3925b0a0ef3893e03b983cc62308ea42 Mon Sep 17 00:00:00 2001 From: KremeCN <3265494849@qq.com> Date: Wed, 26 Aug 2026 20:29:13 +0800 Subject: [PATCH] feat: guard automation scheduling by profile --- .../automation/runtime/AutomationBootstrapper.kt | 11 ++++++++++- .../runtime/WorkManagerAutomationScheduleStore.kt | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/AutomationBootstrapper.kt b/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/AutomationBootstrapper.kt index be5b730..373ce7a 100644 --- a/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/AutomationBootstrapper.kt +++ b/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/AutomationBootstrapper.kt @@ -4,13 +4,22 @@ import com.flagship.abox.manager.domain.ProviderProfileStore import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import com.flagship.abox.manager.domain.ProviderProfileId class AutomationBootstrapper( private val profileStore: ProviderProfileStore, private val scheduler: AutomationScheduler, private val scope: CoroutineScope, ) { + private var previousProfileId: ProviderProfileId? = null + fun start() { - scope.launch { profileStore.observeActiveProfile().collectLatest { scheduler.reconcileActiveProfile() } } + scope.launch { + profileStore.observeActiveProfile().collectLatest { active -> + previousProfileId?.takeIf { it != active?.id }?.let { scheduler.cancel(it) } + previousProfileId = active?.id + scheduler.reconcileActiveProfile() + } + } } } diff --git a/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/WorkManagerAutomationScheduleStore.kt b/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/WorkManagerAutomationScheduleStore.kt index 4fd9cd9..5fa0e17 100644 --- a/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/WorkManagerAutomationScheduleStore.kt +++ b/android/feature/automation/src/main/kotlin/com/flagship/abox/manager/automation/runtime/WorkManagerAutomationScheduleStore.kt @@ -13,6 +13,7 @@ class WorkManagerAutomationScheduleStore(context: Context) : AutomationScheduleS private val workManager = WorkManager.getInstance(context) override suspend fun replace(profileId: ProviderProfileId, scenes: List): DomainResult { + if (scenes.isEmpty()) return remove(profileId) val request = PeriodicWorkRequestBuilder(15, TimeUnit.MINUTES) .setInputData(androidx.work.Data.Builder().putString(KEY_PROFILE_ID, profileId.value).build()) .build()