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

Commit 4bf18a7c authored by Craig Mautner's avatar Craig Mautner
Browse files

Handle keyguard visibility states separately.

Previous to this change the forceHiding variable was a boolean. This
change recognizes the different configurations of the keyguard by
defining separate states for forceHiding and testing for window
visibility differently in each state.

Fixes bug 6786114.

Change-Id: I078e0df7865ddafe498ee46e02110c3a017386d0
parent 4461f602
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -254,7 +254,13 @@ public class WindowAnimator {
        ArrayList<WindowStateAnimator> unForceHiding = null;
        boolean wallpaperInUnForceHiding = false;

        boolean forceHiding = false;
        // forceHiding states.
        final int KEYGUARD_NOT_SHOWN     = 0;
        final int KEYGUARD_ANIMATING_IN  = 1;
        final int KEYGUARD_SHOWN         = 2;
        final int KEYGUARD_ANIMATING_OUT = 3;
        int forceHiding = KEYGUARD_NOT_SHOWN;

        for (int i = mWinAnimators.size() - 1; i >= 0; i--) {
            WindowStateAnimator winAnimator = mWinAnimators.get(i);
            WindowState win = winAnimator.mWin;
@@ -291,8 +297,16 @@ public class WindowAnimator {
                        }
                        mService.mFocusMayChange = true;
                    }
                    if (win.isReadyForDisplay() && winAnimator.mAnimationIsEntrance) {
                        forceHiding = true;
                    if (win.isReadyForDisplay()) {
                        if (nowAnimating) {
                            if (winAnimator.mAnimationIsEntrance) {
                                forceHiding = KEYGUARD_ANIMATING_IN;
                            } else {
                                forceHiding = KEYGUARD_ANIMATING_OUT;
                            }
                        } else {
                            forceHiding = KEYGUARD_SHOWN;
                        }
                    }
                    if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
                            "Force hide " + forceHiding
@@ -304,9 +318,12 @@ public class WindowAnimator {
                            + " hidden=" + win.mRootToken.hidden
                            + " anim=" + win.mWinAnimator.mAnimation);
                } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
                    final boolean hideWhenLocked =
                            (winAnimator.mAttrFlags & FLAG_SHOW_WHEN_LOCKED) == 0;
                    final boolean changed;
                    if (forceHiding && (!winAnimator.isAnimating()
                            || (winAnimator.mAttrFlags & FLAG_SHOW_WHEN_LOCKED) == 0)) {
                    if (((forceHiding == KEYGUARD_ANIMATING_IN)
                                && (!winAnimator.isAnimating() || hideWhenLocked))
                            || ((forceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
                        changed = win.hideLw(false, false);
                        if (WindowManagerService.DEBUG_VISIBILITY && changed) Slog.v(TAG,
                                "Now policy hidden: " + win);