Skip to content

Commit 9d8506a

Browse files
committed
[TimePicker] Accessibility focus on error
Move the accessibility focus back to the error when clicking "OK". PiperOrigin-RevId: 810864879
1 parent 80106b5 commit 9d8506a

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import android.util.AttributeSet;
3434
import android.view.LayoutInflater;
3535
import android.view.View;
36+
import android.view.accessibility.AccessibilityEvent;
3637
import android.widget.Checkable;
3738
import android.widget.EditText;
3839
import android.widget.FrameLayout;
@@ -154,6 +155,14 @@ CharSequence getChipText() {
154155
return chipText;
155156
}
156157

158+
void requestAccessibilityFocus() {
159+
if (editText.getVisibility() == View.VISIBLE) {
160+
editText.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
161+
} else {
162+
chip.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
163+
}
164+
}
165+
157166
private String formatText(CharSequence text) {
158167
return TimeModel.formatText(getResources(), text);
159168
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ public final View onCreateView(
293293
TimePickerTextInputPresenter presenter = (TimePickerTextInputPresenter) activePresenter;
294294
if (presenter.hasError()) {
295295
presenter.vibrateAndMaybeBeep(root.getContext());
296+
presenter.accessibilityFocusOnError();
296297
return;
297298
}
298299
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,20 @@ void vibrateAndMaybeBeep(@NonNull Context context) {
280280
}
281281
}
282282

283+
void accessibilityFocusOnError() {
284+
if (hourTextInput.hasError()) {
285+
requestAccessibilityFocusAndAnnounce(hourTextInput, hourLabel);
286+
} else if (minuteTextInput.hasError()) {
287+
requestAccessibilityFocusAndAnnounce(minuteTextInput, minuteLabel);
288+
}
289+
}
290+
291+
private void requestAccessibilityFocusAndAnnounce(
292+
@NonNull ChipTextInputComboView viewToFocus, @NonNull TextView labelToAnnounce) {
293+
viewToFocus.requestAccessibilityFocus();
294+
labelToAnnounce.announceForAccessibility(labelToAnnounce.getText());
295+
}
296+
283297
@SuppressLint("MissingPermission")
284298
private void vibrate(@NonNull Context context) {
285299
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M

0 commit comments

Comments
 (0)