summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson Chung <winsonc@google.com> 2021-06-19 00:56:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-06-19 00:56:35 +0000
commita0a4985d3e93b71e156ea4fbbcf17d73f228a2ac (patch)
tree7b753b8cea25ff333013aacc107fd6d7ec7232a5
parentdbd8e89bff0645afe54c57ffe7ba0b17e9721a68 (diff)
parent5498ee18fe0a7697b2755aecaf23f39bf7fd0462 (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.java30
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;
}
}