summaryrefslogtreecommitdiff
path: root/core/java/android/widget/FastScroller.java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-11-20 16:07:59 -0800
committerAlan Viverette <alanv@google.com>2014-11-20 16:07:59 -0800
commit7d5bcd7990704dd89c596a85429be661607b6dbc (patch)
tree2225342cd9fd205d41d85802bc70d2439aa1e58a /core/java/android/widget/FastScroller.java
parentdf84cb90df6f4a98c853dd61e858f62a584cdac5 (diff)
Update scrollbars to match Material spec
Adds a minimum touch target size to the fast scroller so that we can edge-align an 8dp thumb but still maintain a 48dp touch target. BUG: 18467743 Change-Id: I31e9cf1948856f5fce7d75383b84a9359684ebe5
Diffstat (limited to 'core/java/android/widget/FastScroller.java')
-rw-r--r--core/java/android/widget/FastScroller.java25
1 files changed, 22 insertions, 3 deletions
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 06bb32c1a3ec..fe143dec8900 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -106,6 +106,9 @@ class FastScroller {
*/
private final int[] mPreviewResId = new int[2];
+ /** The minimum touch target size in pixels. */
+ private final int mMinimumTouchTarget;
+
/**
* Padding in pixels around the preview text. Applied as layout margins to
* the preview text and padding to the preview image.
@@ -254,6 +257,9 @@ class FastScroller {
mPrimaryText = createPreviewTextView(context);
mSecondaryText = createPreviewTextView(context);
+ mMinimumTouchTarget = listView.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.fast_scroller_minimum_touch_target);
+
setStyle(styleResId);
final ViewGroupOverlay overlay = listView.getOverlay();
@@ -1474,10 +1480,18 @@ class FastScroller {
}
private boolean isPointInsideX(float x) {
+ final float offset = mThumbImage.getTranslationX();
+ final float left = mThumbImage.getLeft() + offset;
+ final float right = mThumbImage.getRight() + offset;
+
+ // Apply the minimum touch target size.
+ final float targetSizeDiff = mMinimumTouchTarget - (right - left);
+ final float adjust = targetSizeDiff > 0 ? targetSizeDiff : 0;
+
if (mLayoutFromRight) {
- return x >= mThumbImage.getLeft();
+ return x >= mThumbImage.getLeft() - adjust;
} else {
- return x <= mThumbImage.getRight();
+ return x <= mThumbImage.getRight() + adjust;
}
}
@@ -1485,7 +1499,12 @@ class FastScroller {
final float offset = mThumbImage.getTranslationY();
final float top = mThumbImage.getTop() + offset;
final float bottom = mThumbImage.getBottom() + offset;
- return y >= top && y <= bottom;
+
+ // Apply the minimum touch target size.
+ final float targetSizeDiff = mMinimumTouchTarget - (bottom - top);
+ final float adjust = targetSizeDiff > 0 ? targetSizeDiff / 2 : 0;
+
+ return y >= (top - adjust) && y <= (bottom + adjust);
}
/**