diff options
| author | 2021-06-01 14:05:35 +0000 | |
|---|---|---|
| committer | 2021-06-01 14:05:35 +0000 | |
| commit | 07056eaa46d81b3e81a9ce7d4931c039b75f6e14 (patch) | |
| tree | 7192149ae5a01ab637cd0b9ca2b6a3a3ea0a64a1 | |
| parent | 960f56669c36821cd5b92635746c18133981eaed (diff) | |
| parent | 9e25d3b8b54f8482a92c5727610b6f47753fbf23 (diff) | |
Merge "Move ScrollView scroll capture to the center" into sc-dev
| -rw-r--r-- | core/java/com/android/internal/view/ScrollViewCaptureHelper.java | 11 | ||||
| -rw-r--r-- | core/tests/coretests/src/com/android/internal/view/ScrollViewCaptureHelperTest.java | 12 |
2 files changed, 18 insertions, 5 deletions
diff --git a/core/java/com/android/internal/view/ScrollViewCaptureHelper.java b/core/java/com/android/internal/view/ScrollViewCaptureHelper.java index a1d202e3a39f..a360f63e97d4 100644 --- a/core/java/com/android/internal/view/ScrollViewCaptureHelper.java +++ b/core/java/com/android/internal/view/ScrollViewCaptureHelper.java @@ -125,10 +125,19 @@ public class ScrollViewCaptureHelper implements ScrollCaptureViewHelper<ViewGrou view.getScrollX() - contentView.getLeft(), view.getScrollY() - contentView.getTop()); + Rect input = new Rect(requestedContentBounds); + + // Expand input rect to get the requested rect to be in the center + int remainingHeight = view.getHeight() - view.getPaddingTop() + - view.getPaddingBottom() - input.height(); + if (remainingHeight > 0) { + input.inset(0, -remainingHeight / 2); + } + // requestRect is now local to contentView as requestedContentBounds // contentView (and each parent in turn if possible) will be scrolled // (if necessary) to make all of requestedContent visible, (if possible!) - contentView.requestRectangleOnScreen(new Rect(requestedContentBounds), true); + contentView.requestRectangleOnScreen(input, true); // update new offset between starting and current scroll position scrollDelta = view.getScrollY() - mStartScrollY; diff --git a/core/tests/coretests/src/com/android/internal/view/ScrollViewCaptureHelperTest.java b/core/tests/coretests/src/com/android/internal/view/ScrollViewCaptureHelperTest.java index ab13fd7d81e0..fc02ea9aee22 100644 --- a/core/tests/coretests/src/com/android/internal/view/ScrollViewCaptureHelperTest.java +++ b/core/tests/coretests/src/com/android/internal/view/ScrollViewCaptureHelperTest.java @@ -164,7 +164,8 @@ public class ScrollViewCaptureHelperTest { assertRectEquals(request, scrollResult.requestedArea); assertRectEquals(request, scrollResult.availableArea); assertRequestedRectCompletelyVisible(startScrollY, request, getVisibleRect(mContent)); - assertEquals(CAPTURE_HEIGHT, scrollResult.scrollDelta); + assertEquals(CAPTURE_HEIGHT + (WINDOW_HEIGHT - CAPTURE_HEIGHT) / 2, + scrollResult.scrollDelta); } @Test @@ -182,7 +183,8 @@ public class ScrollViewCaptureHelperTest { assertRectEquals(request, scrollResult.requestedArea); assertRectEquals(request, scrollResult.availableArea); assertRequestedRectCompletelyVisible(startScrollY, request, getVisibleRect(mContent)); - assertEquals(-CAPTURE_HEIGHT, scrollResult.scrollDelta); + assertEquals(-CAPTURE_HEIGHT - (WINDOW_HEIGHT - CAPTURE_HEIGHT) / 2, + scrollResult.scrollDelta); } @Test @@ -201,7 +203,8 @@ public class ScrollViewCaptureHelperTest { assertRectEquals(request, scrollResult.requestedArea); assertRectEquals(request, scrollResult.availableArea); assertRequestedRectCompletelyVisible(startScrollY, request, getVisibleRect(mContent)); - assertEquals(CAPTURE_HEIGHT, scrollResult.scrollDelta); + assertEquals(CAPTURE_HEIGHT + (WINDOW_HEIGHT - CAPTURE_HEIGHT) / 2, + scrollResult.scrollDelta); } @@ -220,7 +223,8 @@ public class ScrollViewCaptureHelperTest { assertRectEquals(request, scrollResult.requestedArea); assertRectEquals(request, scrollResult.availableArea); assertRequestedRectCompletelyVisible(startScrollY, request, getVisibleRect(mContent)); - assertEquals(-CAPTURE_HEIGHT, scrollResult.scrollDelta); + assertEquals(-CAPTURE_HEIGHT - (WINDOW_HEIGHT - CAPTURE_HEIGHT) / 2, + scrollResult.scrollDelta); } @Test |