Loading core/java/android/widget/TextClock.java +46 −18 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public class TextClock extends TextView { private CharSequence mDescFormat; private boolean mRegistered; private boolean mAttached; private Calendar mTime; private String mTimeZone; Loading Loading @@ -252,7 +252,7 @@ public class TextClock extends TextView { } createTime(mTimeZone); // Wait until registering for events to handle the ticker // Wait until onAttachedToWindow() to handle the ticker chooseFormat(false); } Loading Loading @@ -503,9 +503,12 @@ public class TextClock extends TextView { boolean hadSeconds = mHasSeconds; mHasSeconds = DateFormat.hasSeconds(mFormat); if (handleTicker && mRegistered && hadSeconds != mHasSeconds) { if (hadSeconds) getHandler().removeCallbacks(mTicker); else mTicker.run(); if (handleTicker && mAttached && hadSeconds != mHasSeconds) { if (hadSeconds) { getHandler().removeCallbacks(mTicker); } else if (getVisibility() == VISIBLE) { mTicker.run(); } } } Loading @@ -517,27 +520,50 @@ public class TextClock extends TextView { } @Override public void onVisibilityAggregated(boolean isVisible) { if (!mRegistered && isVisible) { mRegistered = true; protected void onAttachedToWindow() { super.onAttachedToWindow(); if (!mAttached) { mAttached = true; registerReceiver(); registerObserver(); createTime(mTimeZone); if (getVisibility() == VISIBLE) { if (mHasSeconds) { mTicker.run(); } else { onTimeChanged(); } } else if (mRegistered && !isVisible) { } } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mAttached) { unregisterReceiver(); unregisterObserver(); getHandler().removeCallbacks(mTicker); mRegistered = false; mAttached = false; } } @Override public void onVisibilityAggregated(boolean isVisible) { if (mAttached) { if (isVisible && mHasSeconds) { mTicker.run(); } else { getHandler().removeCallbacks(mTicker); } onTimeChanged(); } } Loading @@ -560,7 +586,7 @@ public class TextClock extends TextView { } private void registerObserver() { if (mRegistered) { if (mAttached) { if (mFormatChangeObserver == null) { mFormatChangeObserver = new FormatChangeObserver(getHandler()); } Loading @@ -587,10 +613,12 @@ public class TextClock extends TextView { } private void onTimeChanged() { if (getVisibility() == VISIBLE) { mTime.setTimeInMillis(System.currentTimeMillis()); setText(DateFormat.format(mFormat, mTime)); setContentDescription(DateFormat.format(mDescFormat, mTime)); } } /** @hide */ @Override Loading Loading
core/java/android/widget/TextClock.java +46 −18 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public class TextClock extends TextView { private CharSequence mDescFormat; private boolean mRegistered; private boolean mAttached; private Calendar mTime; private String mTimeZone; Loading Loading @@ -252,7 +252,7 @@ public class TextClock extends TextView { } createTime(mTimeZone); // Wait until registering for events to handle the ticker // Wait until onAttachedToWindow() to handle the ticker chooseFormat(false); } Loading Loading @@ -503,9 +503,12 @@ public class TextClock extends TextView { boolean hadSeconds = mHasSeconds; mHasSeconds = DateFormat.hasSeconds(mFormat); if (handleTicker && mRegistered && hadSeconds != mHasSeconds) { if (hadSeconds) getHandler().removeCallbacks(mTicker); else mTicker.run(); if (handleTicker && mAttached && hadSeconds != mHasSeconds) { if (hadSeconds) { getHandler().removeCallbacks(mTicker); } else if (getVisibility() == VISIBLE) { mTicker.run(); } } } Loading @@ -517,27 +520,50 @@ public class TextClock extends TextView { } @Override public void onVisibilityAggregated(boolean isVisible) { if (!mRegistered && isVisible) { mRegistered = true; protected void onAttachedToWindow() { super.onAttachedToWindow(); if (!mAttached) { mAttached = true; registerReceiver(); registerObserver(); createTime(mTimeZone); if (getVisibility() == VISIBLE) { if (mHasSeconds) { mTicker.run(); } else { onTimeChanged(); } } else if (mRegistered && !isVisible) { } } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mAttached) { unregisterReceiver(); unregisterObserver(); getHandler().removeCallbacks(mTicker); mRegistered = false; mAttached = false; } } @Override public void onVisibilityAggregated(boolean isVisible) { if (mAttached) { if (isVisible && mHasSeconds) { mTicker.run(); } else { getHandler().removeCallbacks(mTicker); } onTimeChanged(); } } Loading @@ -560,7 +586,7 @@ public class TextClock extends TextView { } private void registerObserver() { if (mRegistered) { if (mAttached) { if (mFormatChangeObserver == null) { mFormatChangeObserver = new FormatChangeObserver(getHandler()); } Loading @@ -587,10 +613,12 @@ public class TextClock extends TextView { } private void onTimeChanged() { if (getVisibility() == VISIBLE) { mTime.setTimeInMillis(System.currentTimeMillis()); setText(DateFormat.format(mFormat, mTime)); setContentDescription(DateFormat.format(mDescFormat, mTime)); } } /** @hide */ @Override Loading