diff options
4 files changed, 12 insertions, 31 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c12f7f33b069..d413dcd3442b 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -5440,13 +5440,18 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final Region local = Region.obtain(); final int[] remainingLeftRight = {mSystemGestureExclusionLimit, mSystemGestureExclusionLimit}; + final RecentsAnimationController recentsAnimationController = + mWmService.getRecentsAnimationController(); // Traverse all windows top down to assemble the gesture exclusion rects. // For each window, we only take the rects that fall within its touchable region. forAllWindows(w -> { + final boolean ignoreRecentsAnimationTarget = recentsAnimationController != null + && recentsAnimationController.shouldApplyInputConsumer(w.getActivityRecord()); if (!w.canReceiveTouchInput() || !w.isVisible() || (w.getAttrs().flags & FLAG_NOT_TOUCHABLE) != 0 - || unhandled.isEmpty()) { + || unhandled.isEmpty() + || ignoreRecentsAnimationTarget) { return; } diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index ea72e12783c3..27a4fc10da5b 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -545,12 +545,7 @@ final class InputMonitor { @Override public void accept(WindowState w) { final InputWindowHandleWrapper inputWindowHandle = w.mInputWindowHandle; - final RecentsAnimationController recentsAnimationController = - mService.getRecentsAnimationController(); - final boolean shouldApplyRecentsInputConsumer = recentsAnimationController != null - && recentsAnimationController.shouldApplyInputConsumer(w.mActivityRecord); - if (w.mInputChannelToken == null || w.mRemoved - || (!w.canReceiveTouchInput() && !shouldApplyRecentsInputConsumer)) { + if (w.mInputChannelToken == null || w.mRemoved || !w.canReceiveTouchInput()) { if (w.mWinAnimator.hasSurface()) { // Make sure the input info can't receive input event. It may be omitted from // occlusion detection depending on the type or if it's a trusted overlay. @@ -566,6 +561,10 @@ final class InputMonitor { final int privateFlags = w.mAttrs.privateFlags; // This only works for legacy transitions. + final RecentsAnimationController recentsAnimationController = + mService.getRecentsAnimationController(); + final boolean shouldApplyRecentsInputConsumer = recentsAnimationController != null + && recentsAnimationController.shouldApplyInputConsumer(w.mActivityRecord); if (mAddRecentsAnimationInputConsumerHandle && shouldApplyRecentsInputConsumer) { if (recentsAnimationController.updateInputConsumerForApp( mRecentsAnimationInputConsumer.mWindowHandle)) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 3b282aada7ae..1abe24e926fe 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -3220,19 +3220,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } return !mActivityRecord.getTask().getRootTask().shouldIgnoreInput() - && mActivityRecord.mVisibleRequested - && !isRecentsAnimationConsumingAppInput(); - } - - /** - * Returns {@code true} if the window is animating to home as part of the recents animation and - * it is consuming input from the app. - */ - private boolean isRecentsAnimationConsumingAppInput() { - final RecentsAnimationController recentsAnimationController = - mWmService.getRecentsAnimationController(); - return recentsAnimationController != null - && recentsAnimationController.shouldApplyInputConsumer(mActivityRecord); + && mActivityRecord.mVisibleRequested; } /** diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java index b6998d84afa3..724204f79eab 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java @@ -731,17 +731,6 @@ public class WindowStateTests extends WindowTestsBase { } @Test - public void testCantReceiveTouchDuringRecentsAnimation() { - final WindowState win0 = createWindow(null, TYPE_APPLICATION, "win0"); - - // Mock active recents animation - RecentsAnimationController recentsController = mock(RecentsAnimationController.class); - when(recentsController.shouldApplyInputConsumer(win0.mActivityRecord)).thenReturn(true); - mWm.setRecentsAnimationController(recentsController); - assertFalse(win0.canReceiveTouchInput()); - } - - @Test public void testCantReceiveTouchWhenAppTokenHiddenRequested() { final WindowState win0 = createWindow(null, TYPE_APPLICATION, "win0"); win0.mActivityRecord.mVisibleRequested = false; |