From 8ba3a017cd9a60b32f43276a35f336aecc93b84c Mon Sep 17 00:00:00 2001 From: fiatcode Date: Thu, 30 Apr 2026 11:08:21 +0700 Subject: [PATCH] fix: invoke heartbeat callback in HeartbeatWorker.doWork() The onHeartbeat callback passed to scheduleHeartbeat() was never invoked because HeartbeatWorker.doWork() returned success without calling it. Fix: Store callback in companion object and invoke it when worker runs. --- .../com/traccar/traccar_client/location/HeartbeatScheduler.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/app/src/main/kotlin/com/traccar/traccar_client/location/HeartbeatScheduler.kt b/android/app/src/main/kotlin/com/traccar/traccar_client/location/HeartbeatScheduler.kt index aa5bd30..579b4e4 100644 --- a/android/app/src/main/kotlin/com/traccar/traccar_client/location/HeartbeatScheduler.kt +++ b/android/app/src/main/kotlin/com/traccar/traccar_client/location/HeartbeatScheduler.kt @@ -15,6 +15,7 @@ class HeartbeatScheduler(private val context: Context) { private val workManager = WorkManager.getInstance(context) fun scheduleHeartbeat(intervalSeconds: Long, onHeartbeat: () -> Unit) { + onHeartbeatCallback = onHeartbeat val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.NOT_REQUIRED) .build() @@ -42,11 +43,13 @@ class HeartbeatScheduler(private val context: Context) { params: WorkerParameters ) : Worker(context, params) { override fun doWork(): Result { + onHeartbeatCallback?.invoke() return Result.success() } } companion object { + var onHeartbeatCallback: (() -> Unit)? = null const val HEARTBEAT_WORK_TAG = "traccar_heartbeat" const val HEARTBEAT_WORK_NAME = "traccar_heartbeat_work" }