Merge "Fix invalid active window if accessibility framework doesn't track windows" into tm-dev

This commit is contained in:
Ryan Lin
2022-05-04 02:56:26 +00:00
committed by Android (Google) Code Review
4 changed files with 23 additions and 3 deletions

View File

@@ -1661,7 +1661,7 @@ public class AccessibilityWindowManager {
if (traceWMEnabled()) { if (traceWMEnabled()) {
logTraceWM("getFocusedWindowToken", ""); logTraceWM("getFocusedWindowToken", "");
} }
final IBinder token = mWindowManagerInternal.getFocusedWindowToken(); final IBinder token = mWindowManagerInternal.getFocusedWindowTokenFromWindowStates();
synchronized (mLock) { synchronized (mLock) {
return findWindowIdLocked(userId, token); return findWindowIdLocked(userId, token);
} }

View File

@@ -432,6 +432,14 @@ public abstract class WindowManagerInternal {
*/ */
public abstract IBinder getFocusedWindowToken(); 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. * @return Whether the keyguard is engaged.
*/ */

View File

@@ -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 @Override
public boolean isKeyguardLocked() { public boolean isKeyguardLocked() {
return WindowManagerService.this.isKeyguardLocked(); return WindowManagerService.this.isKeyguardLocked();

View File

@@ -543,7 +543,7 @@ public class AccessibilityWindowManagerTest {
mWindowInfos.get(Display.DEFAULT_DISPLAY).get(DEFAULT_FOCUSED_INDEX + 1).token; mWindowInfos.get(Display.DEFAULT_DISPLAY).get(DEFAULT_FOCUSED_INDEX + 1).token;
final int eventWindowId = mA11yWindowManager.findWindowIdLocked( final int eventWindowId = mA11yWindowManager.findWindowIdLocked(
USER_SYSTEM_ID, eventWindowToken); USER_SYSTEM_ID, eventWindowToken);
when(mMockWindowManagerInternal.getFocusedWindowToken()) when(mMockWindowManagerInternal.getFocusedWindowTokenFromWindowStates())
.thenReturn(eventWindowToken); .thenReturn(eventWindowToken);
final int noUse = 0; final int noUse = 0;
@@ -679,7 +679,7 @@ public class AccessibilityWindowManagerTest {
mWindowInfos.get(Display.DEFAULT_DISPLAY).get(DEFAULT_FOCUSED_INDEX).token; mWindowInfos.get(Display.DEFAULT_DISPLAY).get(DEFAULT_FOCUSED_INDEX).token;
final int defaultFocusWindowId = mA11yWindowManager.findWindowIdLocked( final int defaultFocusWindowId = mA11yWindowManager.findWindowIdLocked(
USER_SYSTEM_ID, defaultFocusWinToken); USER_SYSTEM_ID, defaultFocusWinToken);
when(mMockWindowManagerInternal.getFocusedWindowToken()) when(mMockWindowManagerInternal.getFocusedWindowTokenFromWindowStates())
.thenReturn(defaultFocusWinToken); .thenReturn(defaultFocusWinToken);
final int newFocusWindowId = getWindowIdFromWindowInfosForDisplay(Display.DEFAULT_DISPLAY, final int newFocusWindowId = getWindowIdFromWindowInfosForDisplay(Display.DEFAULT_DISPLAY,
DEFAULT_FOCUSED_INDEX + 1); DEFAULT_FOCUSED_INDEX + 1);