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

Commit 0a86eb59 authored by Chong Zhang's avatar Chong Zhang Committed by android-build-merger
Browse files

Merge "Do not adjust bounds for IME until IME is actually displayed" into nyc-dev

am: 4bbbeaa6

* commit '4bbbeaa6':
  Do not adjust bounds for IME until IME is actually displayed
parents 8073f62e 4bbbeaa6
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ public class DockedStackDividerController implements DimLayerUser {
    private final Interpolator mMinimizedDockInterpolator;
    private float mMaximizeMeetFraction;
    private final Rect mTouchRegion = new Rect();
    private boolean mAdjustingForIme;

    DockedStackDividerController(WindowManagerService service, DisplayContent displayContent) {
        mService = service;
@@ -173,6 +174,14 @@ public class DockedStackDividerController implements DimLayerUser {
        return mLastVisibility;
    }

    void setAdjustingForIme(boolean adjusting) {
        mAdjustingForIme = adjusting;
    }

    boolean isAdjustingForIme() {
        return mAdjustingForIme;
    }

    void positionDockedStackedDivider(Rect frame) {
        TaskStack stack = mDisplayContent.getDockedStackLocked();
        if (stack == null) {
+12 −6
Original line number Diff line number Diff line
@@ -200,10 +200,11 @@ public class TaskStack implements DimLayer.DimLayerUser,
     * @param bounds The adjusted bounds.
     * @param keepInsets Whether to keep the insets from the original bounds or to calculate new
     *                   ones depending on the adjusted bounds.
     * @return true if the adjusted bounds has changed.
     */
    private void setAdjustedBounds(Rect bounds, boolean keepInsets) {
    private boolean setAdjustedBounds(Rect bounds, boolean keepInsets) {
        if (mAdjustedBounds.equals(bounds)) {
            return;
            return false;
        }

        mAdjustedBounds.set(bounds);
@@ -211,6 +212,7 @@ public class TaskStack implements DimLayer.DimLayerUser,
        alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds,
                adjusted && keepInsets ? mBounds : null);
        mDisplayContent.layoutNeeded = true;
        return true;
    }

    private void alignTasksToAdjustedBounds(Rect adjustedBounds, Rect tempInsetBounds) {
@@ -794,7 +796,9 @@ public class TaskStack implements DimLayer.DimLayerUser,
    void setAdjustedForIme(WindowState imeWin) {
        mAdjustedForIme = true;
        mImeWin = imeWin;
        updateAdjustedBounds();
        if (updateAdjustedBounds()) {
            getDisplayContent().mDividerControllerLocked.setAdjustingForIme(true);
        }
    }

    /**
@@ -803,7 +807,9 @@ public class TaskStack implements DimLayer.DimLayerUser,
    void resetAdjustedForIme() {
        mAdjustedForIme = false;
        mImeWin = null;
        updateAdjustedBounds();
        if (updateAdjustedBounds()) {
            getDisplayContent().mDividerControllerLocked.setAdjustingForIme(true);
        }
    }

    /**
@@ -920,7 +926,7 @@ public class TaskStack implements DimLayer.DimLayerUser,
    /**
     * Updates the adjustment depending on it's current state.
     */
    void updateAdjustedBounds() {
    boolean updateAdjustedBounds() {
        boolean adjust = false;
        if (mMinimizeAmount != 0f) {
            adjust = adjustForMinimizedDockedStack(mMinimizeAmount);
@@ -931,7 +937,7 @@ public class TaskStack implements DimLayer.DimLayerUser,
            mTmpAdjustedBounds.setEmpty();
            mLastContentBounds.setEmpty();
        }
        setAdjustedBounds(mTmpAdjustedBounds, isAdjustedForMinimizedDockedStack());
        return setAdjustedBounds(mTmpAdjustedBounds, isAdjustedForMinimizedDockedStack());
    }

    boolean isAdjustedForMinimizedDockedStack() {
+25 −23
Original line number Diff line number Diff line
@@ -7352,6 +7352,30 @@ public class WindowManagerService extends IWindowManager.Stub
        }
    }

    private void adjustForImeIfNeeded(final DisplayContent displayContent) {
        final WindowState imeWin = mInputMethodWindow;
        final TaskStack focusedStack =
                mCurrentFocus != null ? mCurrentFocus.getStack() : null;
        if (imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw()
                && isStackVisibleLocked(DOCKED_STACK_ID)
                && focusedStack != null
                && focusedStack.getDockSide() == DOCKED_BOTTOM){
            final ArrayList<TaskStack> stacks = displayContent.getStacks();
            for (int i = stacks.size() - 1; i >= 0; --i) {
                final TaskStack stack = stacks.get(i);
                if (stack.isVisibleLocked()) {
                    stack.setAdjustedForIme(imeWin);
                }
            }
        } else {
            final ArrayList<TaskStack> stacks = displayContent.getStacks();
            for (int i = stacks.size() - 1; i >= 0; --i) {
                final TaskStack stack = stacks.get(i);
                stack.resetAdjustedForIme();
            }
        }
    }

    // -------------------------------------------------------------
    // Drag and drop
    // -------------------------------------------------------------
@@ -8209,30 +8233,8 @@ public class WindowManagerService extends IWindowManager.Stub
                case UPDATE_DOCKED_STACK_DIVIDER: {
                    synchronized (mWindowMap) {
                        final DisplayContent displayContent = getDefaultDisplayContentLocked();

                        displayContent.getDockedDividerController().reevaluateVisibility(false);

                        final WindowState imeWin = mInputMethodWindow;
                        final TaskStack focusedStack =
                                mCurrentFocus != null ? mCurrentFocus.getStack() : null;
                        if (imeWin != null && imeWin.isVisibleNow()
                                && isStackVisibleLocked(DOCKED_STACK_ID)
                                && focusedStack != null
                                && focusedStack.getDockSide() == DOCKED_BOTTOM){
                            final ArrayList<TaskStack> stacks = displayContent.getStacks();
                            for (int i = stacks.size() - 1; i >= 0; --i) {
                                final TaskStack stack = stacks.get(i);
                                if (stack.isVisibleLocked()) {
                                    stack.setAdjustedForIme(imeWin);
                                }
                            }
                        } else {
                            final ArrayList<TaskStack> stacks = displayContent.getStacks();
                            for (int i = stacks.size() - 1; i >= 0; --i) {
                                final TaskStack stack = stacks.get(i);
                                stack.resetAdjustedForIme();
                            }
                        }
                        adjustForImeIfNeeded(displayContent);
                    }
                }
                break;
+6 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
@@ -689,6 +690,9 @@ class WindowSurfacePlacer {
                            && !w.isDragResizing() && !adjustedForMinimizedDockedStack
                            && (task == null || !w.getTask().mStack.getFreezeMovementAnimations())) {
                        winAnimator.setMoveAnimation(left, top);
                    } else if (w.mAttrs.type  == TYPE_DOCK_DIVIDER &&
                            displayContent.getDockedDividerController().isAdjustingForIme()) {
                        winAnimator.setMoveAnimation(left, top);
                    }

                    //TODO (multidisplay): Accessibility supported only for the default display.
@@ -805,6 +809,8 @@ class WindowSurfacePlacer {
                mService.updateResizingWindows(w);
            }

            displayContent.getDockedDividerController().setAdjustingForIme(false);

            mService.mDisplayManagerInternal.setDisplayProperties(displayId,
                    mDisplayHasContent,
                    mPreferredRefreshRate,