From 814e1f51e620a4ee99a48ecee0cb4d0bc7374c83 Mon Sep 17 00:00:00 2001 From: Simon Dubray Date: Thu, 5 Nov 2015 11:38:40 +0100 Subject: [PATCH] Chronometer: Update the value only if displayed on screen Chronometer is refreshed every second even if not displayed on the screen and if the screen is off. Change-Id: I9348c4f988b6822f2c7d9cac0e47acaf82a02e01 Signed-off-by: Simon Dubray Signed-off-by: Zhiquan Liu --- core/java/android/widget/Chronometer.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java index ebb54ff39d06e..151326449011c 100644 --- a/core/java/android/widget/Chronometer.java +++ b/core/java/android/widget/Chronometer.java @@ -25,6 +25,7 @@ import android.os.SystemClock; import android.text.format.DateUtils; import android.util.AttributeSet; import android.util.Log; +import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.widget.RemoteViews.RemoteView; @@ -226,6 +227,12 @@ public class Chronometer extends TextView { updateRunning(); } + @Override + protected void onVisibilityChanged(View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + updateRunning(); + } + private synchronized void updateText(long now) { mNow = now; long seconds = now - mBase; @@ -254,7 +261,7 @@ public class Chronometer extends TextView { } private void updateRunning() { - boolean running = mVisible && mStarted; + boolean running = mVisible && mStarted && isShown(); if (running != mRunning) { if (running) { updateText(SystemClock.elapsedRealtime());