diff options
| author | 2017-03-16 01:10:19 +0000 | |
|---|---|---|
| committer | 2017-03-16 01:10:23 +0000 | |
| commit | 65d1c294b10de101ce29f0bbba2789d63e23dda8 (patch) | |
| tree | 084460bee15d812f198fabe0b17fe2a1dac98ae3 | |
| parent | 5204ad0a2aa5903d9edf2e8814d0224afd1313cf (diff) | |
| parent | dffe6fdfe1e25e3bad52c00ff6c978deb0327852 (diff) | |
Merge "Move expensive TextClock operations to onAttach"
| -rw-r--r-- | core/java/android/widget/TextClock.java | 64 |
1 files changed, 46 insertions, 18 deletions
diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java index a6a9db44c420..59881b5e6b6b 100644 --- a/core/java/android/widget/TextClock.java +++ b/core/java/android/widget/TextClock.java @@ -132,7 +132,7 @@ public class TextClock extends TextView { private CharSequence mDescFormat; - private boolean mRegistered; + private boolean mAttached; private Calendar mTime; private String mTimeZone; @@ -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); } @@ -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(); + } } } @@ -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 (mHasSeconds) { - mTicker.run(); - } else { - onTimeChanged(); + 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(); } } @@ -560,7 +586,7 @@ public class TextClock extends TextView { } private void registerObserver() { - if (mRegistered) { + if (mAttached) { if (mFormatChangeObserver == null) { mFormatChangeObserver = new FormatChangeObserver(getHandler()); } @@ -587,9 +613,11 @@ public class TextClock extends TextView { } private void onTimeChanged() { - mTime.setTimeInMillis(System.currentTimeMillis()); - setText(DateFormat.format(mFormat, mTime)); - setContentDescription(DateFormat.format(mDescFormat, mTime)); + if (getVisibility() == VISIBLE) { + mTime.setTimeInMillis(System.currentTimeMillis()); + setText(DateFormat.format(mFormat, mTime)); + setContentDescription(DateFormat.format(mDescFormat, mTime)); + } } /** @hide */ |