summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorRiddle Hsu <riddlehsu@google.com>2020-12-03 15:57:36 +0800
committerRiddle Hsu <riddlehsu@google.com>2020-12-03 11:57:42 +0000
commit5e4b0755547067a26b30dab8f4dfaa8b05fad5ce (patch)
tree3e7c2be4080edb9a62ba2fb85339d069a67536d3 /core/java
parent5884555cd218ed53dd797ef4183f357aabad4214 (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.java10
-rw-r--r--core/java/android/view/InputWindowHandle.java2
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.