Do not listen for clock ticks, time changes, timezone changes, or time format changes when TextClock is not visible

BUG: 31840153
Change-Id: I11adf1036fb25b28aee5caba6daa1ab0d9d1f23a
This commit is contained in:
Erik Wolsheimer
2016-10-03 13:07:19 -07:00
parent a87ba31b70
commit e12cd3bb3b

View File

@@ -130,7 +130,7 @@ public class TextClock extends TextView {
private CharSequence mDescFormat; private CharSequence mDescFormat;
private boolean mAttached; private boolean mRegistered;
private Calendar mTime; private Calendar mTime;
private String mTimeZone; private String mTimeZone;
@@ -250,7 +250,7 @@ public class TextClock extends TextView {
} }
createTime(mTimeZone); createTime(mTimeZone);
// Wait until onAttachedToWindow() to handle the ticker // Wait until registering for events to handle the ticker
chooseFormat(false); chooseFormat(false);
} }
@@ -501,7 +501,7 @@ public class TextClock extends TextView {
boolean hadSeconds = mHasSeconds; boolean hadSeconds = mHasSeconds;
mHasSeconds = DateFormat.hasSeconds(mFormat); mHasSeconds = DateFormat.hasSeconds(mFormat);
if (handleTicker && mAttached && hadSeconds != mHasSeconds) { if (handleTicker && mRegistered && hadSeconds != mHasSeconds) {
if (hadSeconds) getHandler().removeCallbacks(mTicker); if (hadSeconds) getHandler().removeCallbacks(mTicker);
else mTicker.run(); else mTicker.run();
} }
@@ -515,11 +515,9 @@ public class TextClock extends TextView {
} }
@Override @Override
protected void onAttachedToWindow() { public void onVisibilityAggregated(boolean isVisible) {
super.onAttachedToWindow(); if (!mRegistered && isVisible) {
mRegistered = true;
if (!mAttached) {
mAttached = true;
registerReceiver(); registerReceiver();
registerObserver(); registerObserver();
@@ -531,20 +529,13 @@ public class TextClock extends TextView {
} else { } else {
onTimeChanged(); onTimeChanged();
} }
} } else if (mRegistered && !isVisible) {
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mAttached) {
unregisterReceiver(); unregisterReceiver();
unregisterObserver(); unregisterObserver();
getHandler().removeCallbacks(mTicker); getHandler().removeCallbacks(mTicker);
mAttached = false; mRegistered = false;
} }
} }
@@ -567,7 +558,7 @@ public class TextClock extends TextView {
} }
private void registerObserver() { private void registerObserver() {
if (isAttachedToWindow()) { if (mRegistered) {
if (mFormatChangeObserver == null) { if (mFormatChangeObserver == null) {
mFormatChangeObserver = new FormatChangeObserver(getHandler()); mFormatChangeObserver = new FormatChangeObserver(getHandler());
} }