From caef58df5441cf036a4a8ec301bc0a92919b01fb Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 7 Mar 2018 22:11:02 +0100 Subject: [PATCH] properly handle stopwatch pause/resume --- .../clock/fragments/StopwatchFragment.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/StopwatchFragment.kt b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/StopwatchFragment.kt index a9b14690..5bf0d43e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/StopwatchFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/StopwatchFragment.kt @@ -24,7 +24,8 @@ class StopwatchFragment : Fragment() { private val updateHandler = Handler() private val mainLooper = Looper.getMainLooper() private var uptimeAtStart = 0L - private var ticksCount = 0 + private var totalTicks = 0 + private var currentTicks = 0 // ticks that reset at pause private var isRunning = false lateinit var view: ViewGroup @@ -89,26 +90,30 @@ class StopwatchFragment : Fragment() { updateHandler.post(updateRunnable) uptimeAtStart = SystemClock.uptimeMillis() } else { - val totalDuration = SystemClock.uptimeMillis() - uptimeAtStart + val prevSessionsMS = (totalTicks - currentTicks) * UPDATE_INTERVAL + val totalDuration = SystemClock.uptimeMillis() - uptimeAtStart + prevSessionsMS updateHandler.removeCallbacksAndMessages(null) view.stopwatch_time.text = totalDuration.formatStopwatchTime(true) + currentTicks = 0 + totalTicks-- } } private fun updateDisplayedText() { - view.stopwatch_time.text = (ticksCount * UPDATE_INTERVAL).formatStopwatchTime(false) + view.stopwatch_time.text = (totalTicks * UPDATE_INTERVAL).formatStopwatchTime(false) } private val updateRunnable = object : Runnable { override fun run() { if (isRunning) { - ticksCount++ - updateHandler.postAtTime(this, uptimeAtStart + ticksCount * UPDATE_INTERVAL) - if (ticksCount % 10 == 0) { + if (totalTicks % 10 == 0) { mainLooper.run { updateDisplayedText() } } + totalTicks++ + currentTicks++ + updateHandler.postAtTime(this, uptimeAtStart + currentTicks * UPDATE_INTERVAL) } } }