diff options
author | Jean-Baptiste Queru <jbq@google.com> | 2009-03-18 11:33:14 -0700 |
---|---|---|
committer | Jean-Baptiste Queru <jbq@google.com> | 2009-03-18 11:33:14 -0700 |
commit | 2a73de7b21a89aa2ba4c254d28658b49793425b2 (patch) | |
tree | ded5bcd581464b4174d81c373044b6d36eee58d2 /core/java/android/widget/Chronometer.java | |
parent | 42e48026b21a962e5bf40344d738665ecbd9d74d (diff) | |
parent | ba87e3e6c985e7175152993b5efcc7dd2f0e1c93 (diff) | |
download | frameworks_base-2a73de7b21a89aa2ba4c254d28658b49793425b2.zip frameworks_base-2a73de7b21a89aa2ba4c254d28658b49793425b2.tar.gz frameworks_base-2a73de7b21a89aa2ba4c254d28658b49793425b2.tar.bz2 |
Merge commit 'remotes/korg/cupcake' into merge
Conflicts:
core/java/android/view/animation/TranslateAnimation.java
core/jni/Android.mk
core/res/res/values-en-rGB/strings.xml
libs/audioflinger/AudioFlinger.cpp
libs/surfaceflinger/LayerScreenshot.cpp
packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
Diffstat (limited to 'core/java/android/widget/Chronometer.java')
-rw-r--r-- | core/java/android/widget/Chronometer.java | 67 |
1 files changed, 61 insertions, 6 deletions
diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java index 7086ae2..91add58 100644 --- a/core/java/android/widget/Chronometer.java +++ b/core/java/android/widget/Chronometer.java @@ -46,6 +46,18 @@ import java.util.Locale; public class Chronometer extends TextView { private static final String TAG = "Chronometer"; + /** + * A callback that notifies when the chronometer has incremented on its own. + */ + public interface OnChronometerTickListener { + + /** + * Notification that the chronometer has changed. + */ + void onChronometerTick(Chronometer chronometer); + + } + private long mBase; private boolean mVisible; private boolean mStarted; @@ -56,7 +68,11 @@ public class Chronometer extends TextView { private Locale mFormatterLocale; private Object[] mFormatterArgs = new Object[1]; private StringBuilder mFormatBuilder; - + private OnChronometerTickListener mOnChronometerTickListener; + private StringBuilder mRecycle = new StringBuilder(8); + + private static final int TICK_WHAT = 2; + /** * Initialize this Chronometer object. * Sets the base to the current time. @@ -99,8 +115,10 @@ public class Chronometer extends TextView { * * @param base Use the {@link SystemClock#elapsedRealtime} time base. */ + @android.view.RemotableViewMethod public void setBase(long base) { mBase = base; + dispatchChronometerTick(); updateText(SystemClock.elapsedRealtime()); } @@ -122,6 +140,7 @@ public class Chronometer extends TextView { * * @param format the format string. */ + @android.view.RemotableViewMethod public void setFormat(String format) { mFormat = format; if (format != null && mFormatBuilder == null) { @@ -137,6 +156,23 @@ public class Chronometer extends TextView { } /** + * Sets the listener to be called when the chronometer changes. + * + * @param listener The listener. + */ + public void setOnChronometerTickListener(OnChronometerTickListener listener) { + mOnChronometerTickListener = listener; + } + + /** + * @return The listener (may be null) that is listening for chronometer change + * events. + */ + public OnChronometerTickListener getOnChronometerTickListener() { + return mOnChronometerTickListener; + } + + /** * Start counting up. This does not affect the base as set from {@link #setBase}, just * the view display. * @@ -161,6 +197,15 @@ public class Chronometer extends TextView { updateRunning(); } + /** + * The same as calling {@link #start} or {@link #stop}. + */ + @android.view.RemotableViewMethod + public void setStarted(boolean started) { + mStarted = started; + updateRunning(); + } + @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); @@ -175,10 +220,10 @@ public class Chronometer extends TextView { updateRunning(); } - private void updateText(long now) { + private synchronized void updateText(long now) { long seconds = now - mBase; seconds /= 1000; - String text = DateUtils.formatElapsedTime(seconds); + String text = DateUtils.formatElapsedTime(mRecycle, seconds); if (mFormat != null) { Locale loc = Locale.getDefault(); @@ -206,7 +251,10 @@ public class Chronometer extends TextView { if (running != mRunning) { if (running) { updateText(SystemClock.elapsedRealtime()); - mHandler.sendMessageDelayed(Message.obtain(), 1000); + dispatchChronometerTick(); + mHandler.sendMessageDelayed(Message.obtain(mHandler, TICK_WHAT), 1000); + } else { + mHandler.removeMessages(TICK_WHAT); } mRunning = running; } @@ -214,10 +262,17 @@ public class Chronometer extends TextView { private Handler mHandler = new Handler() { public void handleMessage(Message m) { - if (mStarted) { + if (mRunning) { updateText(SystemClock.elapsedRealtime()); - sendMessageDelayed(Message.obtain(), 1000); + dispatchChronometerTick(); + sendMessageDelayed(Message.obtain(this, TICK_WHAT), 1000); } } }; + + void dispatchChronometerTick() { + if (mOnChronometerTickListener != null) { + mOnChronometerTickListener.onChronometerTick(this); + } + } } |