diff options
| author | 2022-05-04 02:56:26 +0000 | |
|---|---|---|
| committer | 2022-05-04 02:56:26 +0000 | |
| commit | a7f5aa5be73ed0325b82e3b3eddfa6d3dfee036c (patch) | |
| tree | 2f9370c90bc10d772786043e0b898f3965121fe1 | |
| parent | 857459ff56bafae85bf87570b7fd40fc20424abd (diff) | |
| parent | 4339880c1e742ae29a82118c2d38ac6ca9210ce3 (diff) | |
Merge "Fix invalid active window if accessibility framework doesn't track windows" into tm-dev
4 files changed, 23 insertions, 3 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index e30639cf416a..9920cc7e8444 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 42fad6d14fb9..f8bc26a7d91d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -433,6 +433,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. */ public abstract boolean isKeyguardLocked(); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 48168a08a543..7b77fd0683cd 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 ca9ab4fa84eb..4f4be6cd634d 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); |