WM: Make AccessibilityController persistent
Keep the AccessibilityController alive so we can keep track of focus changes from input. This will allow Accessibility service to query the focus window and get the focused embedded window as well. Bug: b/188792659 Test: presubmit Change-Id: I5741ed373938963da129c410c5226dff5a84ce30
This commit is contained in:
@@ -844,7 +844,7 @@ public class AppTransitionController {
|
||||
|
||||
final AccessibilityController accessibilityController =
|
||||
mDisplayContent.mWmService.mAccessibilityController;
|
||||
if (accessibilityController != null) {
|
||||
if (accessibilityController.hasCallbacks()) {
|
||||
accessibilityController.onAppWindowTransition(mDisplayContent.getDisplayId(), transit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1276,7 +1276,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
|
||||
addWindowToken(token.token, token);
|
||||
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
final int prevDisplayId = prevDc != null ? prevDc.getDisplayId() : INVALID_DISPLAY;
|
||||
mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(prevDisplayId,
|
||||
getDisplayId());
|
||||
@@ -3539,7 +3539,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
// focused one starts firing events.
|
||||
// TODO(b/151179149) investigate what info accessibility service needs before input can
|
||||
// dispatch focus to clients.
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mH.sendMessage(PooledLambda.obtainMessage(
|
||||
this::updateAccessibilityOnWindowFocusChanged,
|
||||
mWmService.mAccessibilityController));
|
||||
@@ -5174,7 +5174,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
}
|
||||
if (!mLocationInParentWindow.equals(x, y)) {
|
||||
mLocationInParentWindow.set(x, y);
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(mDisplayId);
|
||||
}
|
||||
notifyLocationInParentDisplayChanged();
|
||||
@@ -5704,7 +5704,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
@Override
|
||||
void onResize() {
|
||||
super.onResize();
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onDisplaySizeChanged(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public class DockedTaskDividerController {
|
||||
void setTouchRegion(Rect touchRegion) {
|
||||
mTouchRegion.set(touchRegion);
|
||||
// We need to report touchable region changes to accessibility.
|
||||
if (mDisplayContent.mWmService.mAccessibilityController != null) {
|
||||
if (mDisplayContent.mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mDisplayContent.mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(
|
||||
mDisplayContent.getDisplayId());
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ public class ShellRoot {
|
||||
mAccessibilityWindow = null;
|
||||
}
|
||||
}
|
||||
if (mDisplayContent.mWmService.mAccessibilityController != null) {
|
||||
if (mDisplayContent.mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mDisplayContent.mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(
|
||||
mDisplayContent.getDisplayId());
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ public class WindowAnimator {
|
||||
final DisplayContent dc = root.getDisplayContent(displayId);
|
||||
|
||||
dc.checkAppWindowsReadyToShow();
|
||||
if (accessibilityController != null) {
|
||||
if (accessibilityController.hasCallbacks()) {
|
||||
accessibilityController.drawMagnifiedRegionBorderIfNeeded(displayId,
|
||||
mTransaction);
|
||||
}
|
||||
|
||||
@@ -636,7 +636,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
/** List of window currently causing non-system overlay windows to be hidden. */
|
||||
private ArrayList<WindowState> mHidingNonSystemOverlayWindows = new ArrayList<>();
|
||||
|
||||
AccessibilityController mAccessibilityController;
|
||||
final AccessibilityController mAccessibilityController;
|
||||
private RecentsAnimationController mRecentsAnimationController;
|
||||
|
||||
Watermark mWatermark;
|
||||
@@ -1382,6 +1382,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
mStartingSurfaceController = new StartingSurfaceController(this);
|
||||
|
||||
mBlurController = new BlurController(mContext, mPowerManager);
|
||||
mAccessibilityController = new AccessibilityController(this);
|
||||
}
|
||||
|
||||
DisplayAreaPolicy.Provider getDisplayAreaPolicyProvider() {
|
||||
@@ -2161,7 +2162,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
mWindowPlacerLocked.performSurfacePlacement();
|
||||
|
||||
// We need to report touchable region changes to accessibility.
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController.onSomeWindowResizedOrMovedWithCallingUid(
|
||||
uid, w.getDisplayContent().getDisplayId());
|
||||
}
|
||||
@@ -2174,7 +2175,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
|
||||
public void onRectangleOnScreenRequested(IBinder token, Rect rectangle) {
|
||||
synchronized (mGlobalLock) {
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
WindowState window = mWindowMap.get(token);
|
||||
if (window != null) {
|
||||
mAccessibilityController.onRectangleOnScreenRequested(
|
||||
@@ -2264,7 +2265,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
win.mActivityRecord.checkKeyguardFlagsChanged();
|
||||
}
|
||||
if (((attrChanges & LayoutParams.ACCESSIBILITY_TITLE_CHANGED) != 0)
|
||||
&& (mAccessibilityController != null)) {
|
||||
&& (mAccessibilityController.hasCallbacks())) {
|
||||
// No move or resize, but the controller checks for title changes as well
|
||||
mAccessibilityController.onSomeWindowResizedOrMovedWithCallingUid(
|
||||
uid, win.getDisplayContent().getDisplayId());
|
||||
@@ -2586,7 +2587,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
win.mDestroying = true;
|
||||
win.destroySurface(false, stopped);
|
||||
}
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController.onWindowTransition(win, transit);
|
||||
}
|
||||
|
||||
@@ -6376,7 +6377,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
|
||||
mInputManagerCallback.dump(pw, " ");
|
||||
mTaskSnapshotController.dump(pw, " ");
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController.dump(pw, " ");
|
||||
}
|
||||
|
||||
@@ -7396,7 +7397,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
@Override
|
||||
public void setMagnificationSpec(int displayId, MagnificationSpec spec) {
|
||||
synchronized (mGlobalLock) {
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController.setMagnificationSpec(displayId, spec);
|
||||
} else {
|
||||
throw new IllegalStateException("Magnification callbacks not set!");
|
||||
@@ -7407,7 +7408,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
@Override
|
||||
public void setForceShowMagnifiableBounds(int displayId, boolean show) {
|
||||
synchronized (mGlobalLock) {
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController.setForceShowMagnifiableBounds(displayId, show);
|
||||
} else {
|
||||
throw new IllegalStateException("Magnification callbacks not set!");
|
||||
@@ -7418,7 +7419,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
@Override
|
||||
public void getMagnificationRegion(int displayId, @NonNull Region magnificationRegion) {
|
||||
synchronized (mGlobalLock) {
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController.getMagnificationRegion(displayId, magnificationRegion);
|
||||
} else {
|
||||
throw new IllegalStateException("Magnification callbacks not set!");
|
||||
@@ -7434,7 +7435,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
return null;
|
||||
}
|
||||
MagnificationSpec spec = null;
|
||||
if (mAccessibilityController != null) {
|
||||
if (mAccessibilityController.hasCallbacks()) {
|
||||
spec = mAccessibilityController.getMagnificationSpecForWindow(windowState);
|
||||
}
|
||||
if ((spec == null || spec.isNop()) && windowState.mGlobalScale == 1.0f) {
|
||||
@@ -7453,16 +7454,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
public boolean setMagnificationCallbacks(int displayId,
|
||||
@Nullable MagnificationCallbacks callbacks) {
|
||||
synchronized (mGlobalLock) {
|
||||
if (mAccessibilityController == null) {
|
||||
mAccessibilityController = new AccessibilityController(
|
||||
WindowManagerService.this);
|
||||
}
|
||||
boolean result = mAccessibilityController.setMagnificationCallbacks(
|
||||
displayId, callbacks);
|
||||
if (!mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController = null;
|
||||
}
|
||||
return result;
|
||||
return mAccessibilityController.setMagnificationCallbacks(displayId, callbacks);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7470,15 +7462,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
public void setWindowsForAccessibilityCallback(int displayId,
|
||||
WindowsForAccessibilityCallback callback) {
|
||||
synchronized (mGlobalLock) {
|
||||
if (mAccessibilityController == null) {
|
||||
mAccessibilityController = new AccessibilityController(
|
||||
WindowManagerService.this);
|
||||
}
|
||||
mAccessibilityController.setWindowsForAccessibilityCallback(
|
||||
displayId, callback);
|
||||
if (!mAccessibilityController.hasCallbacks()) {
|
||||
mAccessibilityController = null;
|
||||
}
|
||||
mAccessibilityController.setWindowsForAccessibilityCallback(displayId, callback);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7651,13 +7635,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
|
||||
@Override
|
||||
public void computeWindowsForAccessibility(int displayId) {
|
||||
final AccessibilityController accessibilityController;
|
||||
synchronized (mGlobalLock) {
|
||||
accessibilityController = mAccessibilityController;
|
||||
}
|
||||
if (accessibilityController != null) {
|
||||
accessibilityController.performComputeChangedWindowsNot(displayId, true);
|
||||
}
|
||||
mAccessibilityController.performComputeChangedWindowsNot(displayId, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2212,7 +2212,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
mWmService.mAccessibilityController;
|
||||
final int winTransit = TRANSIT_EXIT;
|
||||
mWinAnimator.applyAnimationLocked(winTransit, false /* isEntrance */);
|
||||
if (accessibilityController != null) {
|
||||
if (accessibilityController.hasCallbacks()) {
|
||||
accessibilityController.onWindowTransition(this, winTransit);
|
||||
}
|
||||
}
|
||||
@@ -2233,7 +2233,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
}
|
||||
if (isVisibleNow() && animateExit) {
|
||||
mWinAnimator.applyAnimationLocked(TRANSIT_EXIT, false);
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onWindowTransition(this, TRANSIT_EXIT);
|
||||
}
|
||||
changed = true;
|
||||
@@ -2283,7 +2283,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
startMoveAnimation(left, top);
|
||||
}
|
||||
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(getDisplayId());
|
||||
}
|
||||
updateLocationInParentDisplayIfNeeded();
|
||||
@@ -2569,7 +2569,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
setDisplayLayoutNeeded();
|
||||
mWmService.requestTraversal();
|
||||
}
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onWindowTransition(this, transit);
|
||||
}
|
||||
}
|
||||
@@ -3589,7 +3589,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
if (mAttrs.type >= FIRST_SYSTEM_WINDOW && mAttrs.type != TYPE_TOAST) {
|
||||
mWmService.mAtmService.mActiveUids.onNonAppSurfaceVisibilityChanged(mOwnerUid, shown);
|
||||
}
|
||||
if (mIsImWindow && mWmService.mAccessibilityController != null) {
|
||||
if (mIsImWindow && mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onImeSurfaceShownChanged(this, shown);
|
||||
}
|
||||
}
|
||||
@@ -3933,7 +3933,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
"Requested redraw for orientation change: %s", this);
|
||||
}
|
||||
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(displayId);
|
||||
}
|
||||
updateLocationInParentDisplayIfNeeded();
|
||||
@@ -5059,7 +5059,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
if (isAnimating()) {
|
||||
return;
|
||||
}
|
||||
if (mWmService.mAccessibilityController != null) {
|
||||
if (mWmService.mAccessibilityController.hasCallbacks()) {
|
||||
mWmService.mAccessibilityController.onSomeWindowResizedOrMoved(getDisplayId());
|
||||
}
|
||||
|
||||
|
||||
@@ -682,7 +682,7 @@ class WindowStateAnimator {
|
||||
applyAnimationLocked(transit, true);
|
||||
}
|
||||
|
||||
if (mService.mAccessibilityController != null) {
|
||||
if (mService.mAccessibilityController.hasCallbacks()) {
|
||||
mService.mAccessibilityController.onWindowTransition(mWin, transit);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user