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:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user