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
This commit is contained in:
Wale Ogunwale
2016-05-10 15:53:09 -07:00
parent fc41735835
commit e6cb450b0d

View File

@@ -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;