Skip to content

Commit f9914da

Browse files
paulfthomaspekingme
authored andcommitted
[TimePicker][a11y] Fix Switch Access can't reach clock items
PiperOrigin-RevId: 425684600
1 parent dff1e4e commit f9914da

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

lib/java/com/google/android/material/timepicker/ClockFaceView.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,14 @@
3131
import android.graphics.Rect;
3232
import android.graphics.RectF;
3333
import android.graphics.Shader.TileMode;
34+
import android.os.Bundle;
35+
import android.os.SystemClock;
3436
import androidx.appcompat.content.res.AppCompatResources;
3537
import android.util.AttributeSet;
3638
import android.util.DisplayMetrics;
3739
import android.util.SparseArray;
3840
import android.view.LayoutInflater;
41+
import android.view.MotionEvent;
3942
import android.view.View;
4043
import android.view.ViewTreeObserver.OnPreDrawListener;
4144
import android.view.accessibility.AccessibilityNodeInfo;
@@ -47,6 +50,7 @@
4750
import androidx.core.view.AccessibilityDelegateCompat;
4851
import androidx.core.view.ViewCompat;
4952
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
53+
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat;
5054
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat;
5155
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat;
5256
import com.google.android.material.resources.MaterialResources;
@@ -166,6 +170,22 @@ public void onInitializeAccessibilityNodeInfo(
166170
/* selected= */ host.isSelected()));
167171

168172
info.setClickable(true);
173+
info.addAction(AccessibilityActionCompat.ACTION_CLICK);
174+
}
175+
176+
@Override
177+
public boolean performAccessibilityAction(View host, int action, Bundle args) {
178+
if (action == AccessibilityNodeInfoCompat.ACTION_CLICK) {
179+
long eventTime = SystemClock.uptimeMillis();
180+
float x = host.getX() + host.getWidth() / 2f;
181+
float y = host.getY() + host.getHeight() / 2f;
182+
clockHandView.onTouchEvent(
183+
MotionEvent.obtain(eventTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0));
184+
clockHandView.onTouchEvent(
185+
MotionEvent.obtain(eventTime, eventTime, MotionEvent.ACTION_UP, x, y, 0));
186+
return true;
187+
}
188+
return super.performAccessibilityAction(host, action, args);
169189
}
170190
};
171191

lib/java/com/google/android/material/timepicker/res/layout/material_clockface_textview.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
android:layout_width="wrap_content"
2121
android:layout_height="wrap_content"
2222
android:textColor="?attr/colorOnSurface"
23-
android:padding="16dp"
23+
android:padding="@dimen/material_clock_number_text_padding"
2424
android:textSize="@dimen/material_clock_number_text_size"
2525
android:visibility="gone"
2626
tools:ignore="SpUsage" />

lib/java/com/google/android/material/timepicker/res/values/dimens.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
<dimen name="material_clock_hand_center_dot_radius">4dp</dimen>
2929
<!-- TODO(b/158490859) revisit number scaling -->
3030
<dimen name="material_clock_number_text_size">15dp</dimen>
31+
<dimen name="material_clock_number_text_padding">20dp</dimen>
3132

3233
<!-- cursor dimens -->
3334
<dimen name="material_cursor_inset_bottom">-6dp</dimen>

0 commit comments

Comments
 (0)