Skip to content

Commit ac5a6d3

Browse files
Material Design Teamdsn5ft
authored andcommitted
[Slider][A11y] Set a minimum accessibility touch target size of 48dp for Voice Access
This resolves an issue where Voice Access could not detect or interact with the slider when the minTouchTargetSize attribute was set to 0dp in theme. PiperOrigin-RevId: 888060511
1 parent a67afdf commit ac5a6d3

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

lib/java/com/google/android/material/slider/BaseSlider.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ abstract class BaseSlider<
329329
private int minTickSpacing;
330330

331331
@Px private int minTouchTargetSize;
332+
@Px private int accessibilityMinTouchTargetSize;
332333

333334
@Orientation private int widgetOrientation;
334335
private int minWidgetThickness;
@@ -536,6 +537,9 @@ private void loadResources(@NonNull Resources resources) {
536537
labelPadding = resources.getDimensionPixelSize(R.dimen.mtrl_slider_label_padding);
537538

538539
trackIconPadding = resources.getDimensionPixelOffset(R.dimen.m3_slider_track_icon_padding);
540+
541+
accessibilityMinTouchTargetSize =
542+
resources.getDimensionPixelSize(R.dimen.mtrl_min_touch_target_size);
539543
}
540544

541545
private void processAttributes(Context context, AttributeSet attrs, int defStyleAttr) {
@@ -4243,8 +4247,12 @@ public void writeToParcel(@NonNull Parcel dest, int flags) {
42434247
void updateBoundsForVirtualViewId(int virtualViewId, Rect virtualViewBounds) {
42444248
int x = trackSidePadding + (int) (normalizeValue(getValues().get(virtualViewId)) * trackWidth);
42454249
int y = calculateTrackCenter();
4246-
int touchTargetOffsetX = max(thumbWidth / 2, minTouchTargetSize / 2);
4247-
int touchTargetOffsetY = max(thumbHeight / 2, minTouchTargetSize / 2);
4250+
4251+
int targetSize = max(minTouchTargetSize, accessibilityMinTouchTargetSize);
4252+
4253+
int touchTargetOffsetX = max(thumbWidth / 2, targetSize / 2);
4254+
int touchTargetOffsetY = max(thumbHeight / 2, targetSize / 2);
4255+
42484256
RectF rect =
42494257
new RectF(
42504258
x - touchTargetOffsetX,

0 commit comments

Comments
 (0)