summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hidenari Koshimae <hidenari.koshimae@sonymobile.com> 2016-11-16 08:18:30 +0000
committer android-build-merger <android-build-merger@google.com> 2016-11-16 08:18:30 +0000
commit9f0cc266ce80553d39fdfda23567b7968e70b26e (patch)
tree53dc160652a816758cb127cc951b5d2316123680
parent5c152a3d7f7bcd003a833b8ebe4a2d1eeb33df11 (diff)
parent9997fcc72cf3d9441db91582ae758e6eec594645 (diff)
Merge "CountDownTimer: not skip onTick()" am: 224d9e48fa
am: 9997fcc72c Change-Id: Ie09949fbc23ad87e159e063a59983a1a6bff98f8
-rw-r--r--core/java/android/os/CountDownTimer.java25
1 files changed, 17 insertions, 8 deletions
diff --git a/core/java/android/os/CountDownTimer.java b/core/java/android/os/CountDownTimer.java
index 58acbcf5684b..c7bf0fd6ba49 100644
--- a/core/java/android/os/CountDownTimer.java
+++ b/core/java/android/os/CountDownTimer.java
@@ -125,19 +125,28 @@ public abstract class CountDownTimer {
if (millisLeft <= 0) {
onFinish();
- } else if (millisLeft < mCountdownInterval) {
- // no tick, just delay until done
- sendMessageDelayed(obtainMessage(MSG), millisLeft);
} else {
long lastTickStart = SystemClock.elapsedRealtime();
onTick(millisLeft);
// take into account user's onTick taking time to execute
- long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime();
-
- // special case: user's onTick took more than interval to
- // complete, skip to next interval
- while (delay < 0) delay += mCountdownInterval;
+ long lastTickDuration = SystemClock.elapsedRealtime() - lastTickStart;
+ long delay;
+
+ if (millisLeft < mCountdownInterval) {
+ // just delay until done
+ delay = millisLeft - lastTickDuration;
+
+ // special case: user's onTick took more than interval to
+ // complete, trigger onFinish without delay
+ if (delay < 0) delay = 0;
+ } else {
+ delay = mCountdownInterval - lastTickDuration;
+
+ // special case: user's onTick took more than interval to
+ // complete, skip to next interval
+ while (delay < 0) delay += mCountdownInterval;
+ }
sendMessageDelayed(obtainMessage(MSG), delay);
}