summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Lin <ryanlwlin@google.com> 2022-05-04 02:56:26 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-05-04 02:56:26 +0000
commita7f5aa5be73ed0325b82e3b3eddfa6d3dfee036c (patch)
tree2f9370c90bc10d772786043e0b898f3965121fe1
parent857459ff56bafae85bf87570b7fd40fc20424abd (diff)
parent4339880c1e742ae29a82118c2d38ac6ca9210ce3 (diff)
Merge "Fix invalid active window if accessibility framework doesn't track windows" into tm-dev
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerInternal.java8
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java4
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);