Account for the focused window before requesting input consumer focus

- The original patch for ag/13732971 was right -- we need to only apply
  this if the calculated focused window is being animated by the recents
  animation, not only if there is a recents animation input consumer
  applied

Fixes: 191058092
Bug: 177923822
Test: With live tile enabled, open app in overview and try to reply
      in a HUN
Change-Id: Ib13ada79971ea09dba27c6e0acc2e50017a92951
This commit is contained in:
Winson Chung
2021-06-17 10:45:18 -07:00
parent 5d552869af
commit 5498ee18fe

View File

@@ -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;
}
}