Merge "Prevent to revoke input focus from recentsAnimationInputConsumer" into tm-dev am: 7e6088fa86 am: cecb5479fb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18167461

Change-Id: Ia4d57b0d8bea042703c481b1c78c41801f00a312
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-05-11 21:50:09 +00:00
committed by Automerger Merge Worker
2 changed files with 16 additions and 1 deletions

View File

@@ -1921,6 +1921,7 @@ static void nativeRemoveCurrentInputFocus(JNIEnv* env, jclass clazz, jlong trans
FocusRequest request;
request.timestamp = systemTime(SYSTEM_TIME_MONOTONIC);
request.displayId = displayId;
request.windowName = "<null>";
transaction->setFocusedWindow(request);
}

View File

@@ -414,8 +414,22 @@ final class InputMonitor {
final IBinder focusToken = focus != null ? focus.mInputChannelToken : null;
if (focusToken == null) {
if (recentsAnimationInputConsumer != null
&& recentsAnimationInputConsumer.mWindowHandle != null
&& mInputFocus == recentsAnimationInputConsumer.mWindowHandle.token) {
// Avoid removing input focus from recentsAnimationInputConsumer.
// When the recents animation input consumer has the input focus,
// mInputFocus does not match to mDisplayContent.mCurrentFocus. Making it to be
// a special case, that do not remove the input focus from it when
// mDisplayContent.mCurrentFocus is null. This special case should be removed
// once recentAnimationInputConsumer is removed.
return;
}
// When an app is focused, but its window is not showing yet, remove the input focus
// from the current window.
// from the current window. This enforces the input focus to match
// mDisplayContent.mCurrentFocus. However, if more special cases are discovered that
// the input focus and mDisplayContent.mCurrentFocus are expected to mismatch,
// the whole logic of how and when to revoke focus needs to be checked.
if (mDisplayContent.mFocusedApp != null && mInputFocus != null) {
ProtoLog.v(WM_DEBUG_FOCUS_LIGHT, "App %s is focused,"
+ " but the window is not ready. Start a transaction to remove focus from"