diff options
| author | 2021-06-19 00:56:35 +0000 | |
|---|---|---|
| committer | 2021-06-19 00:56:35 +0000 | |
| commit | a0a4985d3e93b71e156ea4fbbcf17d73f228a2ac (patch) | |
| tree | 7b753b8cea25ff333013aacc107fd6d7ec7232a5 | |
| parent | dbd8e89bff0645afe54c57ffe7ba0b17e9721a68 (diff) | |
| parent | 5498ee18fe0a7697b2755aecaf23f39bf7fd0462 (diff) | |
Merge "Account for the focused window before requesting input consumer focus" into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/InputMonitor.java | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 6f2f69810f3f..8c781a13f7db 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -394,10 +394,23 @@ final class InputMonitor { /** * Called when the current input focus changes. */ - private void updateInputFocusRequest() { + private void updateInputFocusRequest(InputConsumerImpl recentsAnimationInputConsumer) { final WindowState focus = mDisplayContent.mCurrentFocus; - final IBinder focusToken = focus != null ? focus.mInputChannelToken : null; + // Request focus for the recents animation input consumer if an input consumer should + // be applied for the window. + if (recentsAnimationInputConsumer != null && focus != null) { + final RecentsAnimationController recentsAnimationController = + mService.getRecentsAnimationController(); + final boolean shouldApplyRecentsInputConsumer = recentsAnimationController != null + && recentsAnimationController.shouldApplyInputConsumer(focus.mActivityRecord); + if (shouldApplyRecentsInputConsumer) { + requestFocus(recentsAnimationInputConsumer.mWindowHandle.token, + recentsAnimationInputConsumer.mName); + return; + } + } + final IBinder focusToken = focus != null ? focus.mInputChannelToken : null; if (focusToken == null) { mInputFocus = null; return; @@ -474,8 +487,6 @@ final class InputMonitor { boolean mInDrag; - private boolean mRecentsAnimationFocusOverride; - private void updateInputWindows(boolean inDrag) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateInputWindows"); @@ -491,16 +502,8 @@ final class InputMonitor { mInDrag = inDrag; resetInputConsumers(mInputTransaction); - mRecentsAnimationFocusOverride = false; mDisplayContent.forAllWindows(this, true /* traverseTopToBottom */); - - if (mRecentsAnimationFocusOverride) { - requestFocus(mRecentsAnimationInputConsumer.mWindowHandle.token, - mRecentsAnimationInputConsumer.mName); - } else { - updateInputFocusRequest(); - } - + updateInputFocusRequest(mRecentsAnimationInputConsumer); if (!mUpdateInputWindowsImmediately) { mDisplayContent.getPendingTransaction().merge(mInputTransaction); @@ -538,7 +541,6 @@ final class InputMonitor { mRecentsAnimationInputConsumer.mWindowHandle)) { mRecentsAnimationInputConsumer.show(mInputTransaction, w.mActivityRecord); mAddRecentsAnimationInputConsumerHandle = false; - mRecentsAnimationFocusOverride = true; } } |