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

Commit f0d96f83 authored by vadimt's avatar vadimt Committed by Vadim Tryshev
Browse files

Fixing activity leak via accumulation of draw listeners

Bug: 139137636
Change-Id: I0a2f0849f886acaac31746ac7c9724c765692e88
parent 31ff98e1
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -329,6 +329,16 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
    private BackgroundBlurController mBackgroundBlurController =
            new BackgroundBlurController(this);

    private final ViewTreeObserver.OnDrawListener mOnDrawListener =
            new ViewTreeObserver.OnDrawListener() {
                @Override
                public void onDraw() {
                    getBackgroundBlurController().setSurfaceToLauncher(mDragLayer);
                    mDragLayer.post(() -> mDragLayer.getViewTreeObserver().removeOnDrawListener(
                            this));
                }
            };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Object traceToken = TraceHelper.INSTANCE.beginSection(ON_CREATE_EVT,
@@ -930,6 +940,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
        final int origDragLayerChildCount = mDragLayer.getChildCount();
        super.onStop();

        mDragLayer.getViewTreeObserver().removeOnDrawListener(mOnDrawListener);

        if (mDeferOverlayCallbacks) {
            checkIfOverlayStillDeferred();
        } else {
@@ -970,13 +982,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns,
        if (!mDeferOverlayCallbacks) {
            mOverlayManager.onActivityStarted(this);
        }
        mDragLayer.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
            @Override
            public void onDraw() {
                getBackgroundBlurController().setSurfaceToLauncher(mDragLayer);
                mDragLayer.post(() -> mDragLayer.getViewTreeObserver().removeOnDrawListener(this));
            }
        });
        mDragLayer.getViewTreeObserver().addOnDrawListener(mOnDrawListener);

        mAppWidgetHost.setListenIfResumed(true);
        TraceHelper.INSTANCE.endSection(traceToken);