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

Commit fb04fa5f authored by satok's avatar satok Committed by Android (Google) Code Review
Browse files

Merge "Reduce window resizing during IME transition"

parents 53dc7533 792faa2c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1099,6 +1099,13 @@ public interface WindowManagerPolicy {
     */
    public void stopScreenSaver();

    /**
     * Set the last used input method window state. This state is used to make IME transition
     * smooth.
     * @hide
     */
    public void setLastInputMethodWindowLw(WindowState ime, WindowState target);

    /**
     * Print the WindowManagerPolicy's state into the given stream.
     *
+34 −13
Original line number Diff line number Diff line
@@ -324,6 +324,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    volatile boolean mPowerKeyHandled; // accessed from input reader and handler thread
    boolean mPendingPowerKeyUpCanceled;
    Handler mHandler;
    WindowState mLastInputMethodWindow = null;
    WindowState mLastInputMethodTargetWindow = null;

    static final int RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS = 0;
    static final int RECENT_APPS_BEHAVIOR_EXIT_TOUCH_MODE_AND_SHOW = 1;
@@ -2395,6 +2397,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (win == mStatusBar || win == mNavigationBar) {
            return;
        }
        final boolean needsToOffsetInputMethodTarget =
                (win == mLastInputMethodTargetWindow && mLastInputMethodWindow != null);
        if (needsToOffsetInputMethodTarget) {
            if (DEBUG_LAYOUT) {
                Slog.i(TAG, "Offset ime target window by the last ime window state");
            }
            offsetInputMethodWindowLw(mLastInputMethodWindow);
        }

        final int fl = attrs.flags;
        final int sim = attrs.softInputMode;
@@ -2672,6 +2682,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        // Dock windows carve out the bottom of the screen, so normal windows
        // can't appear underneath them.
        if (attrs.type == TYPE_INPUT_METHOD && !win.getGivenInsetsPendingLw()) {
            setLastInputMethodWindowLw(null, null);
            offsetInputMethodWindowLw(win);
        }
    }

    private void offsetInputMethodWindowLw(WindowState win) {
        int top = win.getContentFrameLw().top;
        top += win.getGivenContentInsetsLw().top;
        if (mContentBottom > top) {
@@ -2686,7 +2702,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                + mDockBottom + " mContentBottom="
                + mContentBottom + " mCurBottom=" + mCurBottom);
    }
    }

    /** {@inheritDoc} */
    @Override
@@ -4184,6 +4199,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        return mHasNavigationBar;
    }

    @Override
    public void setLastInputMethodWindowLw(WindowState ime, WindowState target) {
        mLastInputMethodWindow = ime;
        mLastInputMethodTargetWindow = target;
    }

    public void dump(String prefix, FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.print(prefix); pw.print("mSafeMode="); pw.print(mSafeMode);
                pw.print(" mSystemReady="); pw.print(mSystemReady);
+4 −0
Original line number Diff line number Diff line
@@ -2262,6 +2262,7 @@ public class WindowManagerService extends IWindowManager.Stub
            boolean imMayMove = true;

            if (attrs.type == TYPE_INPUT_METHOD) {
                win.mGivenInsetsPending = true;
                mInputMethodWindow = win;
                addInputMethodWindowToListLocked(win);
                imMayMove = false;
@@ -3422,6 +3423,9 @@ public class WindowManagerService extends IWindowManager.Stub
        synchronized(mWindowMap) {
            WindowToken wtoken = mTokenMap.remove(token);
            if (wtoken != null) {
                if (wtoken.windowType == TYPE_INPUT_METHOD && mInputMethodWindow != null) {
                    mPolicy.setLastInputMethodWindowLw(mInputMethodWindow, mInputMethodTarget);
                }
                boolean delayed = false;
                if (!wtoken.hidden) {
                    wtoken.hidden = true;