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

Commit c6e09ee4 authored by Chavi Weingarten's avatar Chavi Weingarten Committed by android-build-merger
Browse files

Merge "Prevent IME from showing when AOD shown or windows not drawn." into pi-dev am: cf551425

am: 34878a27

Change-Id: If16150ea0b95a1cb40a0af184ca22a08892d3988
parents 9d29b3b3 34878a27
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ class KeyguardController {
        mKeyguardShowing = keyguardShowing;
        mAodShowing = aodShowing;
        mSecondaryDisplayShowing = secondaryDisplayShowing;
        mWindowManager.setAodShowing(aodShowing);
        if (showingChanged) {
            dismissDockedStackIfNeeded();
            setKeyguardGoingAway(false);
+19 −1
Original line number Diff line number Diff line
@@ -816,6 +816,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {

    private final MutableBoolean mTmpBoolean = new MutableBoolean(false);

    private boolean mAodShowing;

    private static final int MSG_ENABLE_POINTER_LOCATION = 1;
    private static final int MSG_DISABLE_POINTER_LOCATION = 2;
    private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3;
@@ -3058,8 +3060,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        boolean keyguardLocked = isKeyguardLocked();
        boolean hideDockDivider = attrs.type == TYPE_DOCK_DIVIDER
                && !mWindowManagerInternal.isStackVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
        // If AOD is showing, the IME should be hidden. However, sometimes the AOD is considered
        // hidden because it's in the process of hiding, but it's still being shown on screen.
        // In that case, we want to continue hiding the IME until the windows have completed
        // drawing. This way, we know that the IME can be safely shown since the other windows are
        // now shown.
        final boolean hideIme =
                win.isInputMethodWindow() && (mAodShowing || !mWindowManagerDrawComplete);
        return (keyguardLocked && !allowWhenLocked && win.getDisplayId() == DEFAULT_DISPLAY)
                || hideDockDivider;
                || hideDockDivider || hideIme;
    }

    /** {@inheritDoc} */
@@ -8977,4 +8986,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    public void onLockTaskStateChangedLw(int lockTaskState) {
        mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState);
    }

    @Override
    public boolean setAodShowing(boolean aodShowing) {
        if (mAodShowing != aodShowing) {
            mAodShowing = aodShowing;
            return true;
        }
        return false;
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -1767,4 +1767,11 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants {
     *                      {@link ActivityManager#LOCK_TASK_MODE_PINNED}.
     */
    void onLockTaskStateChangedLw(int lockTaskState);

    /**
     * Updates the flag about whether AOD is showing.
     *
     * @return whether the value was changed.
     */
    boolean setAodShowing(boolean aodShowing);
}
+13 −0
Original line number Diff line number Diff line
@@ -7577,4 +7577,17 @@ public class WindowManagerService extends IWindowManager.Stub
            mPolicy.onLockTaskStateChangedLw(lockTaskState);
        }
    }

    /**
     * Updates {@link WindowManagerPolicy} with new value about whether AOD  is showing. If AOD
     * has changed, this will trigger a {@link WindowSurfacePlacer#performSurfacePlacement} to
     * ensure the new value takes effect.
     */
    public void setAodShowing(boolean aodShowing) {
        synchronized (mWindowMap) {
            if (mPolicy.setAodShowing(aodShowing)) {
                mWindowPlacerLocked.performSurfacePlacement();
            }
        }
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -598,4 +598,9 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
    @Override
    public void onLockTaskStateChangedLw(int lockTaskState) {
    }

    @Override
    public boolean setAodShowing(boolean aodShowing) {
        return false;
    }
}