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

Commit cf551425 authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Android (Google) Code Review
Browse files

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

parents 596fea95 0e9fb133
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} */
@@ -8980,4 +8989,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
@@ -1774,4 +1774,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
@@ -7588,4 +7588,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;
    }
}