From c26a04ce1abe2a04aeedd24c1f138c095bd5bbc7 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Thu, 3 Dec 2020 15:57:36 +0800 Subject: [PATCH] Only update native InputApplicationHandle once This makes sure the write operation (NativeInputApplicationHandle ::updateInfo) is always called from window manager side once when calling SurfaceControl.Transaction#setInputWindowInfo or InputManagerService#setFocusedApplication. If the info of input application handle is changed, a new instance will be created. That avoids the race condition of reading the fields of the same InputApplicationInfo instance from input dispatcher. This CL resolves the merge conflict. Bug: 171857140 Bug: 161334769 Bug: 174768985 Test: WindowInputTests Merged-In: Ief84bbe6e6fa4da5309912059904932ccf775b75 Merged-In: I70de9835c7699fe6f56fc3655b0fee5c317ecc3a Change-Id: I70de9835c7699fe6f56fc3655b0fee5c317ecc3a --- services/core/java/com/android/server/wm/InputMonitor.java | 1 - services/core/java/com/android/server/wm/WindowState.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 9bd652625f725..8aec9ed088804 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -43,7 +43,6 @@ import android.os.Trace; import android.os.UserHandle; import android.util.ArrayMap; import android.util.Slog; -import android.view.InputApplicationHandle; import android.view.InputChannel; import android.view.InputEventReceiver; import android.view.InputWindowHandle; diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 2329a6082f334..faa483a48ea4f 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -943,8 +943,8 @@ class WindowState extends WindowContainer implements WindowManagerP mLastRequestedHeight = 0; mLayer = 0; mInputWindowHandle = new InputWindowHandle( - mActivityRecord != null ? - mActivityRecord.getInputApplicationHandle(false /* update */) : null, + mActivityRecord != null + ? mActivityRecord.getInputApplicationHandle(false /* update */) : null, getDisplayId()); // Make sure we initial all fields before adding to parentWindow, to prevent exception