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

Commit 648a0204 authored by Matt Pietal's avatar Matt Pietal
Browse files

Don't register multiple predraw listeners

Also make sure they are removed properly when the view becomes
detached.

Fixes: 203257107
Test: atest KeyguardClockSwitchControllerTest

Change-Id: Ied4d4e7774d15af71648b188ac723c9c7635f506
parent 618c83b0
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ public class KeyguardClockSwitch extends RelativeLayout {

    private int mClockSwitchYAmount;
    @VisibleForTesting boolean mChildrenAreLaidOut = false;
    private OnPreDrawListener mPreDrawListener;

    public KeyguardClockSwitch(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -284,15 +285,14 @@ public class KeyguardClockSwitch extends RelativeLayout {
        if (mChildrenAreLaidOut) {
            animateClockChange(clockSize == LARGE);
            mDisplayedClockSize = clockSize;
        } else {
            getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
        } else if (mPreDrawListener == null) {
            mPreDrawListener = () -> {
                switchToClock(clockSize);
                    getViewTreeObserver().removeOnPreDrawListener(this);
                getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
                mPreDrawListener = null;
                return true;
                }
            });
            };
            getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
        }
        return true;
    }
@@ -303,6 +303,13 @@ public class KeyguardClockSwitch extends RelativeLayout {
        mChildrenAreLaidOut = true;
    }

    void onViewDetached() {
        if (mPreDrawListener != null) {
            getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
            mPreDrawListener = null;
        }
    }

    public Paint getPaint() {
        return mClockView.getPaint();
    }
+1 −0
Original line number Diff line number Diff line
@@ -238,6 +238,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
        }
        mColorExtractor.removeOnColorsChangedListener(mColorsListener);
        mView.setClockPlugin(null, mStatusBarStateController.getState());
        mView.onViewDetached();
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
        verifyAttachment(times(1));

        listenerArgumentCaptor.getValue().onViewDetachedFromWindow(mView);

        verify(mView).onViewDetached();
        verify(mColorExtractor).removeOnColorsChangedListener(
                any(ColorExtractor.OnColorsChangedListener.class));
    }