diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 1b31d07cf31eb..04d467a3b2759 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -606,7 +606,12 @@ public class DockedStackDividerController implements DimLayerUser { private void setMinimizedDockedStack(boolean minimized) { final TaskStack stack = mDisplayContent.getDockedStackVisibleForUserLocked(); notifyDockedStackMinimizedChanged(minimized, 0); - setMinimizeAmount(stack, minimized ? 1f : 0f); + if (stack == null) { + return; + } + if (stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f)) { + mService.mWindowPlacerLocked.performSurfacePlacement(); + } } private boolean isAnimationMaximizing() { @@ -690,8 +695,11 @@ public class DockedStackDividerController implements DimLayerUser { float t = Math.min(1f, (float) (now - mAnimationStartTime) / mAnimationDuration); t = (isAnimationMaximizing() ? TOUCH_RESPONSE_INTERPOLATOR : mMinimizedDockInterpolator) .getInterpolation(t); - setMinimizeAmount(stack, getMinimizeAmount(stack, t)); - + if (stack != null) { + if (stack.setAdjustedForMinimizedDock(getMinimizeAmount(stack, t))) { + mService.mWindowPlacerLocked.performSurfacePlacement(); + } + } if (t >= 1.0f) { mAnimatingForMinimizedDockedStack = false; return false; @@ -700,42 +708,6 @@ public class DockedStackDividerController implements DimLayerUser { } } - void setMinimizeAmount(TaskStack dockedStack, float minimizeAmount) { - final ArrayList stacks = mDisplayContent.getStacks(); - - // If the docked stack is not visible, clear the complementary stack on all stacks. - if (dockedStack == null) { - for (int i = stacks.size() - 1; i >= 0; --i) { - final TaskStack stack = stacks.get(i); - stack.resetAdjustedForComplementDock(); - } - return; - } - - // Otherwise if the docked stack minimize amount has changed, update the adjusted bounds - // on the other stack that's currently visible, so that the stack's getDimBounds() - // occupies what's left by the docked stack. This is needed so that stuff like wallpaper - // gets cropped properly to the area left by the dock. - if (dockedStack.setAdjustedForMinimizedDock(minimizeAmount)) { - final boolean adjusted = - dockedStack.isVisibleForUserLocked() && minimizeAmount != 0.0f; - dockedStack.getDimBounds(mTmpRect2); - int dockSide = dockedStack.getDockSide(); - for (int i = stacks.size() - 1; i >= 0; --i) { - final TaskStack stack = stacks.get(i); - if (stack == dockedStack) { - continue; - } - if (stack.isVisibleLocked() && adjusted) { - stack.setAdjustedForComplementDock(mTmpRect2, dockSide); - } else { - stack.resetAdjustedForComplementDock(); - } - } - mService.mWindowPlacerLocked.performSurfacePlacement(); - } - } - private float getInterpolatedAnimationValue(float t) { return t * mAnimationTarget + (1 - t) * mAnimationStart; } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 114d9bed827ce..8be5b19d15306 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -123,7 +123,6 @@ public class TaskStack implements DimLayer.DimLayerUser, private float mAdjustImeAmount; private float mAdjustDividerAmount; private final int mDockedStackMinimizeThickness; - private boolean mAdjustedForForComplementDock; // If this is true, we are in the bounds animating mode. // The task will be down or upscaled to perfectly fit the @@ -243,9 +242,7 @@ public class TaskStack implements DimLayer.DimLayerUser, insetBounds = mFullyAdjustedImeBounds; } } - if (!mAdjustedForForComplementDock) { - alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds); - } + alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds); mDisplayContent.layoutNeeded = true; } @@ -864,7 +861,6 @@ public class TaskStack implements DimLayer.DimLayerUser, mImeWin = imeWin; mImeGoingAway = false; if (!mAdjustedForIme || forceUpdate) { - mAdjustedForForComplementDock = false; mAdjustedForIme = true; mAdjustImeAmount = 0f; mAdjustDividerAmount = 0f; @@ -927,12 +923,10 @@ public class TaskStack implements DimLayer.DimLayerUser, * @return Whether the amount has changed and a layout is needed. */ boolean setAdjustedForMinimizedDock(float minimizeAmount) { - mAdjustedForForComplementDock = false; - if (minimizeAmount != mMinimizeAmount) { mMinimizeAmount = minimizeAmount; updateAdjustedBounds(); - return true; + return isVisibleForUserLocked(); } else { return false; } @@ -942,33 +936,6 @@ public class TaskStack implements DimLayer.DimLayerUser, return mMinimizeAmount != 0f; } - void setAdjustedForComplementDock(Rect dockBounds, int dockSide) { - if (mMinimizeAmount != 0f || mAdjustedForIme) { - return; - } - mTmpAdjustedBounds.set(mBounds); - if (dockSide == DOCKED_TOP) { - mTmpAdjustedBounds.top = dockBounds.bottom; - } else if (dockSide == DOCKED_LEFT) { - mTmpAdjustedBounds.left = dockBounds.right; - } else if (dockSide == DOCKED_RIGHT) { - mTmpAdjustedBounds.right = dockBounds.left; - } else { - Slog.w(TAG_WM, "setAdjustedForComplementDock: invalid dock side " + dockSide); - return; - } - mAdjustedForForComplementDock = true; - setAdjustedBounds(mTmpAdjustedBounds); - } - - void resetAdjustedForComplementDock() { - if (mAdjustedForForComplementDock) { - mAdjustedForForComplementDock = false; - mTmpAdjustedBounds.setEmpty(); - setAdjustedBounds(mTmpAdjustedBounds); - } - } - /** * Puts all visible tasks that are adjusted for IME into resizing mode and adds the windows * to the list of to be drawn windows the service is waiting for. diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 9dae0f2d3262e..f14fd814f5a99 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -23,7 +23,6 @@ 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; @@ -1328,33 +1327,6 @@ 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(); - final WindowStateAnimator winAnimator = wallpaperTarget.mWinAnimator; - // We can only crop the wallpaper using final crop with stack bounds if the target - // is not animating, or if it's animating with clip mode STACK_CLIP_AFTER_ANIM. - // If it's animating with mode STACK_CLIP_NONE, we shouldn't crop either the task - // itself or the wallpaper. If it's animating with STACK_CLIP_BEFORE_ANIM, the crop - // is before the transform on the task itself. - final boolean useFinalCropOnWallpaper = !winAnimator.isAnimationSet() - || winAnimator.resolveStackClip() == STACK_CLIP_AFTER_ANIM; - if (task != null && !task.isFullscreen() - && task.cropWindowsToStackBounds() - && useFinalCropOnWallpaper){ - final TaskStack stack = task.mStack; - if (stack != null && !stack.isFullscreen()) { - stack.getDimBounds(mTmpStackBounds); - finalClipRect.set(mTmpStackBounds); - } - } - } - return; - } - final Task task = w.getTask(); if (task == null || !task.cropWindowsToStackBounds()) { return; @@ -1487,7 +1459,7 @@ class WindowStateAnimator { // We need to ensure for each surface, that we disable transformation matrix // scaling in the same transaction which we resize the surface in. // As we are in SCALING_MODE_SCALE_TO_WINDOW, SurfaceFlinger will - // then take over the scaling until the new buffer arrives, and things + // then take over the scaling until the new buffer arrives, and things // will be seamless. mForceScaleUntilResize = true; } else {