diff options
| author | 2019-07-18 15:19:52 +0800 | |
|---|---|---|
| committer | 2019-07-22 10:45:35 +0800 | |
| commit | f93252b725a791bbcbff8dd96281c5ae1be9641a (patch) | |
| tree | 22c2e0fa14492f62fc3f5db3ac9d8ef66aa7d0c7 | |
| parent | 52f42211e847ce7d21e6702f50afaf220d0fc966 (diff) | |
Supporting windows updated per display [Part I]
1. Making WindowsForAccessibilityObserver class to be plural for
supporting multi-display.
2. Adding the display information when WindowManagerService informs the
window changes to Accessibility Controller.
Bug: 132854721
Test: a11y CTS & unit tests
Change-Id: I0efba7d924b24fcab85c6bb333687cc4cefa890f
8 files changed, 164 insertions, 86 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 47f137c63efa..d83744d4734e 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -579,10 +579,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // Make sure clients receiving this event will be able to get the // current state of the windows as the window manager may be delaying // the computation for performance reasons. + // TODO [Multi-Display] : using correct display Id to replace DEFAULT_DISPLAY if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && mA11yWindowManager.isTrackingWindowsLocked()) { WindowManagerInternal wm = LocalServices.getService(WindowManagerInternal.class); - wm.computeWindowsForAccessibility(); + wm.computeWindowsForAccessibility(Display.DEFAULT_DISPLAY); } synchronized (mLock) { notifyAccessibilityServicesDelayedLocked(event, false); @@ -2601,8 +2602,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub public final RemoteCallbackList<IAccessibilityManagerClient> mUserClients = new RemoteCallbackList<>(); - public final SparseArray<IBinder> mWindowTokens = new SparseArray<>(); - // Transient state. public final ArrayList<AccessibilityServiceConnection> mBoundServices = new ArrayList<>(); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java index 1dea2f2dd954..c12929153781 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java @@ -33,6 +33,7 @@ import android.os.UserHandle; import android.text.TextUtils; import android.util.Slog; import android.util.SparseArray; +import android.view.Display; import android.view.IWindow; import android.view.WindowInfo; import android.view.WindowManager; @@ -311,7 +312,9 @@ public class AccessibilityWindowManager // In some cases, onWindowsForAccessibilityChanged will be called immediately in // setWindowsForAccessibilityCallback. We'll lost windows if flag is false. mTrackingWindows = true; - mWindowManagerInternal.setWindowsForAccessibilityCallback(this); + // TODO [Multi-Display] : using correct display Id to replace DEFAULT_DISPLAY + mWindowManagerInternal.setWindowsForAccessibilityCallback(Display.DEFAULT_DISPLAY, + this); } } } @@ -322,7 +325,9 @@ public class AccessibilityWindowManager public void stopTrackingWindows() { synchronized (mLock) { if (mTrackingWindows) { - mWindowManagerInternal.setWindowsForAccessibilityCallback(null); + // TODO [Multi-Display] : using correct display Id to replace DEFAULT_DISPLAY + mWindowManagerInternal.setWindowsForAccessibilityCallback(Display.DEFAULT_DISPLAY, + null); mTrackingWindows = false; clearWindowsLocked(); } @@ -521,7 +526,8 @@ public class AccessibilityWindowManager } } } - mWindowManagerInternal.computeWindowsForAccessibility(); + // TODO [Multi-Display] : using correct display Id to replace DEFAULT_DISPLAY + mWindowManagerInternal.computeWindowsForAccessibility(Display.DEFAULT_DISPLAY); return windowId; } diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 8abfde2c5c36..26ca975bfc8f 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -85,7 +85,8 @@ final class AccessibilityController { private SparseArray<DisplayMagnifier> mDisplayMagnifiers = new SparseArray<>(); - private WindowsForAccessibilityObserver mWindowsForAccessibilityObserver; + private SparseArray<WindowsForAccessibilityObserver> mWindowsForAccessibilityObserver = + new SparseArray<>(); public boolean setMagnificationCallbacksLocked(int displayId, MagnificationCallbacks callbacks) { @@ -115,27 +116,52 @@ final class AccessibilityController { return result; } - public void setWindowsForAccessibilityCallback(WindowsForAccessibilityCallback callback) { + public boolean setWindowsForAccessibilityCallbackLocked(int displayId, + WindowsForAccessibilityCallback callback) { if (callback != null) { - if (mWindowsForAccessibilityObserver != null) { - throw new IllegalStateException( - "Windows for accessibility callback already set!"); + final DisplayContent dc = mService.mRoot.getDisplayContent(displayId); + if (dc == null) { + return false; + } + + final Display display = dc.getDisplay(); + if (mWindowsForAccessibilityObserver.get(displayId) != null) { + if (display.getType() == Display.TYPE_VIRTUAL && dc.getParentWindow() != null) { + // The window observer of this embedded display had been set from + // window manager after setting its parent window + return true; + } else { + throw new IllegalStateException( + "Windows for accessibility callback of display " + + displayId + " already set!"); + } } - mWindowsForAccessibilityObserver = new WindowsForAccessibilityObserver( - mService, callback); + if (display.getType() == Display.TYPE_OVERLAY) { + return false; + } + mWindowsForAccessibilityObserver.put(displayId, + new WindowsForAccessibilityObserver(mService, displayId, callback)); } else { - if (mWindowsForAccessibilityObserver == null) { + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver == null) { throw new IllegalStateException( - "Windows for accessibility callback already cleared!"); + "Windows for accessibility callback of display " + displayId + + " already cleared!"); } - mWindowsForAccessibilityObserver = null; + mWindowsForAccessibilityObserver.remove(displayId); } + return true; } - public void performComputeChangedWindowsNotLocked(boolean forceSend) { + public void performComputeChangedWindowsNotLocked(int displayId, boolean forceSend) { WindowsForAccessibilityObserver observer = null; synchronized (mService) { - observer = mWindowsForAccessibilityObserver; + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + observer = windowsForA11yObserver; + } } if (observer != null) { observer.performComputeChangedWindowsNotLocked(forceSend); @@ -147,9 +173,10 @@ final class AccessibilityController { if (displayMagnifier != null) { displayMagnifier.setMagnificationSpecLocked(spec); } - // TODO: support multi-display for windows observer - if (mWindowsForAccessibilityObserver != null && displayId == Display.DEFAULT_DISPLAY) { - mWindowsForAccessibilityObserver.scheduleComputeChangedWindowsLocked(); + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + windowsForA11yObserver.scheduleComputeChangedWindowsLocked(); } } @@ -173,9 +200,10 @@ final class AccessibilityController { if (displayMagnifier != null) { displayMagnifier.onWindowLayersChangedLocked(); } - // TODO: support multi-display for windows observer - if (mWindowsForAccessibilityObserver != null && displayId == Display.DEFAULT_DISPLAY) { - mWindowsForAccessibilityObserver.scheduleComputeChangedWindowsLocked(); + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + windowsForA11yObserver.scheduleComputeChangedWindowsLocked(); } } @@ -185,9 +213,10 @@ final class AccessibilityController { if (displayMagnifier != null) { displayMagnifier.onRotationChangedLocked(displayContent); } - // TODO: support multi-display for windows observer - if (mWindowsForAccessibilityObserver != null && displayId == Display.DEFAULT_DISPLAY) { - mWindowsForAccessibilityObserver.scheduleComputeChangedWindowsLocked(); + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + windowsForA11yObserver.scheduleComputeChangedWindowsLocked(); } } @@ -206,29 +235,36 @@ final class AccessibilityController { if (displayMagnifier != null) { displayMagnifier.onWindowTransitionLocked(windowState, transition); } - // TODO: support multi-display for windows observer - if (mWindowsForAccessibilityObserver != null && displayId == Display.DEFAULT_DISPLAY) { - mWindowsForAccessibilityObserver.scheduleComputeChangedWindowsLocked(); + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + windowsForA11yObserver.scheduleComputeChangedWindowsLocked(); } } - public void onWindowFocusChangedNotLocked() { + public void onWindowFocusChangedNotLocked(int displayId) { // Not relevant for the display magnifier. WindowsForAccessibilityObserver observer = null; synchronized (mService) { - observer = mWindowsForAccessibilityObserver; + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + observer = windowsForA11yObserver; + } } if (observer != null) { observer.performComputeChangedWindowsNotLocked(false); } } - public void onSomeWindowResizedOrMovedLocked() { + public void onSomeWindowResizedOrMovedLocked(int displayId) { // Not relevant for the display magnifier. - if (mWindowsForAccessibilityObserver != null) { - mWindowsForAccessibilityObserver.scheduleComputeChangedWindowsLocked(); + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(displayId); + if (windowsForA11yObserver != null) { + windowsForA11yObserver.scheduleComputeChangedWindowsLocked(); } } @@ -264,6 +300,29 @@ final class AccessibilityController { } } + public void handleWindowObserverOfEmbeddedDisplayLocked(int embeddedDisplayId, + WindowState parentWindow) { + if (embeddedDisplayId == Display.DEFAULT_DISPLAY || parentWindow == null) { + return; + } + // Finds the parent display of this embedded display + final int parentDisplayId; + WindowState candidate = parentWindow; + while (candidate != null) { + parentWindow = candidate; + candidate = parentWindow.getDisplayContent().getParentWindow(); + } + parentDisplayId = parentWindow.getDisplayId(); + // Uses the observer of parent display + final WindowsForAccessibilityObserver windowsForA11yObserver = + mWindowsForAccessibilityObserver.get(parentDisplayId); + + if (windowsForA11yObserver != null) { + // Replaces the observer of embedded display to the one of parent display + mWindowsForAccessibilityObserver.put(embeddedDisplayId, windowsForA11yObserver); + } + } + private static void populateTransformationMatrixLocked(WindowState windowState, Matrix outMatrix) { windowState.getTransformationMatrix(sTempFloats, outMatrix); @@ -1059,13 +1118,17 @@ final class AccessibilityController { private final WindowsForAccessibilityCallback mCallback; + private final int mDisplayId; + private final long mRecurringAccessibilityEventsIntervalMillis; public WindowsForAccessibilityObserver(WindowManagerService windowManagerService, + int displayId, WindowsForAccessibilityCallback callback) { mContext = windowManagerService.mContext; mService = windowManagerService; mCallback = callback; + mDisplayId = displayId; mHandler = new MyHandler(mService.mH.getLooper()); mRecurringAccessibilityEventsIntervalMillis = ViewConfiguration .getSendRecurringAccessibilityEventsInterval(); @@ -1100,14 +1163,17 @@ final class AccessibilityController { // Do not send the windows if there is no current focus as // the window manager is still looking for where to put it. // We will do the work when we get a focus change callback. - // TODO(b/112273690): Support multiple displays + // TODO [Multi-Display] : only checks top focused window if (!isCurrentFocusWindowOnDefaultDisplay()) { return; } - WindowManager windowManager = (WindowManager) - mContext.getSystemService(Context.WINDOW_SERVICE); - windowManager.getDefaultDisplay().getRealSize(mTempPoint); + final DisplayContent dc = mService.mRoot.getDisplayContent(mDisplayId); + if (dc == null) { + return; + } + final Display display = dc.getDisplay(); + display.getRealSize(mTempPoint); final int screenWidth = mTempPoint.x; final int screenHeight = mTempPoint.y; @@ -1305,7 +1371,11 @@ final class AccessibilityController { private void populateVisibleWindowsOnScreenLocked(SparseArray<WindowState> outWindows) { final List<WindowState> tempWindowStatesList = new ArrayList<>(); - final DisplayContent dc = mService.getDefaultDisplayContentLocked(); + final DisplayContent dc = mService.mRoot.getDisplayContent(mDisplayId); + if (dc == null) { + return; + } + dc.forAllWindows(w -> { if (w.isVisibleLw()) { tempWindowStatesList.add(w); @@ -1319,8 +1389,7 @@ final class AccessibilityController { return; } - if (w.isVisibleLw() && parentWindow.getDisplayContent().isDefaultDisplay - && tempWindowStatesList.contains(parentWindow)) { + if (w.isVisibleLw() && tempWindowStatesList.contains(parentWindow)) { tempWindowStatesList.add(tempWindowStatesList.lastIndexOf(parentWindow), w); } }, false /* traverseTopToBottom */); @@ -1341,7 +1410,7 @@ final class AccessibilityController { } return displayParentWindow; } - + // TODO [Multi-Display] : only checks top focused window private boolean isCurrentFocusWindowOnDefaultDisplay() { final WindowState focusedWindow = mService.mRoot.getTopFocusedDisplayContent().mCurrentFocus; diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e2d592826a3a..1b56ccf87c7c 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -5094,7 +5094,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo if (!mLocationInParentWindow.equals(x, y)) { mLocationInParentWindow.set(x, y); if (mWmService.mAccessibilityController != null) { - mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(mDisplayId); } notifyLocationInParentDisplayChanged(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java index 6910ce91cce2..636f4e6d09d0 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -263,11 +263,13 @@ public abstract class WindowManagerInternal { /** * Sets a callback for observing which windows are touchable for the purposes - * of accessibility. + * of accessibility on specified display. * + * @param displayId The logical display id. * @param callback The callback. + * @return {@code false} if display id is not valid. */ - public abstract void setWindowsForAccessibilityCallback( + public abstract boolean setWindowsForAccessibilityCallback(int displayId, WindowsForAccessibilityCallback callback); /** @@ -418,9 +420,11 @@ public abstract class WindowManagerInternal { public abstract boolean isStackVisibleLw(int windowingMode); /** - * Requests the window manager to resend the windows for accessibility. + * Requests the window manager to resend the windows for accessibility on specified display. + * + * @param displayId Display ID to be computed its windows for accessibility */ - public abstract void computeWindowsForAccessibility(); + public abstract void computeWindowsForAccessibility(int displayId); /** * Called after virtual display Id is updated by diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f52bde9a035c..08571a0848eb 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1911,10 +1911,9 @@ public class WindowManagerService extends IWindowManager.Stub mWindowPlacerLocked.performSurfacePlacement(); // We need to report touchable region changes to accessibility. - if (mAccessibilityController != null - && (w.getDisplayContent().getDisplayId() == DEFAULT_DISPLAY - || w.getDisplayContent().getParentWindow() != null)) { - mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + if (mAccessibilityController != null) { + mAccessibilityController.onSomeWindowResizedOrMovedLocked( + w.getDisplayContent().getDisplayId()); } } } @@ -2044,11 +2043,10 @@ public class WindowManagerService extends IWindowManager.Stub win.mAppToken.checkKeyguardFlagsChanged(); } if (((attrChanges & LayoutParams.ACCESSIBILITY_TITLE_CHANGED) != 0) - && (mAccessibilityController != null) - && (win.getDisplayId() == DEFAULT_DISPLAY - || win.getDisplayContent().getParentWindow() != null)) { + && (mAccessibilityController != null)) { // No move or resize, but the controller checks for title changes as well - mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + mAccessibilityController.onSomeWindowResizedOrMovedLocked( + win.getDisplayContent().getDisplayId()); } if ((flagChanges & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS) != 0) { @@ -4555,11 +4553,7 @@ public class WindowManagerService extends IWindowManager.Stub AccessibilityController accessibilityController = null; synchronized (mGlobalLock) { - // TODO(multidisplay): Accessibility supported only of default display and - // embedded displays. - if (mAccessibilityController != null - && (displayContent.isDefaultDisplay - || displayContent.getParentWindow() != null)) { + if (mAccessibilityController != null) { accessibilityController = mAccessibilityController; } @@ -4582,7 +4576,8 @@ public class WindowManagerService extends IWindowManager.Stub // First notify the accessibility manager for the change so it has // the windows before the newly focused one starts firing eventgs. if (accessibilityController != null) { - accessibilityController.onWindowFocusChangedNotLocked(); + accessibilityController.onWindowFocusChangedNotLocked( + displayContent.getDisplayId()); } if (newFocus != null) { @@ -6757,6 +6752,12 @@ public class WindowManagerService extends IWindowManager.Stub return; } getDisplayContentOrCreate(displayId, null).reparentDisplayContent(win, sc); + // Notifies AccessibilityController to re-compute the window observer of + // this embedded display + if (mAccessibilityController != null) { + mAccessibilityController.handleWindowObserverOfEmbeddedDisplayLocked(displayId, + win); + } } finally { Binder.restoreCallingIdentity(token); } @@ -7168,16 +7169,20 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void setWindowsForAccessibilityCallback(WindowsForAccessibilityCallback callback) { + public boolean setWindowsForAccessibilityCallback(int displayId, + WindowsForAccessibilityCallback callback) { synchronized (mGlobalLock) { if (mAccessibilityController == null) { mAccessibilityController = new AccessibilityController( WindowManagerService.this); } - mAccessibilityController.setWindowsForAccessibilityCallback(callback); + final boolean result = + mAccessibilityController.setWindowsForAccessibilityCallbackLocked( + displayId, callback); if (!mAccessibilityController.hasCallbacksLocked()) { mAccessibilityController = null; } + return result; } } @@ -7343,13 +7348,13 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void computeWindowsForAccessibility() { + public void computeWindowsForAccessibility(int displayId) { final AccessibilityController accessibilityController; synchronized (mGlobalLock) { accessibilityController = mAccessibilityController; } if (accessibilityController != null) { - accessibilityController.performComputeChangedWindowsNotLocked(true); + accessibilityController.performComputeChangedWindowsNotLocked(displayId, true); } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index a3ee1088bc37..ab06da49ce55 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -22,7 +22,6 @@ import static android.app.AppOpsManager.MODE_DEFAULT; import static android.app.AppOpsManager.OP_NONE; import static android.os.PowerManager.DRAW_WAKE_LOCK; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; -import static android.view.Display.DEFAULT_DISPLAY; import static android.view.SurfaceControl.Transaction; import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; @@ -1802,11 +1801,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP startMoveAnimation(left, top); } - // TODO (multidisplay): Accessibility supported only for the default display and - // embedded displays - if (mWmService.mAccessibilityController != null && (getDisplayId() == DEFAULT_DISPLAY - || getDisplayContent().getParentWindow() != null)) { - mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + if (mWmService.mAccessibilityController != null) { + mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(getDisplayId()); } updateLocationInParentDisplayIfNeeded(); @@ -3196,12 +3192,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP outsets, reportDraw, mergedConfiguration, reportOrientation, displayId, displayCutout); } - - // TODO (multidisplay): Accessibility supported only for the default display and - // embedded displays - if (mWmService.mAccessibilityController != null && (getDisplayId() == DEFAULT_DISPLAY - || getDisplayContent().getParentWindow() != null)) { - mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + if (mWmService.mAccessibilityController != null) { + mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked( + getDisplayId()); } updateLocationInParentDisplayIfNeeded(); @@ -4296,12 +4289,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (isSelfAnimating()) { return; } - - // TODO (multidisplay): Accessibility supported only for the default display and - // embedded displays - if (mWmService.mAccessibilityController != null && (getDisplayId() == DEFAULT_DISPLAY - || getDisplayContent().getParentWindow() != null)) { - mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(); + if (mWmService.mAccessibilityController != null) { + mWmService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(getDisplayId()); } if (!isSelfOrAncestorWindowAnimatingExit()) { 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 e12532931e7c..7e64cafaf7a2 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java @@ -33,6 +33,7 @@ import static org.junit.Assert.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -42,6 +43,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.UserHandle; import android.util.SparseArray; +import android.view.Display; import android.view.IWindow; import android.view.WindowInfo; import android.view.accessibility.AccessibilityEvent; @@ -142,7 +144,9 @@ public class AccessibilityWindowManagerTest { public void startTrackingWindows_shouldEnableWindowManagerCallback() { // AccessibilityWindowManager#startTrackingWindows already invoked in setup assertTrue(mA11yWindowManager.isTrackingWindowsLocked()); - verify(mMockWindowManagerInternal).setWindowsForAccessibilityCallback(any()); + // TODO [Multi-Display] : using correct display Id to replace DEFAULT_DISPLAY + verify(mMockWindowManagerInternal).setWindowsForAccessibilityCallback( + eq(Display.DEFAULT_DISPLAY), any()); } @Test @@ -152,7 +156,9 @@ public class AccessibilityWindowManagerTest { mA11yWindowManager.stopTrackingWindows(); assertFalse(mA11yWindowManager.isTrackingWindowsLocked()); - verify(mMockWindowManagerInternal).setWindowsForAccessibilityCallback(any()); + // TODO [Multi-Display] : using correct display Id to replace DEFAULT_DISPLAY + verify(mMockWindowManagerInternal).setWindowsForAccessibilityCallback( + eq(Display.DEFAULT_DISPLAY), any()); } @Test |