diff options
| author | 2021-06-29 00:24:40 +0000 | |
|---|---|---|
| committer | 2021-06-29 00:24:40 +0000 | |
| commit | 0a0f6b352fcde3d17647b4d9bd3b67e696e276c9 (patch) | |
| tree | 515ae255906cbd8fb9a86ef87f6ca91db43a59bc | |
| parent | b62b9c3e12d6bb4ded88ce469162de0713640aa6 (diff) | |
| parent | f3cda719664927e06619655d67e62b434c993215 (diff) | |
Merge "Revert "Fix mPositionInWindow to not use global coords"" into sc-dev
| -rw-r--r-- | core/java/android/view/ScrollCaptureTarget.java | 27 |
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() { |