Don't include removed window when counting interesting windows
Also do not give input focus to window that's already marked for removal. The input channel is already disposed and input manager will treat these as null focus. bug: 28797800 Change-Id: I3cb2d514a7286847f1ad6af3f629d04c303d3cbd
This commit is contained in:
@@ -2359,7 +2359,13 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
// immediately after the enter animation is done. If the app is not yet drawn then
|
||||
// it will show up as a flicker.
|
||||
win.mRemoveOnExit = true;
|
||||
win.mWindowRemovalAllowed = true;
|
||||
// Request a focus update as this window's input channel is already gone. Otherwise
|
||||
// we could have no focused window in input manager.
|
||||
final boolean focusChanged = updateFocusedWindowLocked(
|
||||
UPDATE_FOCUS_WILL_PLACE_SURFACES, false /*updateInputWindows*/);
|
||||
if (focusChanged) {
|
||||
mInputMonitor.updateInputWindowsLw(false /*force*/);
|
||||
}
|
||||
Binder.restoreCallingIdentity(origId);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1265,8 +1265,8 @@ final class WindowState implements WindowManagerPolicy.WindowState {
|
||||
* @return true if the window should be considered while evaluating allDrawn flags.
|
||||
*/
|
||||
boolean mightAffectAllDrawn(boolean visibleOnly) {
|
||||
final boolean isViewVisible = (mViewVisibility == View.VISIBLE)
|
||||
&& (mAppToken == null || !mAppToken.clientHidden);
|
||||
final boolean isViewVisible = (mAppToken == null || !mAppToken.clientHidden)
|
||||
&& (mViewVisibility == View.VISIBLE) && !mWindowRemovalAllowed;
|
||||
return (isOnScreenIgnoringKeyguard() && (!visibleOnly || isViewVisible)
|
||||
|| mWinAnimator.mAttrType == TYPE_BASE_APPLICATION)
|
||||
&& !mAnimatingExit && !mDestroying;
|
||||
@@ -1822,7 +1822,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
|
||||
/** @return true if this window desires key events. */
|
||||
boolean canReceiveKeys() {
|
||||
return isVisibleOrAdding()
|
||||
&& (mViewVisibility == View.VISIBLE)
|
||||
&& (mViewVisibility == View.VISIBLE) && !mRemoveOnExit
|
||||
&& ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0)
|
||||
&& (mAppToken == null || mAppToken.windowsAreFocusable())
|
||||
&& !isAdjustedForMinimizedDock();
|
||||
|
||||
Reference in New Issue
Block a user