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

Commit e6cb450b authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Crop wallpaper windows to their current target stack bounds

Crop wallpaper windows to the stack bounds of their current target to avoid
them showing behind transparent windows in other stacks in split-screen mode.

Bug: 27989717
Change-Id: Iff7cec201dd8061026e32af0f44380862fc37705
parent fc417358
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
import static android.view.WindowManager.LayoutParams.FLAG_SCALED;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import static com.android.server.wm.AppWindowAnimator.sDummyAnimation;
import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
@@ -1323,6 +1324,23 @@ class WindowStateAnimator {
            return;
        }

        // We crop wallpaper windows to the stack bounds of their current target to avoid them
        // showing behind transparent windows in other stacks in split-screen mode.
        if (w.getBaseType() == TYPE_WALLPAPER) {
            final WindowState wallpaperTarget = mWallpaperControllerLocked.getWallpaperTarget();
            if (wallpaperTarget != null) {
                final Task task = wallpaperTarget.getTask();
                if (task != null && !task.isFullscreen()) {
                    final TaskStack stack = task.mStack;
                    if (stack != null && !stack.isFullscreen()) {
                        stack.getDimBounds(mTmpStackBounds);
                        clipRect.intersect(mTmpStackBounds);
                    }
                }
            }
            return;
        }

        final Task task = w.getTask();
        if (task == null || !task.cropWindowsToStackBounds()) {
            return;