diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index b4633184c969a..9a140daad417d 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -2744,7 +2744,13 @@ class Task extends WindowContainer { getDimBounds(mTmpDimBoundsRect); // Bounds need to be relative, as the dim layer is a child. - mTmpDimBoundsRect.offsetTo(0, 0); + if (inFreeformWindowingMode()) { + getBounds(mTmpRect); + mTmpDimBoundsRect.offsetTo(mTmpDimBoundsRect.left - mTmpRect.left, + mTmpDimBoundsRect.top - mTmpRect.top); + } else { + mTmpDimBoundsRect.offsetTo(0, 0); + } if (mDimmer.updateDims(getPendingTransaction(), mTmpDimBoundsRect)) { scheduleAnimation(); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index e257c784ca6c6..4e768da18041d 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -984,8 +984,11 @@ class WindowState extends WindowContainer implements WindowManagerP final int layoutXDiff; final int layoutYDiff; final WindowState imeWin = mWmService.mRoot.getCurrentInputMethodWindow(); + final boolean isInputMethodAdjustTarget = windowsAreFloating + ? dc.mInputMethodTarget != null && task == dc.mInputMethodTarget.getTask() + : isInputMethodTarget(); final boolean isImeTarget = - imeWin != null && imeWin.isVisibleNow() && isInputMethodTarget(); + imeWin != null && imeWin.isVisibleNow() && isInputMethodAdjustTarget; if (isFullscreenAndFillsDisplay || layoutInParentFrame()) { // We use the parent frame as the containing frame for fullscreen and child windows mWindowFrames.mContainingFrame.set(mWindowFrames.mParentFrame); @@ -1016,7 +1019,8 @@ class WindowState extends WindowContainer implements WindowManagerP final int distanceToTop = Math.max(mWindowFrames.mContainingFrame.top - mWindowFrames.mContentFrame.top, 0); int offs = Math.min(bottomOverlap, distanceToTop); - mWindowFrames.mContainingFrame.top -= offs; + mWindowFrames.mContainingFrame.offset(0, -offs); + mInsetFrame.offset(0, -offs); } } else if (!inPinnedWindowingMode() && mWindowFrames.mContainingFrame.bottom > mWindowFrames.mParentFrame.bottom) {