From b979d0943f9a5924d8148738fa40b1d876004ff5 Mon Sep 17 00:00:00 2001 From: Joseph Date: Wed, 6 Mar 2024 17:46:07 +0000 Subject: [PATCH] Improve timer accuracy --- android/app/src/main/java/com/massive/TimerService.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/com/massive/TimerService.kt b/android/app/src/main/java/com/massive/TimerService.kt index 68ae043..efb4997 100644 --- a/android/app/src/main/java/com/massive/TimerService.kt +++ b/android/app/src/main/java/com/massive/TimerService.kt @@ -77,6 +77,7 @@ class TimerService : Service() { secondsLeft = (intent?.getIntExtra("milliseconds", 0) ?: 0) / 1000 currentDescription = intent?.getStringExtra("description").toString() secondsTotal = secondsLeft + val startTime = System.currentTimeMillis() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { startForeground(ONGOING_ID, getProgress(secondsLeft).build(), FOREGROUND_SERVICE_TYPE_SPECIAL_USE) @@ -86,14 +87,16 @@ class TimerService : Service() { } battery() - Log.d("TimerService", "onStartCommand seconds=$secondsLeft") + Log.d("TimerService", "onStartCommand seconds=$secondsTotal") timerRunnable = object : Runnable { override fun run() { - if (secondsLeft > 0) { - secondsLeft-- + val millisElapsed = System.currentTimeMillis() - startTime + val secondsElapsed = (millisElapsed / 1000).toInt() + if (secondsElapsed < secondsTotal) { + secondsLeft = secondsTotal - secondsElapsed updateNotification(secondsLeft) - timerHandler.postDelayed(this, 1000) + timerHandler.postDelayed(this, 1000 - millisElapsed % 1000) } else { val settings = getSettings() vibrate(settings)