diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index e30639cf416a1..9920cc7e8444b 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java @@ -1661,7 +1661,7 @@ public class AccessibilityWindowManager { if (traceWMEnabled()) { logTraceWM("getFocusedWindowToken", ""); } - final IBinder token = mWindowManagerInternal.getFocusedWindowToken(); + final IBinder token = mWindowManagerInternal.getFocusedWindowTokenFromWindowStates(); synchronized (mLock) { return findWindowIdLocked(userId, token); } diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java index 42fad6d14fb9c..f8bc26a7d91d3 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -432,6 +432,14 @@ public abstract class WindowManagerInternal { */ public abstract IBinder getFocusedWindowToken(); + /** + * Gets the token of the window that has input focus. It is from the focused + * {@link WindowState}. + * + * @return The token. + */ + public abstract IBinder getFocusedWindowTokenFromWindowStates(); + /** * @return Whether the keyguard is engaged. */ diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index eff75bc0622b8..4c4dfc5575154 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7681,6 +7681,18 @@ public class WindowManagerService extends IWindowManager.Stub } } + // TODO (b/229837707): Delete this method after changing the solution. + @Override + public IBinder getFocusedWindowTokenFromWindowStates() { + synchronized (mGlobalLock) { + final WindowState windowState = getFocusedWindowLocked(); + if (windowState != null) { + return windowState.mClient.asBinder(); + } + return null; + } + } + @Override public boolean isKeyguardLocked() { return WindowManagerService.this.isKeyguardLocked(); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java index ca9ab4fa84eb8..4f4be6cd634d2 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java @@ -543,7 +543,7 @@ public class AccessibilityWindowManagerTest { mWindowInfos.get(Display.DEFAULT_DISPLAY).get(DEFAULT_FOCUSED_INDEX + 1).token; final int eventWindowId = mA11yWindowManager.findWindowIdLocked( USER_SYSTEM_ID, eventWindowToken); - when(mMockWindowManagerInternal.getFocusedWindowToken()) + when(mMockWindowManagerInternal.getFocusedWindowTokenFromWindowStates()) .thenReturn(eventWindowToken); final int noUse = 0; @@ -679,7 +679,7 @@ public class AccessibilityWindowManagerTest { mWindowInfos.get(Display.DEFAULT_DISPLAY).get(DEFAULT_FOCUSED_INDEX).token; final int defaultFocusWindowId = mA11yWindowManager.findWindowIdLocked( USER_SYSTEM_ID, defaultFocusWinToken); - when(mMockWindowManagerInternal.getFocusedWindowToken()) + when(mMockWindowManagerInternal.getFocusedWindowTokenFromWindowStates()) .thenReturn(defaultFocusWinToken); final int newFocusWindowId = getWindowIdFromWindowInfosForDisplay(Display.DEFAULT_DISPLAY, DEFAULT_FOCUSED_INDEX + 1);