summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Paul Hobbs <phobbs@google.com> 2021-06-29 00:24:40 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-06-29 00:24:40 +0000
commit0a0f6b352fcde3d17647b4d9bd3b67e696e276c9 (patch)
tree515ae255906cbd8fb9a86ef87f6ca91db43a59bc
parentb62b9c3e12d6bb4ded88ce469162de0713640aa6 (diff)
parentf3cda719664927e06619655d67e62b434c993215 (diff)
Merge "Revert "Fix mPositionInWindow to not use global coords"" into sc-dev
-rw-r--r--core/java/android/view/ScrollCaptureTarget.java27
1 files changed, 22 insertions, 5 deletions
diff --git a/core/java/android/view/ScrollCaptureTarget.java b/core/java/android/view/ScrollCaptureTarget.java
index a8bb037af5f9..44017ed0d831 100644
--- a/core/java/android/view/ScrollCaptureTarget.java
+++ b/core/java/android/view/ScrollCaptureTarget.java
@@ -21,10 +21,13 @@ import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UiThread;
+import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.CancellationSignal;
+import com.android.internal.util.FastMath;
+
import java.io.PrintWriter;
import java.util.function.Consumer;
@@ -40,7 +43,8 @@ public final class ScrollCaptureTarget {
private final int mHint;
private Rect mScrollBounds;
- private final int[] mTmpIntArr = new int[2];
+ private final float[] mTmpFloatArr = new float[2];
+ private final Matrix mMatrixViewLocalToWindow = new Matrix();
public ScrollCaptureTarget(@NonNull View scrollTarget, @NonNull Rect localVisibleRect,
@NonNull Point positionInWindow, @NonNull ScrollCaptureCallback callback) {
@@ -113,15 +117,28 @@ public final class ScrollCaptureTarget {
}
}
+ private static void zero(float[] pointArray) {
+ pointArray[0] = 0;
+ pointArray[1] = 0;
+ }
+
+ private static void roundIntoPoint(Point pointObj, float[] pointArray) {
+ pointObj.x = FastMath.round(pointArray[0]);
+ pointObj.y = FastMath.round(pointArray[1]);
+ }
+
/**
- * Refresh the local visible bounds and its offset within the window, based on the current
+ * Refresh the local visible bounds and it's offset within the window, based on the current
* state of the {@code containing view}.
*/
@UiThread
public void updatePositionInWindow() {
- mContainingView.getLocationInWindow(mTmpIntArr);
- mPositionInWindow.x = mTmpIntArr[0];
- mPositionInWindow.y = mTmpIntArr[1];
+ mMatrixViewLocalToWindow.reset();
+ mContainingView.transformMatrixToGlobal(mMatrixViewLocalToWindow);
+
+ zero(mTmpFloatArr);
+ mMatrixViewLocalToWindow.mapPoints(mTmpFloatArr);
+ roundIntoPoint(mPositionInWindow, mTmpFloatArr);
}
public String toString() {