From 117bc2de049e120288722bf4178a09bb205b39a3 Mon Sep 17 00:00:00 2001 From: Vishnu Nair Date: Fri, 8 Oct 2021 14:17:42 -0700 Subject: [PATCH] WM: Clean up InputTarget interface Cherry-pick of changes in I21a6f1a7353844d2b0f59f32e802ed1f0a3d66ff that didnt land in master. Bug: b/188792659 Test: presubmit Test: test talkback Change-Id: Ia799e6104ceba66f4b7fabb3e151536d9d168169 --- .../java/com/android/server/wm/AnrController.java | 14 +++++--------- .../server/wm/EmbeddedWindowController.java | 4 ++-- .../java/com/android/server/wm/InputTarget.java | 9 ++------- .../android/server/wm/WindowManagerService.java | 15 ++++++++------- .../java/com/android/server/wm/WindowState.java | 2 +- 5 files changed, 18 insertions(+), 26 deletions(-) diff --git a/services/core/java/com/android/server/wm/AnrController.java b/services/core/java/com/android/server/wm/AnrController.java index 91f650f77c6ef..38e1c99c46b60 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 @@ class AnrController { 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 dcd11482524dc..fc317a1212d5b 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 @@ class EmbeddedWindowController { } @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 fec7cc90bbf07..c7d328a2b18a2 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 @@ import android.view.IWindow; * 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 cf10e70e75bcb..438bfaf21d0f4 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5014,16 +5014,17 @@ public class WindowManagerService extends IWindowManager.Stub 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 a3d13787b31b3..9a43f6b5ac2e7 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 @@ class WindowState extends WindowContainer implements WindowManagerP } @Override - public WindowState asWindowState() { + public WindowState getWindowState() { return this; }