Merge changes from topic "nodebounds" into tm-dev
* changes:
remove embeddedMatrix usage for PIP menu
Change node bounds procedure based on SufaceFlinger Callback
diff --git a/core/java/android/view/AccessibilityEmbeddedConnection.java b/core/java/android/view/AccessibilityEmbeddedConnection.java
index de895d9..a7d3164 100644
--- a/core/java/android/view/AccessibilityEmbeddedConnection.java
+++ b/core/java/android/view/AccessibilityEmbeddedConnection.java
@@ -33,7 +33,7 @@
*/
final class AccessibilityEmbeddedConnection extends IAccessibilityEmbeddedConnection.Stub {
private final WeakReference<ViewRootImpl> mViewRootImpl;
- private final Matrix mTmpScreenMatrix = new Matrix();
+ private final Matrix mTmpWindowMatrix = new Matrix();
AccessibilityEmbeddedConnection(ViewRootImpl viewRootImpl) {
mViewRootImpl = new WeakReference<>(viewRootImpl);
@@ -70,14 +70,14 @@
}
@Override
- public void setScreenMatrix(float[] matrixValues) {
+ public void setWindowMatrix(float[] matrixValues) {
final ViewRootImpl viewRootImpl = mViewRootImpl.get();
if (viewRootImpl != null) {
- mTmpScreenMatrix.setValues(matrixValues);
- if (viewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy == null) {
- viewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy = new Matrix();
+ mTmpWindowMatrix.setValues(matrixValues);
+ if (viewRootImpl.mAttachInfo.mWindowMatrixInEmbeddedHierarchy == null) {
+ viewRootImpl.mAttachInfo.mWindowMatrixInEmbeddedHierarchy = new Matrix();
}
- viewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy.set(mTmpScreenMatrix);
+ viewRootImpl.mAttachInfo.mWindowMatrixInEmbeddedHierarchy.set(mTmpWindowMatrix);
}
}
}
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 7e0b794..23e1505 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -22,7 +22,6 @@
import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY;
import android.graphics.Matrix;
-import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
@@ -112,10 +111,7 @@
private final ArrayList<View> mTempArrayList = new ArrayList<View>();
- private final Point mTempPoint = new Point();
private final Rect mTempRect = new Rect();
- private final Rect mTempRect1 = new Rect();
- private final Rect mTempRect2 = new Rect();
private final RectF mTempRectF = new RectF();
private AddNodeInfosForViewId mAddNodeInfosForViewId;
@@ -131,7 +127,7 @@
private int mActiveRequestPreparerId;
public AccessibilityInteractionController(ViewRootImpl viewRootImpl) {
- Looper looper = viewRootImpl.mHandler.getLooper();
+ Looper looper = viewRootImpl.mHandler.getLooper();
mMyLooperThreadId = looper.getThread().getId();
mMyProcessId = Process.myPid();
mHandler = new PrivateHandler(looper);
@@ -173,7 +169,8 @@
public void findAccessibilityNodeInfoByAccessibilityIdClientThread(
long accessibilityNodeId, Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, MagnificationSpec spec, Bundle arguments) {
+ long interrogatingTid, MagnificationSpec spec, float[] matrixValues,
+ Bundle arguments) {
final Message message = mHandler.obtainMessage();
message.what = PrivateHandler.MSG_FIND_ACCESSIBILITY_NODE_INFO_BY_ACCESSIBILITY_ID;
message.arg1 = flags;
@@ -186,6 +183,7 @@
args.arg2 = spec;
args.arg3 = interactiveRegion;
args.arg4 = arguments;
+ args.arg5 = matrixValues;
message.obj = args;
synchronized (mLock) {
@@ -344,6 +342,7 @@
final MagnificationSpec spec = (MagnificationSpec) args.arg2;
final Region interactiveRegion = (Region) args.arg3;
final Bundle arguments = (Bundle) args.arg4;
+ final float[] matrixValues = (float[]) args.arg5;
args.recycle();
@@ -378,7 +377,7 @@
if (!interruptPrefetch) {
// Return found node and prefetched nodes in one IPC.
updateInfosForViewportAndReturnFindNodeResult(infos, callback, interactionId, spec,
- interactiveRegion);
+ matrixValues, interactiveRegion);
final SatisfiedFindAccessibilityNodeByAccessibilityIdRequest satisfiedRequest =
getSatisfiedRequestInPrefetch(requestedNode == null ? null : requestedNode,
@@ -391,13 +390,13 @@
// Return found node.
updateInfoForViewportAndReturnFindNodeResult(
requestedNode == null ? null : new AccessibilityNodeInfo(requestedNode),
- callback, interactionId, spec, interactiveRegion);
+ callback, interactionId, spec, matrixValues, interactiveRegion);
}
}
mPrefetcher.prefetchAccessibilityNodeInfos(requestedView,
requestedNode == null ? null : new AccessibilityNodeInfo(requestedNode), infos);
mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
- updateInfosForViewPort(infos, spec, interactiveRegion);
+ updateInfosForViewPort(infos, spec, matrixValues, interactiveRegion);
final SatisfiedFindAccessibilityNodeByAccessibilityIdRequest satisfiedRequest =
getSatisfiedRequestInPrefetch(requestedNode == null ? null : requestedNode, infos,
flags);
@@ -439,7 +438,7 @@
public void findAccessibilityNodeInfosByViewIdClientThread(long accessibilityNodeId,
String viewId, Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, MagnificationSpec spec) {
+ long interrogatingTid, MagnificationSpec spec, float[] matrixValues) {
Message message = mHandler.obtainMessage();
message.what = PrivateHandler.MSG_FIND_ACCESSIBILITY_NODE_INFOS_BY_VIEW_ID;
message.arg1 = flags;
@@ -451,6 +450,7 @@
args.arg2 = spec;
args.arg3 = viewId;
args.arg4 = interactiveRegion;
+ args.arg5 = matrixValues;
message.obj = args;
scheduleMessage(message, interrogatingPid, interrogatingTid, CONSIDER_REQUEST_PREPARERS);
@@ -467,6 +467,7 @@
final MagnificationSpec spec = (MagnificationSpec) args.arg2;
final String viewId = (String) args.arg3;
final Region interactiveRegion = (Region) args.arg4;
+ final float[] matrixValues = (float[]) args.arg5;
args.recycle();
final List<AccessibilityNodeInfo> infos = mTempAccessibilityNodeInfoList;
@@ -494,14 +495,14 @@
} finally {
mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
updateInfosForViewportAndReturnFindNodeResult(
- infos, callback, interactionId, spec, interactiveRegion);
+ infos, callback, interactionId, spec, matrixValues, interactiveRegion);
}
}
public void findAccessibilityNodeInfosByTextClientThread(long accessibilityNodeId,
String text, Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, MagnificationSpec spec) {
+ long interrogatingTid, MagnificationSpec spec, float[] matrixValues) {
Message message = mHandler.obtainMessage();
message.what = PrivateHandler.MSG_FIND_ACCESSIBILITY_NODE_INFO_BY_TEXT;
message.arg1 = flags;
@@ -514,6 +515,7 @@
args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
args.argi3 = interactionId;
args.arg4 = interactiveRegion;
+ args.arg5 = matrixValues;
message.obj = args;
scheduleMessage(message, interrogatingPid, interrogatingTid, CONSIDER_REQUEST_PREPARERS);
@@ -531,6 +533,7 @@
final int virtualDescendantId = args.argi2;
final int interactionId = args.argi3;
final Region interactiveRegion = (Region) args.arg4;
+ final float[] matrixValues = (float[]) args.arg5;
args.recycle();
List<AccessibilityNodeInfo> infos = null;
@@ -577,14 +580,14 @@
} finally {
mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
updateInfosForViewportAndReturnFindNodeResult(
- infos, callback, interactionId, spec, interactiveRegion);
+ infos, callback, interactionId, spec, matrixValues, interactiveRegion);
}
}
public void findFocusClientThread(long accessibilityNodeId, int focusType,
Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, MagnificationSpec spec) {
+ long interrogatingTid, MagnificationSpec spec, float[] matrixValues) {
Message message = mHandler.obtainMessage();
message.what = PrivateHandler.MSG_FIND_FOCUS;
message.arg1 = flags;
@@ -597,7 +600,7 @@
args.arg1 = callback;
args.arg2 = spec;
args.arg3 = interactiveRegion;
-
+ args.arg4 = matrixValues;
message.obj = args;
scheduleMessage(message, interrogatingPid, interrogatingTid, CONSIDER_REQUEST_PREPARERS);
@@ -615,6 +618,7 @@
(IAccessibilityInteractionConnectionCallback) args.arg1;
final MagnificationSpec spec = (MagnificationSpec) args.arg2;
final Region interactiveRegion = (Region) args.arg3;
+ final float[] matrixValues = (float[]) args.arg4;
args.recycle();
AccessibilityNodeInfo focused = null;
@@ -672,14 +676,14 @@
} finally {
mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
updateInfoForViewportAndReturnFindNodeResult(
- focused, callback, interactionId, spec, interactiveRegion);
+ focused, callback, interactionId, spec, matrixValues, interactiveRegion);
}
}
public void focusSearchClientThread(long accessibilityNodeId, int direction,
Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, MagnificationSpec spec) {
+ long interrogatingTid, MagnificationSpec spec, float[] matrixValues) {
Message message = mHandler.obtainMessage();
message.what = PrivateHandler.MSG_FOCUS_SEARCH;
message.arg1 = flags;
@@ -691,6 +695,7 @@
args.arg1 = callback;
args.arg2 = spec;
args.arg3 = interactiveRegion;
+ args.arg4 = matrixValues;
message.obj = args;
@@ -708,7 +713,7 @@
(IAccessibilityInteractionConnectionCallback) args.arg1;
final MagnificationSpec spec = (MagnificationSpec) args.arg2;
final Region interactiveRegion = (Region) args.arg3;
-
+ final float[] matrixValues = (float[]) args.arg4;
args.recycle();
AccessibilityNodeInfo next = null;
@@ -727,7 +732,7 @@
} finally {
mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0;
updateInfoForViewportAndReturnFindNodeResult(
- next, callback, interactionId, spec, interactiveRegion);
+ next, callback, interactionId, spec, matrixValues, interactiveRegion);
}
}
@@ -882,13 +887,20 @@
}
}
+ // The boundInScreen includes magnification effect, so we need to normalize it before
+ // determine the visibility.
private void adjustIsVisibleToUserIfNeeded(AccessibilityNodeInfo info,
- Region interactiveRegion) {
+ Region interactiveRegion, MagnificationSpec spec) {
if (interactiveRegion == null || info == null) {
return;
}
Rect boundsInScreen = mTempRect;
info.getBoundsInScreen(boundsInScreen);
+ if (spec != null && !spec.isNop()) {
+ boundsInScreen.offset((int) -spec.offsetX, (int) -spec.offsetY);
+ boundsInScreen.scale(1 / spec.scale);
+ }
+
if (interactiveRegion.quickReject(boundsInScreen) && !shouldBypassAdjustIsVisible()) {
info.setVisibleToUser(false);
}
@@ -902,36 +914,30 @@
return false;
}
- private void applyScreenMatrixIfNeeded(List<AccessibilityNodeInfo> infos) {
- if (infos == null || shouldBypassApplyScreenMatrix()) {
- return;
- }
- final int infoCount = infos.size();
- for (int i = 0; i < infoCount; i++) {
- final AccessibilityNodeInfo info = infos.get(i);
- applyScreenMatrixIfNeeded(info);
- }
- }
-
- private void applyScreenMatrixIfNeeded(AccessibilityNodeInfo info) {
- if (info == null || shouldBypassApplyScreenMatrix()) {
+ /**
+ * Applies the host-window matrix to the embedded node. After this transform, The node bounds
+ * will be transformed from embedded window coordinates to host-window coordinates.
+ *
+ */
+ private void applyHostWindowMatrixIfNeeded(AccessibilityNodeInfo info) {
+ if (info == null || shouldBypassApplyWindowMatrix()) {
return;
}
final Rect boundsInScreen = mTempRect;
final RectF transformedBounds = mTempRectF;
- final Matrix screenMatrix = mViewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy;
+ final Matrix windowMatrix = mViewRootImpl.mAttachInfo.mWindowMatrixInEmbeddedHierarchy;
info.getBoundsInScreen(boundsInScreen);
transformedBounds.set(boundsInScreen);
- screenMatrix.mapRect(transformedBounds);
+ windowMatrix.mapRect(transformedBounds);
boundsInScreen.set((int) transformedBounds.left, (int) transformedBounds.top,
(int) transformedBounds.right, (int) transformedBounds.bottom);
info.setBoundsInScreen(boundsInScreen);
}
- private boolean shouldBypassApplyScreenMatrix() {
- final Matrix screenMatrix = mViewRootImpl.mAttachInfo.mScreenMatrixInEmbeddedHierarchy;
- return screenMatrix == null || screenMatrix.isIdentity();
+ private boolean shouldBypassApplyWindowMatrix() {
+ final Matrix windowMatrix = mViewRootImpl.mAttachInfo.mWindowMatrixInEmbeddedHierarchy;
+ return windowMatrix == null || windowMatrix.isIdentity();
}
private void associateLeashedParentIfNeeded(AccessibilityNodeInfo info) {
@@ -963,46 +969,17 @@
if (!shouldApplyAppScaleAndMagnificationSpec(applicationScale, spec)) {
return;
}
-
Rect boundsInParent = mTempRect;
- Rect boundsInScreen = mTempRect1;
info.getBoundsInParent(boundsInParent);
- info.getBoundsInScreen(boundsInScreen);
if (applicationScale != 1.0f) {
boundsInParent.scale(applicationScale);
- boundsInScreen.scale(applicationScale);
}
if (spec != null) {
boundsInParent.scale(spec.scale);
// boundsInParent must not be offset.
- boundsInScreen.scale(spec.scale);
- boundsInScreen.offset((int) spec.offsetX, (int) spec.offsetY);
}
info.setBoundsInParent(boundsInParent);
- info.setBoundsInScreen(boundsInScreen);
-
- // Scale text locations if they are present
- if (info.hasExtras()) {
- Bundle extras = info.getExtras();
- Parcelable[] textLocations =
- extras.getParcelableArray(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY);
- if (textLocations != null) {
- for (int i = 0; i < textLocations.length; i++) {
- // Unchecked cast - an app that puts other objects in this bundle with this
- // key will crash.
- RectF textLocation = ((RectF) textLocations[i]);
- if (textLocation == null) {
- continue;
- }
- textLocation.scale(applicationScale);
- if (spec != null) {
- textLocation.scale(spec.scale);
- textLocation.offset(spec.offsetX, spec.offsetY);
- }
- }
- }
- }
}
private boolean shouldApplyAppScaleAndMagnificationSpec(float appScale,
@@ -1011,27 +988,88 @@
}
private void updateInfosForViewPort(List<AccessibilityNodeInfo> infos, MagnificationSpec spec,
- Region interactiveRegion) {
+ float[] matrixValues, Region interactiveRegion) {
for (int i = 0; i < infos.size(); i++) {
- updateInfoForViewPort(infos.get(i), spec, interactiveRegion);
+ updateInfoForViewPort(infos.get(i), spec, matrixValues, interactiveRegion);
}
}
private void updateInfoForViewPort(AccessibilityNodeInfo info, MagnificationSpec spec,
- Region interactiveRegion) {
+ float[] matrixValues, Region interactiveRegion) {
associateLeashedParentIfNeeded(info);
- applyScreenMatrixIfNeeded(info);
- // To avoid applyAppScaleAndMagnificationSpecIfNeeded changing the bounds of node,
- // then impact the visibility result, we need to adjust visibility before apply scale.
- adjustIsVisibleToUserIfNeeded(info, interactiveRegion);
+
+ applyHostWindowMatrixIfNeeded(info);
+ // Transform view bounds from window coordinates to screen coordinates.
+ transformBoundsWithScreenMatrix(info, matrixValues);
+ adjustIsVisibleToUserIfNeeded(info, interactiveRegion, spec);
applyAppScaleAndMagnificationSpecIfNeeded(info, spec);
}
+
+ /**
+ * Transforms the regions from local screen coordinate to global screen coordinate with the
+ * given transform matrix used in on-screen coordinate.
+ *
+ * @param info the AccessibilityNodeInfo that has the region in application screen coordinate
+ * @param matrixValues the matrix to be applied
+ */
+ private void transformBoundsWithScreenMatrix(AccessibilityNodeInfo info,
+ float[] matrixValues) {
+ if (info == null || matrixValues == null) {
+ return;
+ }
+ final Rect boundInScreen = mTempRect;
+ final RectF transformedBounds = mTempRectF;
+
+ info.getBoundsInScreen(boundInScreen);
+ transformedBounds.set(boundInScreen);
+
+ final Matrix transformMatrix = new Matrix();
+ transformMatrix.setValues(matrixValues);
+ final float applicationScale = mViewRootImpl.mAttachInfo.mApplicationScale;
+ if (applicationScale != 1f) {
+ transformMatrix.preScale(applicationScale, applicationScale);
+ }
+ // Transform the bounds from application screen coordinates to global window coordinates.
+ // For the embedded node, the bounds we get is already in window coordinates, so we don't
+ // need to do it.
+ if (mViewRootImpl.mAttachInfo.mWindowMatrixInEmbeddedHierarchy == null) {
+ transformMatrix.preTranslate(-mViewRootImpl.mAttachInfo.mWindowLeft,
+ -mViewRootImpl.mAttachInfo.mWindowTop);
+ }
+
+ if (transformMatrix.isIdentity()) {
+ return;
+ }
+ transformMatrix.mapRect(transformedBounds);
+ // Offset 0.5f to round after casting.
+ transformedBounds.offset(0.5f, 0.5f);
+ boundInScreen.set((int) (transformedBounds.left), (int) transformedBounds.top,
+ (int) transformedBounds.right, (int) transformedBounds.bottom);
+ info.setBoundsInScreen(boundInScreen);
+ // Scale text locations if they are present
+ if (info.hasExtras()) {
+ final Bundle extras = info.getExtras();
+ final RectF[] textLocations =
+ extras.getParcelableArray(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY, RectF.class);
+ if (textLocations != null) {
+ for (int i = 0; i < textLocations.length; i++) {
+ // Unchecked cast - an app that puts other objects in this bundle with this
+ // key will crash.
+ final RectF textLocation = textLocations[i];
+ if (textLocation != null) {
+ transformMatrix.mapRect(textLocation);
+ }
+ }
+ }
+ }
+ }
+
private void updateInfosForViewportAndReturnFindNodeResult(List<AccessibilityNodeInfo> infos,
IAccessibilityInteractionConnectionCallback callback, int interactionId,
- MagnificationSpec spec, Region interactiveRegion) {
+ MagnificationSpec spec, float[] matrixValues, Region interactiveRegion) {
if (infos != null) {
- updateInfosForViewPort(infos, spec, interactiveRegion);
+ updateInfosForViewPort(infos, spec, matrixValues, interactiveRegion);
}
returnFindNodesResult(infos, callback, interactionId);
}
@@ -1141,8 +1179,8 @@
private void updateInfoForViewportAndReturnFindNodeResult(AccessibilityNodeInfo info,
IAccessibilityInteractionConnectionCallback callback, int interactionId,
- MagnificationSpec spec, Region interactiveRegion) {
- updateInfoForViewPort(info, spec, interactiveRegion);
+ MagnificationSpec spec, float[] matrixValues, Region interactiveRegion) {
+ updateInfoForViewPort(info, spec, matrixValues, interactiveRegion);
returnFindNodeResult(info, callback, interactionId);
}
diff --git a/core/java/android/view/RemoteAccessibilityController.java b/core/java/android/view/RemoteAccessibilityController.java
index bc0fab1b..8855fb5 100644
--- a/core/java/android/view/RemoteAccessibilityController.java
+++ b/core/java/android/view/RemoteAccessibilityController.java
@@ -28,7 +28,7 @@
private static final String TAG = "RemoteAccessibilityController";
private int mHostId;
private RemoteAccessibilityEmbeddedConnection mConnectionWrapper;
- private Matrix mScreenMatrixForEmbeddedHierarchy = new Matrix();
+ private Matrix mWindowMatrixForEmbeddedHierarchy = new Matrix();
private final float[] mMatrixValues = new float[9];
private View mHostView;
@@ -140,9 +140,9 @@
return mConnectionWrapper;
}
- void setScreenMatrix(Matrix m) {
- // If the screen matrix is identity or doesn't change, do nothing.
- if (m.isIdentity() || m.equals(mScreenMatrixForEmbeddedHierarchy)) {
+ void setWindowMatrix(Matrix m) {
+ // If the window matrix is identity or doesn't change, do nothing.
+ if (m.isIdentity() || m.equals(mWindowMatrixForEmbeddedHierarchy)) {
return;
}
@@ -153,8 +153,8 @@
return;
}
m.getValues(mMatrixValues);
- wrapper.getConnection().setScreenMatrix(mMatrixValues);
- mScreenMatrixForEmbeddedHierarchy.set(m);
+ wrapper.getConnection().setWindowMatrix(mMatrixValues);
+ mWindowMatrixForEmbeddedHierarchy.set(m);
} catch (RemoteException e) {
Log.d(TAG, "Error while setScreenMatrix " + e);
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index ed57136..017f2e4 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -1781,11 +1781,16 @@
return;
}
getBoundsOnScreen(mTmpRect);
+
+ // To compute the node bounds of the node on the embedded window,
+ // apply this matrix to get the bounds in host window-relative coordinates,
+ // then using the global transform to get the actual bounds on screen.
+ mTmpRect.offset(-mAttachInfo.mWindowLeft, -mAttachInfo.mWindowTop);
mTmpMatrix.reset();
mTmpMatrix.setTranslate(mTmpRect.left, mTmpRect.top);
mTmpMatrix.postScale(mScreenRect.width() / (float) mSurfaceWidth,
mScreenRect.height() / (float) mSurfaceHeight);
- mRemoteAccessibilityController.setScreenMatrix(mTmpMatrix);
+ mRemoteAccessibilityController.setWindowMatrix(mTmpMatrix);
}
@Override
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 8b9a86b9..569461e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -29938,10 +29938,10 @@
boolean mHandlingPointerEvent;
/**
- * The screen matrix of this view when it's on a {@link SurfaceControlViewHost} that is
+ * The window matrix of this view when it's on a {@link SurfaceControlViewHost} that is
* embedded within a SurfaceView.
*/
- Matrix mScreenMatrixInEmbeddedHierarchy;
+ Matrix mWindowMatrixInEmbeddedHierarchy;
/**
* Global to the view hierarchy used as a temporary for dealing with
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 35b2d58..92289d9 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -10250,13 +10250,14 @@
public void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId,
Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec, Bundle args) {
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec, float[] matrix,
+ Bundle args) {
ViewRootImpl viewRootImpl = mViewRootImpl.get();
if (viewRootImpl != null && viewRootImpl.mView != null) {
viewRootImpl.getAccessibilityInteractionController()
.findAccessibilityNodeInfoByAccessibilityIdClientThread(accessibilityNodeId,
interactiveRegion, interactionId, callback, flags, interrogatingPid,
- interrogatingTid, spec, args);
+ interrogatingTid, spec, matrix, args);
} else {
// We cannot make the call and notify the caller so it does not wait.
try {
@@ -10291,13 +10292,14 @@
public void findAccessibilityNodeInfosByViewId(long accessibilityNodeId,
String viewId, Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrix) {
ViewRootImpl viewRootImpl = mViewRootImpl.get();
if (viewRootImpl != null && viewRootImpl.mView != null) {
viewRootImpl.getAccessibilityInteractionController()
.findAccessibilityNodeInfosByViewIdClientThread(accessibilityNodeId,
viewId, interactiveRegion, interactionId, callback, flags,
- interrogatingPid, interrogatingTid, spec);
+ interrogatingPid, interrogatingTid, spec, matrix);
} else {
// We cannot make the call and notify the caller so it does not wait.
try {
@@ -10312,13 +10314,14 @@
public void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text,
Region interactiveRegion, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrix) {
ViewRootImpl viewRootImpl = mViewRootImpl.get();
if (viewRootImpl != null && viewRootImpl.mView != null) {
viewRootImpl.getAccessibilityInteractionController()
.findAccessibilityNodeInfosByTextClientThread(accessibilityNodeId, text,
interactiveRegion, interactionId, callback, flags, interrogatingPid,
- interrogatingTid, spec);
+ interrogatingTid, spec, matrix);
} else {
// We cannot make the call and notify the caller so it does not wait.
try {
@@ -10332,13 +10335,14 @@
@Override
public void findFocus(long accessibilityNodeId, int focusType, Region interactiveRegion,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrix) {
ViewRootImpl viewRootImpl = mViewRootImpl.get();
if (viewRootImpl != null && viewRootImpl.mView != null) {
viewRootImpl.getAccessibilityInteractionController()
.findFocusClientThread(accessibilityNodeId, focusType, interactiveRegion,
interactionId, callback, flags, interrogatingPid, interrogatingTid,
- spec);
+ spec, matrix);
} else {
// We cannot make the call and notify the caller so it does not wait.
try {
@@ -10352,13 +10356,14 @@
@Override
public void focusSearch(long accessibilityNodeId, int direction, Region interactiveRegion,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec) {
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrix) {
ViewRootImpl viewRootImpl = mViewRootImpl.get();
if (viewRootImpl != null && viewRootImpl.mView != null) {
viewRootImpl.getAccessibilityInteractionController()
.focusSearchClientThread(accessibilityNodeId, direction, interactiveRegion,
interactionId, callback, flags, interrogatingPid, interrogatingTid,
- spec);
+ spec, matrix);
} else {
// We cannot make the call and notify the caller so it does not wait.
try {
diff --git a/core/java/android/view/WindowInfo.java b/core/java/android/view/WindowInfo.java
index 1edbbba..a5b8720 100644
--- a/core/java/android/view/WindowInfo.java
+++ b/core/java/android/view/WindowInfo.java
@@ -17,6 +17,7 @@
package android.view;
import android.app.ActivityTaskManager;
+import android.graphics.Matrix;
import android.graphics.Region;
import android.os.IBinder;
import android.os.Parcel;
@@ -53,6 +54,11 @@
public boolean hasFlagWatchOutsideTouch;
public int displayId = Display.INVALID_DISPLAY;
public int taskId = ActivityTaskManager.INVALID_TASK_ID;
+ // The matrix applied to the bounds in window coordinate to get the corresponding values in
+ // screen coordinates.
+ public float[] mTransformMatrix = new float[9];
+
+ public MagnificationSpec mMagnificationSpec = new MagnificationSpec();
private WindowInfo() {
/* do nothing - hide constructor */
@@ -81,6 +87,9 @@
window.accessibilityIdOfAnchor = other.accessibilityIdOfAnchor;
window.inPictureInPicture = other.inPictureInPicture;
window.hasFlagWatchOutsideTouch = other.hasFlagWatchOutsideTouch;
+ for (int i = 0; i < window.mTransformMatrix.length; i++) {
+ window.mTransformMatrix[i] = other.mTransformMatrix[i];
+ }
if (other.childTokens != null && !other.childTokens.isEmpty()) {
if (window.childTokens == null) {
@@ -89,7 +98,7 @@
window.childTokens.addAll(other.childTokens);
}
}
-
+ window.mMagnificationSpec.setTo(other.mMagnificationSpec);
return window;
}
@@ -118,6 +127,7 @@
parcel.writeLong(accessibilityIdOfAnchor);
parcel.writeInt(inPictureInPicture ? 1 : 0);
parcel.writeInt(hasFlagWatchOutsideTouch ? 1 : 0);
+ parcel.writeFloatArray(mTransformMatrix);
if (childTokens != null && !childTokens.isEmpty()) {
parcel.writeInt(1);
@@ -125,6 +135,7 @@
} else {
parcel.writeInt(0);
}
+ mMagnificationSpec.writeToParcel(parcel, flags);
}
@Override
@@ -145,6 +156,10 @@
builder.append(", accessibility anchor=").append(accessibilityIdOfAnchor);
builder.append(", pictureInPicture=").append(inPictureInPicture);
builder.append(", watchOutsideTouch=").append(hasFlagWatchOutsideTouch);
+ Matrix matrix = new Matrix();
+ matrix.setValues(mTransformMatrix);
+ builder.append(", mTransformMatrix=").append(matrix);
+ builder.append(", mMagnificationSpec=").append(mMagnificationSpec);
builder.append(']');
return builder.toString();
}
@@ -163,7 +178,7 @@
accessibilityIdOfAnchor = parcel.readLong();
inPictureInPicture = (parcel.readInt() == 1);
hasFlagWatchOutsideTouch = (parcel.readInt() == 1);
-
+ parcel.readFloatArray(mTransformMatrix);
final boolean hasChildren = (parcel.readInt() == 1);
if (hasChildren) {
if (childTokens == null) {
@@ -171,6 +186,7 @@
}
parcel.readBinderList(childTokens);
}
+ mMagnificationSpec = MagnificationSpec.CREATOR.createFromParcel(parcel);
}
private void clear() {
@@ -188,6 +204,10 @@
}
inPictureInPicture = false;
hasFlagWatchOutsideTouch = false;
+ for (int i = 0; i < mTransformMatrix.length; i++) {
+ mTransformMatrix[i] = 0;
+ }
+ mMagnificationSpec.clear();
}
public static final @android.annotation.NonNull Parcelable.Creator<WindowInfo> CREATOR =
diff --git a/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl b/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl
index 707099e..75d81ed 100644
--- a/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityEmbeddedConnection.aidl
@@ -28,5 +28,5 @@
void disassociateEmbeddedHierarchy();
- oneway void setScreenMatrix(in float[] matrixValues);
+ oneway void setWindowMatrix(in float[] matrixValues);
}
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
index deb0d2a..472a363 100644
--- a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
@@ -34,23 +34,24 @@
void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId, in Region bounds,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
int interrogatingPid, long interrogatingTid, in MagnificationSpec spec,
- in Bundle arguments);
+ in float[] matrixValues, in Bundle arguments);
void findAccessibilityNodeInfosByViewId(long accessibilityNodeId, String viewId,
in Region bounds, int interactionId, IAccessibilityInteractionConnectionCallback callback,
- int flags, int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);
+ int flags, int interrogatingPid, long interrogatingTid, in MagnificationSpec spec,
+ in float[] matrix);
void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text, in Region bounds,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, in MagnificationSpec spec);
+ int interrogatingPid, long interrogatingTid, in MagnificationSpec spec, in float[] matrixValues);
void findFocus(long accessibilityNodeId, int focusType, in Region bounds, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, in MagnificationSpec spec);
+ long interrogatingTid, in MagnificationSpec spec, in float[] matrixValues);
void focusSearch(long accessibilityNodeId, int direction, in Region bounds, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
- long interrogatingTid, in MagnificationSpec spec);
+ long interrogatingTid, in MagnificationSpec spec, in float[] matrixValues);
void performAccessibilityAction(long accessibilityNodeId, int action, in Bundle arguments,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
diff --git a/core/tests/coretests/src/android/view/WindowInfoTest.java b/core/tests/coretests/src/android/view/WindowInfoTest.java
index 0a99b08..afc2c00 100644
--- a/core/tests/coretests/src/android/view/WindowInfoTest.java
+++ b/core/tests/coretests/src/android/view/WindowInfoTest.java
@@ -26,6 +26,7 @@
import static org.mockito.Mockito.mock;
import android.app.ActivityTaskManager;
+import android.graphics.Matrix;
import android.os.IBinder;
import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
@@ -38,6 +39,7 @@
import org.junit.runner.RunWith;
import java.util.ArrayList;
+import java.util.Arrays;
/**
* Class for testing {@link WindowInfo}.
@@ -94,6 +96,8 @@
assertFalse(w.inPictureInPicture);
assertFalse(w.hasFlagWatchOutsideTouch);
assertTrue(w.regionInScreen.isEmpty());
+ assertEquals(w.mTransformMatrix.length, 9);
+ assertTrue(w.mMagnificationSpec.isNop());
}
@SmallTest
@@ -117,6 +121,8 @@
equality &= w1.parentToken == w2.parentToken;
equality &= w1.activityToken == w2.activityToken;
equality &= w1.regionInScreen.equals(w2.regionInScreen);
+ equality &= w1.mMagnificationSpec.equals(w2.mMagnificationSpec);
+ equality &= Arrays.equals(w1.mTransformMatrix, w2.mTransformMatrix);
return equality;
}
@@ -136,5 +142,9 @@
windowInfo.inPictureInPicture = true;
windowInfo.hasFlagWatchOutsideTouch = true;
windowInfo.regionInScreen.set(0, 0, 1080, 1080);
+ windowInfo.mMagnificationSpec.scale = 2.0f;
+ windowInfo.mMagnificationSpec.offsetX = 100f;
+ windowInfo.mMagnificationSpec.offsetY = 200f;
+ Matrix.IDENTITY_MATRIX.getValues(windowInfo.mTransformMatrix);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java
index e28c58c..9754a03 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java
@@ -37,7 +37,6 @@
import android.graphics.Region.Op;
import android.hardware.display.DisplayManager;
import android.os.Bundle;
-import android.os.RemoteException;
import android.util.AttributeSet;
import android.util.Slog;
import android.view.Choreographer;
@@ -241,22 +240,6 @@
}
};
- private Runnable mUpdateEmbeddedMatrix = () -> {
- if (getViewRootImpl() == null) {
- return;
- }
- if (isHorizontalDivision()) {
- mTmpMatrix.setTranslate(0, mDividerPositionY - mDividerInsets);
- } else {
- mTmpMatrix.setTranslate(mDividerPositionX - mDividerInsets, 0);
- }
- mTmpMatrix.getValues(mTmpValues);
- try {
- getViewRootImpl().getAccessibilityEmbeddedConnection().setScreenMatrix(mTmpValues);
- } catch (RemoteException e) {
- }
- };
-
public DividerView(Context context) {
this(context, null);
}
@@ -1045,10 +1028,6 @@
t.setPosition(dividerCtrl, mDividerPositionX - mDividerInsets, 0);
}
}
- if (getViewRootImpl() != null) {
- getHandler().removeCallbacks(mUpdateEmbeddedMatrix);
- getHandler().post(mUpdateEmbeddedMatrix);
- }
}
void setResizeDimLayer(Transaction t, boolean primary, float alpha) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
index 5e4c12e..f73b81e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
@@ -135,19 +135,6 @@
}
};
- private final float[] mTmpValues = new float[9];
- private final Runnable mUpdateEmbeddedMatrix = () -> {
- if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) {
- return;
- }
- mMoveTransform.getValues(mTmpValues);
- try {
- mPipMenuView.getViewRootImpl().getAccessibilityEmbeddedConnection()
- .setScreenMatrix(mTmpValues);
- } catch (RemoteException e) {
- }
- };
-
public PhonePipMenuController(Context context, PipBoundsState pipBoundsState,
PipMediaController mediaController, SystemWindows systemWindows,
Optional<SplitScreenController> splitScreenOptional,
@@ -348,11 +335,6 @@
} else {
mApplier.scheduleApply(params);
}
-
- if (mPipMenuView.getViewRootImpl() != null) {
- mPipMenuView.getHandler().removeCallbacks(mUpdateEmbeddedMatrix);
- mPipMenuView.getHandler().post(mUpdateEmbeddedMatrix);
- }
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java
index 69ae45d..7365b95 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java
@@ -285,7 +285,7 @@
Region bounds, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags,
int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
- Bundle arguments) throws RemoteException {
+ float[] matrixValues, Bundle arguments) throws RemoteException {
mMainExcutor.execute(() -> {
PipAccessibilityInteractionConnection.this
.findAccessibilityNodeInfoByAccessibilityId(accessibilityNodeId, bounds,
@@ -298,7 +298,8 @@
public void findAccessibilityNodeInfosByViewId(long accessibilityNodeId, String viewId,
Region bounds, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec)
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrixValues)
throws RemoteException {
mMainExcutor.execute(() -> {
PipAccessibilityInteractionConnection.this.findAccessibilityNodeInfosByViewId(
@@ -311,7 +312,8 @@
public void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text,
Region bounds, int interactionId,
IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec)
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrixValues)
throws RemoteException {
mMainExcutor.execute(() -> {
PipAccessibilityInteractionConnection.this.findAccessibilityNodeInfosByText(
@@ -323,7 +325,8 @@
@Override
public void findFocus(long accessibilityNodeId, int focusType, Region bounds,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec)
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrixValues)
throws RemoteException {
mMainExcutor.execute(() -> {
PipAccessibilityInteractionConnection.this.findFocus(accessibilityNodeId, focusType,
@@ -335,7 +338,8 @@
@Override
public void focusSearch(long accessibilityNodeId, int direction, Region bounds,
int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
- int interrogatingPid, long interrogatingTid, MagnificationSpec spec)
+ int interrogatingPid, long interrogatingTid, MagnificationSpec spec,
+ float[] matrixValues)
throws RemoteException {
mMainExcutor.execute(() -> {
PipAccessibilityInteractionConnection.this.focusSearch(accessibilityNodeId,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
index 7b8dcf7..2d67254 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
@@ -30,7 +30,6 @@
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Handler;
-import android.os.RemoteException;
import android.view.LayoutInflater;
import android.view.SurfaceControl;
import android.view.SyncRtSurfaceTransactionApplier;
@@ -88,19 +87,6 @@
RectF mTmpDestinationRectF = new RectF();
Matrix mMoveTransform = new Matrix();
- private final float[] mTmpValues = new float[9];
- private final Runnable mUpdateEmbeddedMatrix = () -> {
- if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) {
- return;
- }
- mMoveTransform.getValues(mTmpValues);
- try {
- mPipMenuView.getViewRootImpl().getAccessibilityEmbeddedConnection()
- .setScreenMatrix(mTmpValues);
- } catch (RemoteException e) {
- if (DEBUG) e.printStackTrace();
- }
- };
private final Runnable mCloseEduTextRunnable = this::closeEduText;
public TvPipMenuController(Context context, TvPipBoundsState tvPipBoundsState,
@@ -525,11 +511,6 @@
mApplier.scheduleApply(frontParams);
}
- if (mPipMenuView.getViewRootImpl() != null) {
- mPipMenuView.getHandler().removeCallbacks(mUpdateEmbeddedMatrix);
- mPipMenuView.getHandler().post(mUpdateEmbeddedMatrix);
- }
-
updateMenuBounds(pipDestBounds);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index 5ef1008..562d11a 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -69,6 +69,7 @@
import android.os.SystemClock;
import android.os.Trace;
import android.provider.Settings;
+import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
@@ -218,12 +219,6 @@
@NonNull KeyEventDispatcher getKeyEventDispatcher();
/**
- * @param windowId The id of the window of interest
- * @return The magnification spec for the window, or {@code null} if none is available
- */
- @Nullable MagnificationSpec getCompatibleMagnificationSpecLocked(int windowId);
-
- /**
* @param displayId The display id.
* @return The current injector of motion events used on the display, if one exists.
*/
@@ -557,7 +552,8 @@
final int resolvedWindowId;
RemoteAccessibilityConnection connection;
Region partialInteractiveRegion = Region.obtain();
- MagnificationSpec spec;
+ final MagnificationSpec spec;
+ final float[] transformMatrix;
synchronized (mLock) {
mUsesAccessibilityCache = true;
if (!hasRightsToCurrentUserLocked()) {
@@ -581,7 +577,10 @@
partialInteractiveRegion.recycle();
partialInteractiveRegion = null;
}
- spec = mSystemSupport.getCompatibleMagnificationSpecLocked(resolvedWindowId);
+ final Pair<float[], MagnificationSpec> transformMatrixAndSpec =
+ getTransformMatrixAndSpecLocked(resolvedWindowId);
+ transformMatrix = transformMatrixAndSpec.first;
+ spec = transformMatrixAndSpec.second;
}
if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
return null;
@@ -594,12 +593,12 @@
logTraceIntConn("findAccessibilityNodeInfosByViewId",
accessibilityNodeId + ";" + viewIdResName + ";" + partialInteractiveRegion + ";"
+ interactionId + ";" + callback + ";" + mFetchFlags + ";" + interrogatingPid
- + ";" + interrogatingTid + ";" + spec);
+ + ";" + interrogatingTid + ";" + spec + ";" + Arrays.toString(transformMatrix));
}
try {
connection.getRemote().findAccessibilityNodeInfosByViewId(accessibilityNodeId,
viewIdResName, partialInteractiveRegion, interactionId, callback, mFetchFlags,
- interrogatingPid, interrogatingTid, spec);
+ interrogatingPid, interrogatingTid, spec, transformMatrix);
return mSecurityPolicy.computeValidReportedPackages(
connection.getPackageName(), connection.getUid());
} catch (RemoteException re) {
@@ -630,7 +629,8 @@
final int resolvedWindowId;
RemoteAccessibilityConnection connection;
Region partialInteractiveRegion = Region.obtain();
- MagnificationSpec spec;
+ final MagnificationSpec spec;
+ final float [] transformMatrix;
synchronized (mLock) {
mUsesAccessibilityCache = true;
if (!hasRightsToCurrentUserLocked()) {
@@ -654,7 +654,10 @@
partialInteractiveRegion.recycle();
partialInteractiveRegion = null;
}
- spec = mSystemSupport.getCompatibleMagnificationSpecLocked(resolvedWindowId);
+ final Pair<float[], MagnificationSpec> transformMatrixAndSpec =
+ getTransformMatrixAndSpecLocked(resolvedWindowId);
+ transformMatrix = transformMatrixAndSpec.first;
+ spec = transformMatrixAndSpec.second;
}
if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
return null;
@@ -667,12 +670,12 @@
logTraceIntConn("findAccessibilityNodeInfosByText",
accessibilityNodeId + ";" + text + ";" + partialInteractiveRegion + ";"
+ interactionId + ";" + callback + ";" + mFetchFlags + ";" + interrogatingPid
- + ";" + interrogatingTid + ";" + spec);
+ + ";" + interrogatingTid + ";" + spec + ";" + Arrays.toString(transformMatrix));
}
try {
connection.getRemote().findAccessibilityNodeInfosByText(accessibilityNodeId,
text, partialInteractiveRegion, interactionId, callback, mFetchFlags,
- interrogatingPid, interrogatingTid, spec);
+ interrogatingPid, interrogatingTid, spec, transformMatrix);
return mSecurityPolicy.computeValidReportedPackages(
connection.getPackageName(), connection.getUid());
} catch (RemoteException re) {
@@ -704,7 +707,8 @@
final int resolvedWindowId;
RemoteAccessibilityConnection connection;
Region partialInteractiveRegion = Region.obtain();
- MagnificationSpec spec;
+ final MagnificationSpec spec;
+ final float[] transformMatrix;
synchronized (mLock) {
mUsesAccessibilityCache = true;
if (!hasRightsToCurrentUserLocked()) {
@@ -728,7 +732,10 @@
partialInteractiveRegion.recycle();
partialInteractiveRegion = null;
}
- spec = mSystemSupport.getCompatibleMagnificationSpecLocked(resolvedWindowId);
+ final Pair<float[], MagnificationSpec> transformMatrixAndSpec =
+ getTransformMatrixAndSpecLocked(resolvedWindowId);
+ transformMatrix = transformMatrixAndSpec.first;
+ spec = transformMatrixAndSpec.second;
}
if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
return null;
@@ -741,12 +748,14 @@
logTraceIntConn("findAccessibilityNodeInfoByAccessibilityId",
accessibilityNodeId + ";" + partialInteractiveRegion + ";" + interactionId + ";"
+ callback + ";" + (mFetchFlags | flags) + ";" + interrogatingPid + ";"
- + interrogatingTid + ";" + spec + ";" + arguments);
+ + interrogatingTid + ";" + spec + ";" + Arrays.toString(transformMatrix)
+ + ";" + arguments);
}
try {
connection.getRemote().findAccessibilityNodeInfoByAccessibilityId(
accessibilityNodeId, partialInteractiveRegion, interactionId, callback,
- mFetchFlags | flags, interrogatingPid, interrogatingTid, spec, arguments);
+ mFetchFlags | flags, interrogatingPid, interrogatingTid, spec, transformMatrix,
+ arguments);
return mSecurityPolicy.computeValidReportedPackages(
connection.getPackageName(), connection.getUid());
} catch (RemoteException re) {
@@ -778,7 +787,8 @@
final int resolvedWindowId;
RemoteAccessibilityConnection connection;
Region partialInteractiveRegion = Region.obtain();
- MagnificationSpec spec;
+ final MagnificationSpec spec;
+ final float[] transformMatrix;
synchronized (mLock) {
if (!hasRightsToCurrentUserLocked()) {
return null;
@@ -802,7 +812,10 @@
partialInteractiveRegion.recycle();
partialInteractiveRegion = null;
}
- spec = mSystemSupport.getCompatibleMagnificationSpecLocked(resolvedWindowId);
+ final Pair<float[], MagnificationSpec> transformMatrixAndSpec =
+ getTransformMatrixAndSpecLocked(resolvedWindowId);
+ transformMatrix = transformMatrixAndSpec.first;
+ spec = transformMatrixAndSpec.second;
}
if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
return null;
@@ -815,12 +828,13 @@
logTraceIntConn("findFocus",
accessibilityNodeId + ";" + focusType + ";" + partialInteractiveRegion + ";"
+ interactionId + ";" + callback + ";" + mFetchFlags + ";" + interrogatingPid
- + ";" + interrogatingTid + ";" + spec);
+ + ";" + interrogatingTid + ";" + spec + ";"
+ + Arrays.toString(transformMatrix));
}
try {
connection.getRemote().findFocus(accessibilityNodeId, focusType,
partialInteractiveRegion, interactionId, callback, mFetchFlags,
- interrogatingPid, interrogatingTid, spec);
+ interrogatingPid, interrogatingTid, spec, transformMatrix);
return mSecurityPolicy.computeValidReportedPackages(
connection.getPackageName(), connection.getUid());
} catch (RemoteException re) {
@@ -852,7 +866,8 @@
final int resolvedWindowId;
RemoteAccessibilityConnection connection;
Region partialInteractiveRegion = Region.obtain();
- MagnificationSpec spec;
+ final MagnificationSpec spec;
+ final float[] transformMatrix;
synchronized (mLock) {
if (!hasRightsToCurrentUserLocked()) {
return null;
@@ -875,7 +890,11 @@
partialInteractiveRegion.recycle();
partialInteractiveRegion = null;
}
- spec = mSystemSupport.getCompatibleMagnificationSpecLocked(resolvedWindowId);
+
+ final Pair<float[], MagnificationSpec> transformMatrixAndSpec =
+ getTransformMatrixAndSpecLocked(resolvedWindowId);
+ transformMatrix = transformMatrixAndSpec.first;
+ spec = transformMatrixAndSpec.second;
}
if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
return null;
@@ -888,12 +907,13 @@
logTraceIntConn("focusSearch",
accessibilityNodeId + ";" + direction + ";" + partialInteractiveRegion
+ ";" + interactionId + ";" + callback + ";" + mFetchFlags + ";"
- + interrogatingPid + ";" + interrogatingTid + ";" + spec);
+ + interrogatingPid + ";" + interrogatingTid + ";" + spec + ";"
+ + Arrays.toString(transformMatrix));
}
try {
connection.getRemote().focusSearch(accessibilityNodeId, direction,
partialInteractiveRegion, interactionId, callback, mFetchFlags,
- interrogatingPid, interrogatingTid, spec);
+ interrogatingPid, interrogatingTid, spec, transformMatrix);
return mSecurityPolicy.computeValidReportedPackages(
connection.getPackageName(), connection.getUid());
} catch (RemoteException re) {
@@ -1652,6 +1672,23 @@
mInvocationHandler.startInputLocked(startInputToken, inputContext, editorInfo, restarting);
}
+
+
+ @Nullable
+ Pair<float[], MagnificationSpec> getTransformMatrixAndSpecLocked(int resolvedWindowId) {
+ final WindowInfo windowInfo =
+ mA11yWindowManager.findWindowInfoByIdLocked(resolvedWindowId);
+ if (windowInfo == null) {
+ Slog.w(LOG_TAG, "getTransformMatrixAndSpec, windowInfo is null window id = "
+ + resolvedWindowId);
+ return new Pair<>(null, null);
+ }
+
+ final MagnificationSpec spec = new MagnificationSpec();
+ spec.setTo(windowInfo.mMagnificationSpec);
+ return new Pair<>(windowInfo.mTransformMatrix, spec);
+ }
+
/**
* Called by the invocation handler to notify the service that the
* state of magnification has changed.
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index e3226c7..ac0c051 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -106,6 +106,7 @@
import android.view.KeyEvent;
import android.view.MagnificationSpec;
import android.view.MotionEvent;
+import android.view.WindowInfo;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityInteractionClient;
@@ -3045,22 +3046,6 @@
userState.setInteractiveUiTimeoutLocked(newInteractiveUiTimeout);
}
- @GuardedBy("mLock")
- @Override
- public MagnificationSpec getCompatibleMagnificationSpecLocked(int windowId) {
- IBinder windowToken = mA11yWindowManager.getWindowTokenForUserAndWindowIdLocked(
- mCurrentUserId, windowId);
- if (windowToken != null) {
- if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_WINDOW_MANAGER_INTERNAL)) {
- mTraceManager.logTrace(LOG_TAG + ".getCompatibleMagnificationSpecForWindow",
- FLAGS_WINDOW_MANAGER_INTERNAL, "windowToken=" + windowToken);
- }
-
- return mWindowManagerService.getCompatibleMagnificationSpecForWindow(windowToken);
- }
- return null;
- }
-
@Override
public KeyEventDispatcher getKeyEventDispatcher() {
if (mKeyEventDispatcher == null) {
@@ -3741,7 +3726,14 @@
boundsInScreenBeforeMagnification.centerY());
// Invert magnification if needed.
- MagnificationSpec spec = getCompatibleMagnificationSpecLocked(focus.getWindowId());
+ final WindowInfo windowInfo = mA11yWindowManager.findWindowInfoByIdLocked(
+ focus.getWindowId());
+ MagnificationSpec spec = null;
+ if (windowInfo != null) {
+ spec = new MagnificationSpec();
+ spec.setTo(windowInfo.mMagnificationSpec);
+ }
+
if (spec != null && !spec.isNop()) {
boundsInScreenBeforeMagnification.offset((int) -spec.offsetX,
(int) -spec.offsetY);
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
index aba32ec..e30639c 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
@@ -52,6 +52,7 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -478,6 +479,9 @@
if (oldWindow.taskId != newWindow.taskId) {
return true;
}
+ if (!Arrays.equals(oldWindow.mTransformMatrix, newWindow.mTransformMatrix)) {
+ return true;
+ }
return false;
}
@@ -800,14 +804,24 @@
pw.append(',');
pw.println();
}
- pw.append("Window[");
+ pw.append("A11yWindow[");
AccessibilityWindowInfo window = mWindows.get(j);
pw.append(window.toString());
pw.append(']');
+ pw.println();
+ final WindowInfo windowInfo = findWindowInfoByIdLocked(window.getId());
+ if (windowInfo != null) {
+ pw.append("WindowInfo[");
+ pw.append(windowInfo.toString());
+ pw.append("]");
+ pw.println();
+ }
+
}
pw.println();
}
}
+
}
/**
* Interface to send {@link AccessibilityEvent}.
diff --git a/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java b/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java
index 6828dd9..6958b66 100644
--- a/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java
+++ b/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java
@@ -83,7 +83,7 @@
mConnectionWithReplacementActions.findAccessibilityNodeInfoByAccessibilityId(
AccessibilityNodeInfo.ROOT_NODE_ID, null,
mNodeWithReplacementActionsInteractionId, this, 0,
- interrogatingPid, interrogatingTid, null, null);
+ interrogatingPid, interrogatingTid, null, null, null);
} catch (RemoteException re) {
if (DEBUG) {
Slog.e(LOG_TAG, "Error calling findAccessibilityNodeInfoByAccessibilityId()");
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index c52a4e4..63619e5 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -446,20 +446,6 @@
// Not relevant for the window observer.
}
- MagnificationSpec getMagnificationSpecForWindow(WindowState windowState) {
- if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK)) {
- mAccessibilityTracing.logTrace(TAG + ".getMagnificationSpecForWindow",
- FLAGS_MAGNIFICATION_CALLBACK,
- "windowState={" + windowState + "}");
- }
- final int displayId = windowState.getDisplayId();
- final DisplayMagnifier displayMagnifier = mDisplayMagnifiers.get(displayId);
- if (displayMagnifier != null) {
- return displayMagnifier.getMagnificationSpecForWindow(windowState);
- }
- return null;
- }
-
boolean hasCallbacks() {
if (mAccessibilityTracing.isTracingEnabled(FLAGS_MAGNIFICATION_CALLBACK
| FLAGS_WINDOWS_FOR_ACCESSIBILITY_CALLBACK)) {
diff --git a/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java b/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java
index ca636b3..6e5011d 100644
--- a/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java
+++ b/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java
@@ -596,8 +596,6 @@
* surface flinger to the accessibility framework.
*/
public static class AccessibilityWindow {
- private static final Region TEMP_REGION = new Region();
- private static final RectF TEMP_RECTF = new RectF();
// Data
private IWindow mWindow;
private int mDisplayId;
@@ -615,15 +613,16 @@
private final Region mLetterBoxBounds = new Region();
private WindowInfo mWindowInfo;
+
/**
* Returns the instance after initializing the internal data.
* @param service The window manager service.
* @param inputWindowHandle The window from the surface flinger.
- * @param inverseMatrix The magnification spec inverse matrix.
+ * @param magnificationInverseMatrix The magnification spec inverse matrix.
*/
public static AccessibilityWindow initializeData(WindowManagerService service,
- InputWindowHandle inputWindowHandle, Matrix inverseMatrix, IBinder pipIBinder,
- Matrix displayMatrix) {
+ InputWindowHandle inputWindowHandle, Matrix magnificationInverseMatrix,
+ IBinder pipIBinder, Matrix displayMatrix) {
final IWindow window = inputWindowHandle.getWindow();
final WindowState windowState = window != null ? service.mWindowMap.get(
window.asBinder()) : null;
@@ -655,13 +654,35 @@
inputWindowHandle.frameTop, inputWindowHandle.frameRight,
inputWindowHandle.frameBottom);
getTouchableRegionInWindow(instance.mShouldMagnify, inputWindowHandle.touchableRegion,
- instance.mTouchableRegionInWindow, windowFrame, inverseMatrix, displayMatrix);
+ instance.mTouchableRegionInWindow, windowFrame, magnificationInverseMatrix,
+ displayMatrix);
getUnMagnifiedTouchableRegion(instance.mShouldMagnify,
inputWindowHandle.touchableRegion, instance.mTouchableRegionInScreen,
- inverseMatrix, displayMatrix);
+ magnificationInverseMatrix, displayMatrix);
instance.mWindowInfo = windowState != null
? windowState.getWindowInfo() : getWindowInfoForWindowlessWindows(instance);
+ // Compute the transform matrix that will transform bounds from the window
+ // coordinates to screen coordinates.
+ final Matrix inverseTransform = new Matrix();
+ inputWindowHandle.transform.invert(inverseTransform);
+ inverseTransform.postConcat(displayMatrix);
+ inverseTransform.getValues(instance.mWindowInfo.mTransformMatrix);
+
+ // Compute the magnification spec matrix.
+ final Matrix magnificationSpecMatrix = new Matrix();
+ if (instance.shouldMagnify() && magnificationInverseMatrix != null
+ && !magnificationInverseMatrix.isIdentity()) {
+ if (magnificationInverseMatrix.invert(magnificationSpecMatrix)) {
+ magnificationSpecMatrix.getValues(sTempFloats);
+ final MagnificationSpec spec = instance.mWindowInfo.mMagnificationSpec;
+ spec.scale = sTempFloats[Matrix.MSCALE_X];
+ spec.offsetX = sTempFloats[Matrix.MTRANS_X];
+ spec.offsetY = sTempFloats[Matrix.MTRANS_Y];
+ } else {
+ Slog.w(TAG, "can't find spec");
+ }
+ }
return instance;
}
@@ -779,7 +800,7 @@
// for the consistency and match developers expectation.
// So we need to make the intersection between the frame and touchable region to
// obtain the real touch region in the screen.
- Region touchRegion = TEMP_REGION;
+ Region touchRegion = new Region();
touchRegion.set(inRegion);
touchRegion.op(frame, Region.Op.INTERSECT);
@@ -807,8 +828,7 @@
forEachRect(inRegion, rect -> {
// Move to origin as all transforms are captured by the matrix.
- RectF windowFrame = TEMP_RECTF;
- windowFrame.set(rect);
+ RectF windowFrame = new RectF(rect);
displayMatrix.mapRect(windowFrame);
inverseMatrix.mapRect(windowFrame);
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index be74596..42fad6d 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -409,21 +409,6 @@
public abstract void getMagnificationRegion(int displayId, @NonNull Region magnificationRegion);
/**
- * Gets the magnification and translation applied to a window given its token.
- * Not all windows are magnified and the window manager policy determines which
- * windows are magnified. The returned result also takes into account the compat
- * scale if necessary.
- *
- * @param windowToken The window's token.
- *
- * @return The magnification spec for the window.
- *
- * @see #setMagnificationCallbacks(int, MagnificationCallbacks)
- */
- public abstract MagnificationSpec getCompatibleMagnificationSpecForWindow(
- IBinder windowToken);
-
- /**
* Sets a callback for observing which windows are touchable for the purposes
* of accessibility on specified display.
*
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index a2e0bf0..2f4dc51 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7623,29 +7623,6 @@
}
@Override
- public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) {
- synchronized (mGlobalLock) {
- WindowState windowState = mWindowMap.get(windowToken);
- if (windowState == null) {
- return null;
- }
- MagnificationSpec spec = null;
- if (mAccessibilityController.hasCallbacks()) {
- spec = mAccessibilityController.getMagnificationSpecForWindow(windowState);
- }
- if ((spec == null || spec.isNop()) && windowState.mGlobalScale == 1.0f) {
- return null;
- }
- MagnificationSpec result = new MagnificationSpec();
- if (spec != null) {
- result.setTo(spec);
- }
- result.scale *= windowState.mGlobalScale;
- return result;
- }
- }
-
- @Override
public boolean setMagnificationCallbacks(int displayId,
@Nullable MagnificationCallbacks callbacks) {
synchronized (mGlobalLock) {
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java
index 97ebdd4..08df438 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AbstractAccessibilityServiceConnectionTest.java
@@ -58,6 +58,7 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -435,7 +436,7 @@
VIEWID_RESOURCE_NAME, INTERACTION_ID, mMockCallback, TID);
verify(mMockIA11yInteractionConnection).findAccessibilityNodeInfosByViewId(
eq(ROOT_NODE_ID), eq(VIEWID_RESOURCE_NAME), any(), eq(INTERACTION_ID),
- captor.capture(), anyInt(), eq(PID), eq(TID), any());
+ captor.capture(), anyInt(), eq(PID), eq(TID), any(), nullable(float[].class));
verify(mMockSecurityPolicy).computeValidReportedPackages(any(), anyInt());
verifyReplaceActions(captor.getValue());
}
@@ -449,7 +450,7 @@
VIEW_TEXT, INTERACTION_ID, mMockCallback, TID);
verify(mMockIA11yInteractionConnection).findAccessibilityNodeInfosByText(
eq(ROOT_NODE_ID), eq(VIEW_TEXT), any(), eq(INTERACTION_ID),
- captor.capture(), anyInt(), eq(PID), eq(TID), any());
+ captor.capture(), anyInt(), eq(PID), eq(TID), any(), nullable(float[].class));
verify(mMockSecurityPolicy).computeValidReportedPackages(any(), anyInt());
verifyReplaceActions(captor.getValue());
}
@@ -463,7 +464,7 @@
INTERACTION_ID, mMockCallback, 0, TID, null);
verify(mMockIA11yInteractionConnection).findAccessibilityNodeInfoByAccessibilityId(
eq(ROOT_NODE_ID), any(), eq(INTERACTION_ID), captor.capture(), anyInt(),
- eq(PID), eq(TID), any(), any());
+ eq(PID), eq(TID), any(), nullable(float[].class), any());
verify(mMockSecurityPolicy).computeValidReportedPackages(any(), anyInt());
verifyReplaceActions(captor.getValue());
}
@@ -476,7 +477,8 @@
mServiceConnection.findFocus(PIP_WINDOWID, ROOT_NODE_ID, FOCUS_INPUT, INTERACTION_ID,
mMockCallback, TID);
verify(mMockIA11yInteractionConnection).findFocus(eq(ROOT_NODE_ID), eq(FOCUS_INPUT),
- any(), eq(INTERACTION_ID), captor.capture(), anyInt(), eq(PID), eq(TID), any());
+ any(), eq(INTERACTION_ID), captor.capture(), anyInt(), eq(PID), eq(TID), any(),
+ nullable(float[].class));
verify(mMockSecurityPolicy).computeValidReportedPackages(any(), anyInt());
verifyReplaceActions(captor.getValue());
}
@@ -489,7 +491,8 @@
mServiceConnection.focusSearch(PIP_WINDOWID, ROOT_NODE_ID, FOCUS_DOWN, INTERACTION_ID,
mMockCallback, TID);
verify(mMockIA11yInteractionConnection).focusSearch(eq(ROOT_NODE_ID), eq(FOCUS_DOWN),
- any(), eq(INTERACTION_ID), captor.capture(), anyInt(), eq(PID), eq(TID), any());
+ any(), eq(INTERACTION_ID), captor.capture(), anyInt(), eq(PID), eq(TID), any(),
+ nullable(float[].class));
verify(mMockSecurityPolicy).computeValidReportedPackages(any(), anyInt());
verifyReplaceActions(captor.getValue());
}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java
index 022c137..842b23c 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java
@@ -842,7 +842,7 @@
null, interactionId,
callback, prefetchFlags,
processAndThreadId,
- processAndThreadId, null, null);
+ processAndThreadId, null, null, null);
}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/ActionReplacingCallbackTest.java b/services/tests/servicestests/src/com/android/server/accessibility/ActionReplacingCallbackTest.java
index 72820f1..c16f3d3f 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/ActionReplacingCallbackTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/ActionReplacingCallbackTest.java
@@ -16,6 +16,27 @@
package com.android.server.accessibility;
+import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_ACCESSIBILITY_FOCUS;
+import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK;
+import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_COLLAPSE;
+import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CONTEXT_CLICK;
+import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND;
+
+import static junit.framework.TestCase.assertTrue;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThat;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.MockitoAnnotations.initMocks;
+
import android.graphics.Region;
import android.os.RemoteException;
import android.view.MagnificationSpec;
@@ -35,28 +56,8 @@
import org.mockito.Mock;
import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_ACCESSIBILITY_FOCUS;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CLEAR_ACCESSIBILITY_FOCUS;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_COLLAPSE;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.ACTION_CONTEXT_CLICK;
-import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyObject;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.MockitoAnnotations.initMocks;
-
/**
* Tests for ActionReplacingCallback
*/
@@ -130,8 +131,8 @@
verify(mMockReplacerConnection).findAccessibilityNodeInfoByAccessibilityId(
eq(AccessibilityNodeInfo.ROOT_NODE_ID), (Region) anyObject(),
mInteractionIdCaptor.capture(), eq(mActionReplacingCallback), eq(0),
- eq(INTERROGATING_PID), eq(INTERROGATING_TID), (MagnificationSpec) anyObject(),
- eq(null));
+ eq(INTERROGATING_PID), eq(INTERROGATING_TID), nullable(MagnificationSpec.class),
+ nullable(float[].class), eq(null));
mReplacerInteractionId = mInteractionIdCaptor.getValue().intValue();
}
@@ -247,7 +248,7 @@
.findAccessibilityNodeInfoByAccessibilityId(eq(AccessibilityNodeInfo.ROOT_NODE_ID),
(Region) anyObject(), anyInt(), (ActionReplacingCallback) anyObject(),
eq(0), eq(INTERROGATING_PID), eq(INTERROGATING_TID),
- (MagnificationSpec) anyObject(), eq(null));
+ (MagnificationSpec) anyObject(), nullable(float[].class), eq(null));
ActionReplacingCallback actionReplacingCallback = new ActionReplacingCallback(
mMockServiceCallback, mMockReplacerConnection, INTERACTION_ID, INTERROGATING_PID,
INTERROGATING_TID);