summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Kao <jackykao@google.com> 2019-07-18 15:19:52 +0800
committer Jacky Kao <jackykao@google.com> 2019-07-22 10:45:35 +0800
commitf93252b725a791bbcbff8dd96281c5ae1be9641a (patch)
tree22c2e0fa14492f62fc3f5db3ac9d8ef66aa7d0c7
parent52f42211e847ce7d21e6702f50afaf220d0fc966 (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
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java5
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java12
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java143
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerInternal.java12
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java41
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java25
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/AccessibilityWindowManagerTest.java10
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