summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Lin <ryanlwlin@google.com> 2022-05-04 04:35:58 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-05-04 04:35:58 +0000
commitb63ba12e920273224f4a4e1ea238c40ff41dc092 (patch)
tree934a3fa13e0cc10c4b0b9bbeed9cd0448a609545
parent7b5e81f2980174e2583a874c19daa611779c958b (diff)
parent5901d395d6d2a4fda3bf480cd3f23d9087f8aafd (diff)
Merge "Fix invalid active window if accessibility framework doesn't track windows" into tm-dev am: a7f5aa5be7 am: 5901d395d6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17755779 Change-Id: I3a47726a2f905ba7fa9a5ab7672b548a2097ed3c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-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 8ff1130cea52..777d74af3464 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7677,6 +7677,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);