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

Commit e292eb3d authored by Chong Zhang's avatar Chong Zhang
Browse files

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
parent 0a9ccf26
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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;
            }
+3 −3
Original line number Diff line number Diff line
@@ -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();