Loading core/java/android/view/AccessibilityInteractionController.java +28 −28 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_A import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_REQUESTED_KEY; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; import android.annotation.NonNull; import android.graphics.Matrix; import android.graphics.Rect; import android.graphics.RectF; Loading Loading @@ -959,29 +960,6 @@ public final class AccessibilityInteractionController { && mViewRootImpl.mAttachInfo.mLeashedParentAccessibilityViewId == View.NO_ID); } private void applyAppScaleAndMagnificationSpecIfNeeded(AccessibilityNodeInfo info, MagnificationSpec spec) { if (info == null) { return; } final float applicationScale = mViewRootImpl.mAttachInfo.mApplicationScale; if (!shouldApplyAppScaleAndMagnificationSpec(applicationScale, spec)) { return; } Rect boundsInParent = mTempRect; info.getBoundsInParent(boundsInParent); if (applicationScale != 1.0f) { boundsInParent.scale(applicationScale); } if (spec != null) { boundsInParent.scale(spec.scale); // boundsInParent must not be offset. } info.setBoundsInParent(boundsInParent); } private boolean shouldApplyAppScaleAndMagnificationSpec(float appScale, MagnificationSpec spec) { return (appScale != 1.0f || (spec != null && !spec.isNop())); Loading @@ -1002,7 +980,6 @@ public final class AccessibilityInteractionController { // Transform view bounds from window coordinates to screen coordinates. transformBoundsWithScreenMatrix(info, matrixValues); adjustIsVisibleToUserIfNeeded(info, interactiveRegion, spec); applyAppScaleAndMagnificationSpecIfNeeded(info, spec); } Loading Loading @@ -1042,10 +1019,7 @@ public final class AccessibilityInteractionController { 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); roundRectFToRect(transformedBounds, boundInScreen); info.setBoundsInScreen(boundInScreen); // Scale text locations if they are present if (info.hasExtras()) { Loading @@ -1063,6 +1037,26 @@ public final class AccessibilityInteractionController { } } } applyTransformMatrixToBoundsInParentIfNeeded(info, transformMatrix); } private void applyTransformMatrixToBoundsInParentIfNeeded(AccessibilityNodeInfo info, Matrix transformMatrix) { final float[] screenMatrixValues = new float[9]; transformMatrix.getValues(screenMatrixValues); final Matrix scaleMatrix = new Matrix(); scaleMatrix.setScale(screenMatrixValues[Matrix.MSCALE_X], screenMatrixValues[Matrix.MSCALE_X]); if (scaleMatrix.isIdentity()) { return; } Rect boundsInParent = mTempRect; final RectF transformedBounds = mTempRectF; info.getBoundsInParent(boundsInParent); transformedBounds.set(boundsInParent); scaleMatrix.mapRect(transformedBounds); roundRectFToRect(transformedBounds, boundsInParent); info.setBoundsInParent(boundsInParent); } private void updateInfosForViewportAndReturnFindNodeResult(List<AccessibilityNodeInfo> infos, Loading Loading @@ -1213,6 +1207,12 @@ public final class AccessibilityInteractionController { return false; } private static void roundRectFToRect(@NonNull RectF sourceRectF, @NonNull Rect outRect) { // Offset 0.5f to round after casting. outRect.set((int) (sourceRectF.left + 0.5), (int) (sourceRectF.top + 0.5), (int) (sourceRectF.right + 0.5), (int) (sourceRectF.bottom + 0.5)); } /** * This class encapsulates a prefetching strategy for the accessibility APIs for * querying window content. It is responsible to prefetch a batch of Loading Loading
core/java/android/view/AccessibilityInteractionController.java +28 −28 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_A import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_REQUESTED_KEY; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; import android.annotation.NonNull; import android.graphics.Matrix; import android.graphics.Rect; import android.graphics.RectF; Loading Loading @@ -959,29 +960,6 @@ public final class AccessibilityInteractionController { && mViewRootImpl.mAttachInfo.mLeashedParentAccessibilityViewId == View.NO_ID); } private void applyAppScaleAndMagnificationSpecIfNeeded(AccessibilityNodeInfo info, MagnificationSpec spec) { if (info == null) { return; } final float applicationScale = mViewRootImpl.mAttachInfo.mApplicationScale; if (!shouldApplyAppScaleAndMagnificationSpec(applicationScale, spec)) { return; } Rect boundsInParent = mTempRect; info.getBoundsInParent(boundsInParent); if (applicationScale != 1.0f) { boundsInParent.scale(applicationScale); } if (spec != null) { boundsInParent.scale(spec.scale); // boundsInParent must not be offset. } info.setBoundsInParent(boundsInParent); } private boolean shouldApplyAppScaleAndMagnificationSpec(float appScale, MagnificationSpec spec) { return (appScale != 1.0f || (spec != null && !spec.isNop())); Loading @@ -1002,7 +980,6 @@ public final class AccessibilityInteractionController { // Transform view bounds from window coordinates to screen coordinates. transformBoundsWithScreenMatrix(info, matrixValues); adjustIsVisibleToUserIfNeeded(info, interactiveRegion, spec); applyAppScaleAndMagnificationSpecIfNeeded(info, spec); } Loading Loading @@ -1042,10 +1019,7 @@ public final class AccessibilityInteractionController { 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); roundRectFToRect(transformedBounds, boundInScreen); info.setBoundsInScreen(boundInScreen); // Scale text locations if they are present if (info.hasExtras()) { Loading @@ -1063,6 +1037,26 @@ public final class AccessibilityInteractionController { } } } applyTransformMatrixToBoundsInParentIfNeeded(info, transformMatrix); } private void applyTransformMatrixToBoundsInParentIfNeeded(AccessibilityNodeInfo info, Matrix transformMatrix) { final float[] screenMatrixValues = new float[9]; transformMatrix.getValues(screenMatrixValues); final Matrix scaleMatrix = new Matrix(); scaleMatrix.setScale(screenMatrixValues[Matrix.MSCALE_X], screenMatrixValues[Matrix.MSCALE_X]); if (scaleMatrix.isIdentity()) { return; } Rect boundsInParent = mTempRect; final RectF transformedBounds = mTempRectF; info.getBoundsInParent(boundsInParent); transformedBounds.set(boundsInParent); scaleMatrix.mapRect(transformedBounds); roundRectFToRect(transformedBounds, boundsInParent); info.setBoundsInParent(boundsInParent); } private void updateInfosForViewportAndReturnFindNodeResult(List<AccessibilityNodeInfo> infos, Loading Loading @@ -1213,6 +1207,12 @@ public final class AccessibilityInteractionController { return false; } private static void roundRectFToRect(@NonNull RectF sourceRectF, @NonNull Rect outRect) { // Offset 0.5f to round after casting. outRect.set((int) (sourceRectF.left + 0.5), (int) (sourceRectF.top + 0.5), (int) (sourceRectF.right + 0.5), (int) (sourceRectF.bottom + 0.5)); } /** * This class encapsulates a prefetching strategy for the accessibility APIs for * querying window content. It is responsible to prefetch a batch of Loading