Merge "Get rid of Keyguard visibility modifiers on WindowState"
This commit is contained in:
committed by
Android (Google) Code Review
commit
c2a2b94393
@@ -338,13 +338,6 @@ public interface WindowManagerPolicy {
|
||||
*/
|
||||
boolean isVisibleLw();
|
||||
|
||||
/**
|
||||
* Like {@link #isVisibleLw}, but also counts a window that is currently
|
||||
* "hidden" behind the keyguard as visible. This allows us to apply
|
||||
* things like window flags that impact the keyguard.
|
||||
*/
|
||||
boolean isVisibleOrBehindKeyguardLw();
|
||||
|
||||
/**
|
||||
* Is this window currently visible to the user on-screen? It is
|
||||
* displayed either if it is visible or it is currently running an
|
||||
|
||||
@@ -5089,12 +5089,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
|
||||
// Dock windows carve out the bottom of the screen, so normal windows
|
||||
// can't appear underneath them.
|
||||
if (attrs.type == TYPE_INPUT_METHOD && win.isVisibleOrBehindKeyguardLw()
|
||||
&& win.isDisplayedLw() && !win.getGivenInsetsPendingLw()) {
|
||||
if (attrs.type == TYPE_INPUT_METHOD && win.isVisibleLw()
|
||||
&& !win.getGivenInsetsPendingLw()) {
|
||||
setLastInputMethodWindowLw(null, null);
|
||||
offsetInputMethodWindowLw(win);
|
||||
}
|
||||
if (attrs.type == TYPE_VOICE_INTERACTION && win.isVisibleOrBehindKeyguardLw()
|
||||
if (attrs.type == TYPE_VOICE_INTERACTION && win.isVisibleLw()
|
||||
&& !win.getGivenInsetsPendingLw()) {
|
||||
offsetVoiceInputWindowLw(win);
|
||||
}
|
||||
@@ -5168,12 +5168,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
@Override
|
||||
public void applyPostLayoutPolicyLw(WindowState win, WindowManager.LayoutParams attrs,
|
||||
WindowState attached, WindowState imeTarget) {
|
||||
if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw="
|
||||
+ win.isVisibleOrBehindKeyguardLw());
|
||||
final boolean visible = win.isVisibleLw();
|
||||
if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisible=" + visible);
|
||||
applyKeyguardPolicyLw(win, imeTarget);
|
||||
final int fl = PolicyControl.getWindowFlags(win, attrs);
|
||||
if (mTopFullscreenOpaqueWindowState == null
|
||||
&& win.isVisibleLw() && attrs.type == TYPE_INPUT_METHOD) {
|
||||
if (mTopFullscreenOpaqueWindowState == null && visible && attrs.type == TYPE_INPUT_METHOD) {
|
||||
mForcingShowNavBar = true;
|
||||
mForcingShowNavBarLayer = win.getSurfaceLayer();
|
||||
}
|
||||
@@ -5189,8 +5188,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW
|
||||
&& attrs.type < FIRST_SYSTEM_WINDOW;
|
||||
final int stackId = win.getStackId();
|
||||
if (mTopFullscreenOpaqueWindowState == null &&
|
||||
win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) {
|
||||
if (mTopFullscreenOpaqueWindowState == null && visible) {
|
||||
if ((fl & FLAG_FORCE_NOT_FULLSCREEN) != 0) {
|
||||
mForceStatusBar = true;
|
||||
}
|
||||
@@ -5221,10 +5219,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
final boolean reallyVisible = win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw();
|
||||
|
||||
// Voice interaction overrides both top fullscreen and top docked.
|
||||
if (reallyVisible && win.getAttrs().type == TYPE_VOICE_INTERACTION) {
|
||||
if (visible && win.getAttrs().type == TYPE_VOICE_INTERACTION) {
|
||||
if (mTopFullscreenOpaqueWindowState == null) {
|
||||
mTopFullscreenOpaqueWindowState = win;
|
||||
if (mTopFullscreenOpaqueOrDimmingWindowState == null) {
|
||||
@@ -5240,7 +5236,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
|
||||
// Keep track of the window if it's dimming but not necessarily fullscreen.
|
||||
if (mTopFullscreenOpaqueOrDimmingWindowState == null && reallyVisible
|
||||
if (mTopFullscreenOpaqueOrDimmingWindowState == null && visible
|
||||
&& win.isDimming() && StackId.normallyFullscreenWindows(stackId)) {
|
||||
mTopFullscreenOpaqueOrDimmingWindowState = win;
|
||||
}
|
||||
@@ -5248,7 +5244,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
// We need to keep track of the top "fullscreen" opaque window for the docked stack
|
||||
// separately, because both the "real fullscreen" opaque window and the one for the docked
|
||||
// stack can control View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.
|
||||
if (mTopDockedOpaqueWindowState == null && reallyVisible && appWindow && attached == null
|
||||
if (mTopDockedOpaqueWindowState == null && visible && appWindow && attached == null
|
||||
&& isFullscreen(attrs) && stackId == DOCKED_STACK_ID) {
|
||||
mTopDockedOpaqueWindowState = win;
|
||||
if (mTopDockedOpaqueOrDimmingWindowState == null) {
|
||||
@@ -5258,7 +5254,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
|
||||
// Also keep track of any windows that are dimming but not necessarily fullscreen in the
|
||||
// docked stack.
|
||||
if (mTopDockedOpaqueOrDimmingWindowState == null && reallyVisible && win.isDimming()
|
||||
if (mTopDockedOpaqueOrDimmingWindowState == null && visible && win.isDimming()
|
||||
&& stackId == DOCKED_STACK_ID) {
|
||||
mTopDockedOpaqueOrDimmingWindowState = win;
|
||||
}
|
||||
|
||||
@@ -1352,25 +1352,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
return isVisible();
|
||||
}
|
||||
|
||||
/**
|
||||
* Like {@link #isVisibleLw}, but also counts a window that is currently "hidden" behind the
|
||||
* keyguard as visible. This allows us to apply things like window flags that impact the
|
||||
* keyguard. XXX I am starting to think we need to have ANOTHER visibility flag for this
|
||||
* "hidden behind keyguard" state rather than overloading mPolicyVisibility. Ungh.
|
||||
*/
|
||||
@Override
|
||||
public boolean isVisibleOrBehindKeyguardLw() {
|
||||
if (mToken.waitingToShow && mService.mAppTransition.isTransitionSet()) {
|
||||
return false;
|
||||
}
|
||||
final AppWindowToken atoken = mAppToken;
|
||||
final boolean animating = atoken != null && atoken.mAppAnimator.animation != null;
|
||||
return mHasSurface && !mDestroying && !mAnimatingExit
|
||||
&& (atoken == null ? mPolicyVisibility : !atoken.hiddenRequested)
|
||||
&& ((!isParentWindowHidden() && mViewVisibility == View.VISIBLE && !mToken.hidden)
|
||||
|| mWinAnimator.mAnimation != null || animating);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this window visible, ignoring its app token? It is not visible if there is no surface,
|
||||
* or we are in the process of running an exit animation that will remove the surface.
|
||||
@@ -1418,14 +1399,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
* being visible.
|
||||
*/
|
||||
boolean isOnScreen() {
|
||||
return mPolicyVisibility && isOnScreenIgnoringKeyguard();
|
||||
}
|
||||
|
||||
/**
|
||||
* Like isOnScreen(), but ignores any force hiding of the window due
|
||||
* to the keyguard.
|
||||
*/
|
||||
private boolean isOnScreenIgnoringKeyguard() {
|
||||
if (!mHasSurface || mDestroying) {
|
||||
return false;
|
||||
}
|
||||
@@ -1449,7 +1422,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
boolean mightAffectAllDrawn(boolean visibleOnly) {
|
||||
final boolean isViewVisible = (mAppToken == null || !mAppToken.clientHidden)
|
||||
&& (mViewVisibility == View.VISIBLE) && !mWindowRemovalAllowed;
|
||||
return (isOnScreenIgnoringKeyguard() && (!visibleOnly || isViewVisible)
|
||||
return (isOnScreen() && (!visibleOnly || isViewVisible)
|
||||
|| mWinAnimator.mAttrType == TYPE_BASE_APPLICATION
|
||||
|| mWinAnimator.mAttrType == TYPE_DRAWN_APPLICATION)
|
||||
&& !mAnimatingExit && !mDestroying;
|
||||
@@ -1478,28 +1451,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
|| ((mAppToken != null) && (mAppToken.mAppAnimator.animation != null)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Like isReadyForDisplay(), but ignores any force hiding of the window due
|
||||
* to the keyguard.
|
||||
*/
|
||||
boolean isReadyForDisplayIgnoringKeyguard() {
|
||||
if (mToken.waitingToShow && mService.mAppTransition.isTransitionSet()) {
|
||||
return false;
|
||||
}
|
||||
final AppWindowToken atoken = mAppToken;
|
||||
if (atoken == null && !mPolicyVisibility) {
|
||||
// If this is not an app window, and the policy has asked to force
|
||||
// hide, then we really do want to hide.
|
||||
return false;
|
||||
}
|
||||
return mHasSurface && !mDestroying
|
||||
&& ((!isParentWindowHidden() && mViewVisibility == View.VISIBLE && !mToken.hidden)
|
||||
|| mWinAnimator.mAnimation != null
|
||||
|| ((atoken != null) && (atoken.mAppAnimator.animation != null)
|
||||
&& !mWinAnimator.isDummyAnimation())
|
||||
|| isAnimatingWithSavedSurface());
|
||||
}
|
||||
|
||||
/**
|
||||
* Like isOnScreen, but returns false if the surface hasn't yet
|
||||
* been drawn.
|
||||
@@ -3771,7 +3722,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
|
||||
logPerformShow("performShow on ");
|
||||
|
||||
if (mWinAnimator.mDrawState != READY_TO_SHOW || !isReadyForDisplayIgnoringKeyguard()) {
|
||||
if (mWinAnimator.mDrawState != READY_TO_SHOW || !isReadyForDisplay()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3821,7 +3772,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
|| (DEBUG_STARTING_WINDOW && mAttrs.type == TYPE_APPLICATION_STARTING)) {
|
||||
Slog.v(TAG, prefix + this
|
||||
+ ": mDrawState=" + mWinAnimator.drawStateToString()
|
||||
+ " readyForDisplay=" + isReadyForDisplayIgnoringKeyguard()
|
||||
+ " readyForDisplay=" + isReadyForDisplay()
|
||||
+ " starting=" + (mAttrs.type == TYPE_APPLICATION_STARTING)
|
||||
+ " during animation: policyVis=" + mPolicyVisibility
|
||||
+ " parentHidden=" + isParentWindowHidden()
|
||||
|
||||
Reference in New Issue
Block a user