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

Commit 5da7a4a3 authored by Chong Zhang's avatar Chong Zhang Committed by Android (Google) Code Review
Browse files

Merge "Make sure don't adjust IME when docked left-right" into nyc-dev

parents cdb5fcf7 41de79e2
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -174,6 +174,7 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.WindowManager.DOCKED_BOTTOM;
import static android.view.WindowManager.DOCKED_INVALID;
import static android.view.WindowManager.DOCKED_TOP;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
@@ -7467,6 +7468,10 @@ public class WindowManagerService extends IWindowManager.Stub
        final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw();
        final boolean dockVisible = isStackVisibleLocked(DOCKED_STACK_ID);
        final TaskStack imeTargetStack = getImeTargetStackLocked();
        final int imeDockSide = (dockVisible && imeTargetStack != null) ?
                imeTargetStack.getDockSide() : DOCKED_INVALID;
        final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
        final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM);

        // The divider could be adjusted for IME position, or be thinner than usual,
        // or both. There are three possible cases:
@@ -7474,20 +7479,19 @@ public class WindowManagerService extends IWindowManager.Stub
        // - If IME is visible, and focus is on bottom, divider is moved for IME and thinner.
        // - If IME is not visible, divider is not moved and is normal width.

        if (imeVisible && dockVisible && imeTargetStack != null) {
            final boolean isFocusOnBottom = imeTargetStack.getDockSide() == DOCKED_BOTTOM;
        if (imeVisible && dockVisible && (imeOnTop || imeOnBottom)) {
            final ArrayList<TaskStack> stacks = displayContent.getStacks();
            for (int i = stacks.size() - 1; i >= 0; --i) {
                final TaskStack stack = stacks.get(i);
                final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
                if (stack.isVisibleLocked() && (isFocusOnBottom || isDockedOnBottom)) {
                if (stack.isVisibleLocked() && (imeOnBottom || isDockedOnBottom)) {
                    stack.setAdjustedForIme(imeWin);
                } else {
                    stack.resetAdjustedForIme(false);
                }
            }
            displayContent.mDividerControllerLocked.setAdjustedForIme(
                    isFocusOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin);
                    imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin);
        } else {
            final ArrayList<TaskStack> stacks = displayContent.getStacks();
            for (int i = stacks.size() - 1; i >= 0; --i) {