Loading core/java/android/view/WindowManagerPolicy.java +5 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,11 @@ public interface WindowManagerPolicy { */ boolean isDisplayedLw(); /** * Is this window considered to be gone for purposes of layout? */ boolean isGoneForLayoutLw(); /** * Returns true if this window has been shown on screen at some time in * the past. Must be called with the window manager lock held. Loading policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +3 −3 Original line number Diff line number Diff line Loading @@ -2336,7 +2336,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw=" + win.isVisibleOrBehindKeyguardLw()); if (mTopFullscreenOpaqueWindowState == null && win.isVisibleOrBehindKeyguardLw()) { win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) { if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) { mForceStatusBar = true; } Loading Loading @@ -2391,7 +2391,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // case though. if (topIsFullscreen) { if (mStatusBarCanHide) { if (DEBUG_LAYOUT) Log.v(TAG, "Hiding status bar"); if (DEBUG_LAYOUT) Log.v(TAG, "** HIDING status bar"); if (mStatusBar.hideLw(true)) { changes |= FINISH_LAYOUT_REDO_LAYOUT; Loading @@ -2407,7 +2407,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { Log.v(TAG, "Preventing status bar from hiding by policy"); } } else { if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar: top is not fullscreen"); if (DEBUG_LAYOUT) Log.v(TAG, "** SHOWING status bar: top is not fullscreen"); if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT; } } Loading services/java/com/android/server/wm/WindowManagerService.java +18 −14 Original line number Diff line number Diff line Loading @@ -7391,8 +7391,11 @@ public class WindowManagerService extends IWindowManager.Stub final int N = mWindows.size(); int i; if (DEBUG_LAYOUT) Slog.v(TAG, "performLayout: needed=" if (DEBUG_LAYOUT) { Slog.v(TAG, "-------------------------------------"); Slog.v(TAG, "performLayout: needed=" + mLayoutNeeded + " dw=" + dw + " dh=" + dh); } mPolicy.beginLayoutLw(dw, dh, mRotation); Loading @@ -7409,19 +7412,20 @@ public class WindowManagerService extends IWindowManager.Stub // Don't do layout of a window if it is not visible, or // soon won't be visible, to avoid wasting time and funky // changes while a window is animating away. final AppWindowToken atoken = win.mAppToken; final boolean gone = win.mViewVisibility == View.GONE || !win.mRelayoutCalled || (atoken == null && win.mRootToken.hidden) || (atoken != null && atoken.hiddenRequested) || win.mAttachedHidden || win.mExiting || win.mDestroying; final boolean gone = win.isGoneForLayoutLw(); if (DEBUG_LAYOUT && !win.mLayoutAttached) { Slog.v(TAG, "First pass " + win Slog.v(TAG, "1ST PASS " + win + ": gone=" + gone + " mHaveFrame=" + win.mHaveFrame + " mLayoutAttached=" + win.mLayoutAttached); if (gone) Slog.v(TAG, " (mViewVisibility=" final AppWindowToken atoken = win.mAppToken; if (gone) Slog.v(TAG, " GONE: mViewVisibility=" + win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled + " hidden=" + win.mRootToken.hidden + " hiddenRequested=" + (atoken != null && atoken.hiddenRequested) + " mAttachedHidden=" + win.mAttachedHidden); else Slog.v(TAG, " VIS: mViewVisibility=" + win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled + " hidden=" + win.mRootToken.hidden + " hiddenRequested=" Loading @@ -7443,7 +7447,7 @@ public class WindowManagerService extends IWindowManager.Stub win.prelayout(); mPolicy.layoutWindowLw(win, win.mAttrs, null); win.mLayoutSeq = seq; if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame=" if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + win.mFrame + " mContainingFrame=" + win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame); Loading @@ -7461,7 +7465,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState win = mWindows.get(i); if (win.mLayoutAttached) { if (DEBUG_LAYOUT) Slog.v(TAG, "Second pass " + win if (DEBUG_LAYOUT) Slog.v(TAG, "2ND PASS " + win + " mHaveFrame=" + win.mHaveFrame + " mViewVisibility=" + win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled); Loading @@ -7479,7 +7483,7 @@ public class WindowManagerService extends IWindowManager.Stub win.prelayout(); mPolicy.layoutWindowLw(win, win.mAttrs, win.mAttachedWindow); win.mLayoutSeq = seq; if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame=" if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + win.mFrame + " mContainingFrame=" + win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame); Loading services/java/com/android/server/wm/WindowState.java +10 −0 Original line number Diff line number Diff line Loading @@ -1444,6 +1444,16 @@ final class WindowState implements WindowManagerPolicy.WindowState { || mAnimating); } public boolean isGoneForLayoutLw() { final AppWindowToken atoken = mAppToken; return mViewVisibility == View.GONE || !mRelayoutCalled || (atoken == null && mRootToken.hidden) || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) || mAttachedHidden || mExiting || mDestroying; } /** * Returns true if the window has a surface that it has drawn a * complete UI in to. Loading Loading
core/java/android/view/WindowManagerPolicy.java +5 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,11 @@ public interface WindowManagerPolicy { */ boolean isDisplayedLw(); /** * Is this window considered to be gone for purposes of layout? */ boolean isGoneForLayoutLw(); /** * Returns true if this window has been shown on screen at some time in * the past. Must be called with the window manager lock held. Loading
policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +3 −3 Original line number Diff line number Diff line Loading @@ -2336,7 +2336,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw=" + win.isVisibleOrBehindKeyguardLw()); if (mTopFullscreenOpaqueWindowState == null && win.isVisibleOrBehindKeyguardLw()) { win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) { if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) { mForceStatusBar = true; } Loading Loading @@ -2391,7 +2391,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // case though. if (topIsFullscreen) { if (mStatusBarCanHide) { if (DEBUG_LAYOUT) Log.v(TAG, "Hiding status bar"); if (DEBUG_LAYOUT) Log.v(TAG, "** HIDING status bar"); if (mStatusBar.hideLw(true)) { changes |= FINISH_LAYOUT_REDO_LAYOUT; Loading @@ -2407,7 +2407,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { Log.v(TAG, "Preventing status bar from hiding by policy"); } } else { if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar: top is not fullscreen"); if (DEBUG_LAYOUT) Log.v(TAG, "** SHOWING status bar: top is not fullscreen"); if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT; } } Loading
services/java/com/android/server/wm/WindowManagerService.java +18 −14 Original line number Diff line number Diff line Loading @@ -7391,8 +7391,11 @@ public class WindowManagerService extends IWindowManager.Stub final int N = mWindows.size(); int i; if (DEBUG_LAYOUT) Slog.v(TAG, "performLayout: needed=" if (DEBUG_LAYOUT) { Slog.v(TAG, "-------------------------------------"); Slog.v(TAG, "performLayout: needed=" + mLayoutNeeded + " dw=" + dw + " dh=" + dh); } mPolicy.beginLayoutLw(dw, dh, mRotation); Loading @@ -7409,19 +7412,20 @@ public class WindowManagerService extends IWindowManager.Stub // Don't do layout of a window if it is not visible, or // soon won't be visible, to avoid wasting time and funky // changes while a window is animating away. final AppWindowToken atoken = win.mAppToken; final boolean gone = win.mViewVisibility == View.GONE || !win.mRelayoutCalled || (atoken == null && win.mRootToken.hidden) || (atoken != null && atoken.hiddenRequested) || win.mAttachedHidden || win.mExiting || win.mDestroying; final boolean gone = win.isGoneForLayoutLw(); if (DEBUG_LAYOUT && !win.mLayoutAttached) { Slog.v(TAG, "First pass " + win Slog.v(TAG, "1ST PASS " + win + ": gone=" + gone + " mHaveFrame=" + win.mHaveFrame + " mLayoutAttached=" + win.mLayoutAttached); if (gone) Slog.v(TAG, " (mViewVisibility=" final AppWindowToken atoken = win.mAppToken; if (gone) Slog.v(TAG, " GONE: mViewVisibility=" + win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled + " hidden=" + win.mRootToken.hidden + " hiddenRequested=" + (atoken != null && atoken.hiddenRequested) + " mAttachedHidden=" + win.mAttachedHidden); else Slog.v(TAG, " VIS: mViewVisibility=" + win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled + " hidden=" + win.mRootToken.hidden + " hiddenRequested=" Loading @@ -7443,7 +7447,7 @@ public class WindowManagerService extends IWindowManager.Stub win.prelayout(); mPolicy.layoutWindowLw(win, win.mAttrs, null); win.mLayoutSeq = seq; if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame=" if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + win.mFrame + " mContainingFrame=" + win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame); Loading @@ -7461,7 +7465,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState win = mWindows.get(i); if (win.mLayoutAttached) { if (DEBUG_LAYOUT) Slog.v(TAG, "Second pass " + win if (DEBUG_LAYOUT) Slog.v(TAG, "2ND PASS " + win + " mHaveFrame=" + win.mHaveFrame + " mViewVisibility=" + win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled); Loading @@ -7479,7 +7483,7 @@ public class WindowManagerService extends IWindowManager.Stub win.prelayout(); mPolicy.layoutWindowLw(win, win.mAttrs, win.mAttachedWindow); win.mLayoutSeq = seq; if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame=" if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + win.mFrame + " mContainingFrame=" + win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame); Loading
services/java/com/android/server/wm/WindowState.java +10 −0 Original line number Diff line number Diff line Loading @@ -1444,6 +1444,16 @@ final class WindowState implements WindowManagerPolicy.WindowState { || mAnimating); } public boolean isGoneForLayoutLw() { final AppWindowToken atoken = mAppToken; return mViewVisibility == View.GONE || !mRelayoutCalled || (atoken == null && mRootToken.hidden) || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) || mAttachedHidden || mExiting || mDestroying; } /** * Returns true if the window has a surface that it has drawn a * complete UI in to. Loading