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

Commit 41de79e2 authored by Chong Zhang's avatar Chong Zhang
Browse files

Make sure don't adjust IME when docked left-right

bug: 28295645
Change-Id: Ia8f7f9a92fcc562bd672abae4d3ddfd6e6201a79
parent dc7ce840
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) {