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

Commit 1f52437d authored by Craig Mautner's avatar Craig Mautner
Browse files

Show the keyguard if unsecure window on top

When traversing windows save the fact that windows above the topmost
fullscreen window do not hide the lockscreen. If there is such a
window don't show it.

(cherry picked from commit ab55e524)

Fixes bug 13225149.

Change-Id: Ib6f33cbcfb2f60d8957a9184729ecdec80c6a236
parent 5677513b
Loading
Loading
Loading
Loading
+33 −24
Original line number Diff line number Diff line
@@ -408,6 +408,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final Rect mTmpNavigationFrame = new Rect();
    
    WindowState mTopFullscreenOpaqueWindowState;
    boolean mHideWindowBehindKeyguard;
    boolean mTopIsFullscreen;
    boolean mForceStatusBar;
    boolean mForceStatusBarFromKeyguard;
@@ -2934,6 +2935,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    @Override
    public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) {
        mTopFullscreenOpaqueWindowState = null;
        mHideWindowBehindKeyguard = false;
        mForceStatusBar = false;
        mForceStatusBarFromKeyguard = false;
        
@@ -2962,7 +2964,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            if (attrs.type == TYPE_KEYGUARD) {
                mShowingLockscreen = true;
            }
            boolean applyWindow = attrs.type >= FIRST_APPLICATION_WINDOW
            boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW
                    && attrs.type <= LAST_APPLICATION_WINDOW;
            if (attrs.type == TYPE_DREAM) {
                // If the lockscreen was showing when the dream started then wait
@@ -2970,31 +2972,38 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                if (!mDreamingLockscreen
                        || (win.isVisibleLw() && win.hasDrawnLw())) {
                    mShowingDream = true;
                    applyWindow = true;
                    appWindow = true;
                }
            }
            if (applyWindow
                    && attrs.x == 0 && attrs.y == 0

            final boolean showWhenLocked = (attrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0;
            if (appWindow) {
                if (attrs.x == 0 && attrs.y == 0
                        && attrs.width == WindowManager.LayoutParams.MATCH_PARENT
                        && attrs.height == WindowManager.LayoutParams.MATCH_PARENT) {
                if (DEBUG_LAYOUT) Log.v(TAG, "Fullscreen window: " + win);
                    if (DEBUG_LAYOUT) Slog.v(TAG, "Fullscreen window: " + win);
                    mTopFullscreenOpaqueWindowState = win;
                if ((attrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0) {
                    if (DEBUG_LAYOUT) Log.v(TAG, "Setting mHideLockScreen to true by win " + win);
                    if (!mHideWindowBehindKeyguard) {
                        if (showWhenLocked) {
                            if (DEBUG_LAYOUT) Slog.v(TAG, "Setting mHideLockScreen to true by win " + win);
                            mHideLockScreen = true;
                            mForceStatusBarFromKeyguard = false;
                        }
                        if ((attrs.flags & FLAG_DISMISS_KEYGUARD) != 0
                                && mDismissKeyguard == DISMISS_KEYGUARD_NONE) {
                    if (DEBUG_LAYOUT) Log.v(TAG, "Setting mDismissKeyguard to true by win " + win);
                            if (DEBUG_LAYOUT) Slog.v(TAG, "Setting mDismissKeyguard true by win " + win);
                            mDismissKeyguard = mWinDismissingKeyguard == win ?
                                    DISMISS_KEYGUARD_CONTINUE : DISMISS_KEYGUARD_START;
                            mWinDismissingKeyguard = win;
                            mForceStatusBarFromKeyguard = false;
                        }
                    }
                    if ((attrs.flags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
                        mAllowLockscreenWhenOn = true;
                    }
                } else if (!showWhenLocked) {
                    mHideWindowBehindKeyguard = true;
                }
            }
        }
    }
@@ -3072,7 +3081,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (mKeyguard != null) {
            if (localLOGV) Log.v(TAG, "finishPostLayoutPolicyLw: mHideKeyguard="
                    + mHideLockScreen);
            if (mDismissKeyguard != DISMISS_KEYGUARD_NONE && !mKeyguardMediator.isSecure()) {
            if (mDismissKeyguard != DISMISS_KEYGUARD_NONE && !isKeyguardSecure()) {
                if (mKeyguard.hideLw(true)) {
                    changes |= FINISH_LAYOUT_REDO_LAYOUT
                            | FINISH_LAYOUT_REDO_CONFIG