From e6cb450b0db119d71601a8329bed380bb2b4e275 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Tue, 10 May 2016 15:53:09 -0700 Subject: [PATCH] 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 --- .../android/server/wm/WindowStateAnimator.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index e5f603c7865bc..174dbc2b1af92 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -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;