Merge "WM: Clean up InputTarget interface"
diff --git a/services/core/java/com/android/server/wm/AnrController.java b/services/core/java/com/android/server/wm/AnrController.java
index 91f650f..38e1c99 100644
--- a/services/core/java/com/android/server/wm/AnrController.java
+++ b/services/core/java/com/android/server/wm/AnrController.java
@@ -87,16 +87,12 @@
return;
}
- WindowState windowState = target.asWindowState();
+ WindowState windowState = target.getWindowState();
pid = target.getPid();
- if (windowState != null) {
- activity = windowState.mActivityRecord;
- } else {
- // Don't blame the host process, instead blame the embedded pid.
- activity = null;
- // Use host WindowState for logging and z-order test.
- windowState = target.asEmbeddedWindow().mHostWindowState;
- }
+ // Blame the activity if the input token belongs to the window. If the target is
+ // embedded, then we will blame the pid instead.
+ activity = (windowState.mInputChannelToken == inputToken)
+ ? windowState.mActivityRecord : null;
Slog.i(TAG_WM, "ANR in " + target + ". Reason:" + reason);
aboveSystem = isWindowAboveSystem(windowState);
dumpAnrStateLocked(activity, windowState, reason);
diff --git a/services/core/java/com/android/server/wm/EmbeddedWindowController.java b/services/core/java/com/android/server/wm/EmbeddedWindowController.java
index dcd1148..fc317a1 100644
--- a/services/core/java/com/android/server/wm/EmbeddedWindowController.java
+++ b/services/core/java/com/android/server/wm/EmbeddedWindowController.java
@@ -198,8 +198,8 @@
}
@Override
- public EmbeddedWindow asEmbeddedWindow() {
- return this;
+ public WindowState getWindowState() {
+ return mHostWindowState;
}
@Override
diff --git a/services/core/java/com/android/server/wm/InputTarget.java b/services/core/java/com/android/server/wm/InputTarget.java
index fec7cc9..c7d328a 100644
--- a/services/core/java/com/android/server/wm/InputTarget.java
+++ b/services/core/java/com/android/server/wm/InputTarget.java
@@ -25,13 +25,8 @@
* of both targets.
*/
interface InputTarget {
- default WindowState asWindowState() {
- return null;
- }
-
- default EmbeddedWindowController.EmbeddedWindow asEmbeddedWindow() {
- return null;
- }
+ /* Get the WindowState associated with the target. */
+ WindowState getWindowState();
/* Display id of the target. */
int getDisplayId();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 27182fe..f11fa16 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -5018,16 +5018,17 @@
ProtoLog.i(WM_DEBUG_FOCUS_LIGHT, "Focus changing: %s -> %s", lastTarget, newTarget);
}
- if (newTarget != null && newTarget.asWindowState() != null) {
- WindowState newFocus = newTarget.asWindowState();
- mAnrController.onFocusChanged(newFocus);
- newFocus.reportFocusChangedSerialized(true);
+ // Call WindowState focus change observers
+ WindowState newFocusedWindow = newTarget != null ? newTarget.getWindowState() : null;
+ if (newFocusedWindow != null && newFocusedWindow.mInputChannelToken == newToken) {
+ mAnrController.onFocusChanged(newFocusedWindow);
+ newFocusedWindow.reportFocusChangedSerialized(true);
notifyFocusChanged();
}
- if (lastTarget != null && lastTarget.asWindowState() != null) {
- WindowState lastFocus = lastTarget.asWindowState();
- lastFocus.reportFocusChangedSerialized(false);
+ WindowState lastFocusedWindow = lastTarget != null ? lastTarget.getWindowState() : null;
+ if (lastFocusedWindow != null && lastFocusedWindow.mInputChannelToken == oldToken) {
+ lastFocusedWindow.reportFocusChangedSerialized(false);
}
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index a3d1378..9a43f6b 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1727,7 +1727,7 @@
}
@Override
- public WindowState asWindowState() {
+ public WindowState getWindowState() {
return this;
}