summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/view/ScrollViewCaptureHelper.java11
-rw-r--r--core/tests/coretests/src/com/android/internal/view/ScrollViewCaptureHelperTest.java12
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