Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65d1c294 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move expensive TextClock operations to onAttach"

parents 5204ad0a dffe6fdf
Loading
Loading
Loading
Loading
+46 −18
Original line number Diff line number Diff line
@@ -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 (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,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