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

Commit 937eff0e authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Dispatch blur radius for BACKGROUND_APP state

When entering BACKGROUND_APP, it's possible that the blur radius will be
lost. We need to dispatch it on the first possible frame, otherwise
Overview won't have blurs.

Fixes: 196828055
Test: enter overview multiple times
Test: pull up all apps
Test: open app from home or all apps
Change-Id: I5920e1b28e2d23421863ecd59845e902040d126c
parent 701c7601
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -96,7 +96,11 @@ public class DepthController implements StateHandler<LauncherState>,
                public void onDraw() {
                    View view = mLauncher.getDragLayer();
                    ViewRootImpl viewRootImpl = view.getViewRootImpl();
                    setSurface(viewRootImpl != null ? viewRootImpl.getSurfaceControl() : null);
                    boolean applied = setSurface(
                            viewRootImpl != null ? viewRootImpl.getSurfaceControl() : null);
                    if (!applied) {
                        dispatchTransactionSurface(mDepth);
                    }
                    view.post(() -> view.getViewTreeObserver().removeOnDrawListener(this));
                }
            };
@@ -202,20 +206,22 @@ public class DepthController implements StateHandler<LauncherState>,

    /**
     * Sets the specified app target surface to apply the blur to.
     * @return true when surface was valid and transaction was dispatched.
     */
    public void setSurface(SurfaceControl surface) {
    public boolean setSurface(SurfaceControl surface) {
        // Set launcher as the SurfaceControl when we don't need an external target anymore.
        if (surface == null) {
            ViewRootImpl viewRootImpl = mLauncher.getDragLayer().getViewRootImpl();
            surface = viewRootImpl != null ? viewRootImpl.getSurfaceControl() : null;
        }

        if (mSurface != surface) {
            mSurface = surface;
            if (surface != null) {
                dispatchTransactionSurface(mDepth);
                return true;
            }
        }
        return false;
    }

    @Override
@@ -229,6 +235,8 @@ public class DepthController implements StateHandler<LauncherState>,
            setDepth(toDepth);
        } else if (toState == LauncherState.OVERVIEW) {
            dispatchTransactionSurface(mDepth);
        } else if (toState == LauncherState.BACKGROUND_APP) {
            mLauncher.getDragLayer().getViewTreeObserver().addOnDrawListener(mOnDrawListener);
        }
    }