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 ab55e524b8
)
Fixes bug 13225149.
Change-Id: Ib6f33cbcfb2f60d8957a9184729ecdec80c6a236
This commit is contained in:
@ -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,30 +2972,37 @@ 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
|
||||
&& attrs.width == WindowManager.LayoutParams.MATCH_PARENT
|
||||
&& attrs.height == WindowManager.LayoutParams.MATCH_PARENT) {
|
||||
if (DEBUG_LAYOUT) Log.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);
|
||||
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);
|
||||
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;
|
||||
|
||||
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) Slog.v(TAG, "Fullscreen window: " + win);
|
||||
mTopFullscreenOpaqueWindowState = 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) 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
|
||||
|
Reference in New Issue
Block a user