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

Commit e10f4192 authored by HEO SEUNG's avatar HEO SEUNG Committed by Vishnu Nair
Browse files

[wm]: Freeform window layout while SIP showing

1. Set the input method target to all windows of the AppWindowToken
which the input method target window belongs, when input method
target is in freeform windowing mode.

2. If the freeform window has a dim, then apply an offset to dimBounds.

Test: atest WindowFrameTests#testFreeformContentInsets
Test: Run the test app (ex. PopupWithInput) > Launch to freeform mode
> Move the app near the location of IME

Bug: 123693028
Change-Id: Ib11d3ee05dd26ee1f28f12895ae300af7f3d0da7
(cherry picked from commit 4cbf77f88c3d7e323bcb6edd7aec1aa4ce58cd79)
parent 3de59f57
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -2712,7 +2712,13 @@ class Task extends WindowContainer<WindowContainer> {
        getDimBounds(mTmpDimBoundsRect);

        // Bounds need to be relative, as the dim layer is a child.
        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();
        }
+6 −2
Original line number Diff line number Diff line
@@ -958,8 +958,11 @@ class WindowState extends WindowContainer<WindowState> 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);
@@ -990,7 +993,8 @@ class WindowState extends WindowContainer<WindowState> 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) {