diff options
| author | Riddle Hsu <riddlehsu@google.com> | 2020-12-03 15:57:36 +0800 |
|---|---|---|
| committer | Riddle Hsu <riddlehsu@google.com> | 2020-12-03 11:57:42 +0000 |
| commit | 5e4b0755547067a26b30dab8f4dfaa8b05fad5ce (patch) | |
| tree | 3e7c2be4080edb9a62ba2fb85339d069a67536d3 /core/java | |
| parent | 5884555cd218ed53dd797ef4183f357aabad4214 (diff) | |
RESTRICT AUTOMERGE 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.
Bug: 171857140
Bug: 161334769
Test: WindowInputTests
Change-Id: I70de9835c7699fe6f56fc3655b0fee5c317ecc3a
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/InputApplicationHandle.java | 10 | ||||
| -rw-r--r-- | core/java/android/view/InputWindowHandle.java | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/core/java/android/view/InputApplicationHandle.java b/core/java/android/view/InputApplicationHandle.java index 3d05e2a0b9f6..9b96f7fd1c5c 100644 --- a/core/java/android/view/InputApplicationHandle.java +++ b/core/java/android/view/InputApplicationHandle.java @@ -16,6 +16,7 @@ package android.view; +import android.annotation.NonNull; import android.os.IBinder; /** @@ -31,17 +32,20 @@ public final class InputApplicationHandle { private long ptr; // Application name. - public String name; + public final @NonNull String name; // Dispatching timeout. - public long dispatchingTimeoutNanos; + public final long dispatchingTimeoutNanos; public final IBinder token; private native void nativeDispose(); - public InputApplicationHandle(IBinder token) { + public InputApplicationHandle(@NonNull IBinder token, @NonNull String name, + long dispatchingTimeoutNanos) { this.token = token; + this.name = name; + this.dispatchingTimeoutNanos = dispatchingTimeoutNanos; } public InputApplicationHandle(InputApplicationHandle handle) { diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java index 5f74b2a510ca..71d26b8880f7 100644 --- a/core/java/android/view/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -36,7 +36,7 @@ public final class InputWindowHandle { private long ptr; // The input application handle. - public final InputApplicationHandle inputApplicationHandle; + public InputApplicationHandle inputApplicationHandle; // The token associates input data with a window and its input channel. The client input // channel and the server input channel will both contain this token. |
