From 3fc00e3139706c2c90f8e7261eef48086887dc11 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Wed, 10 Dec 2014 09:46:49 -0800 Subject: Improve time picker accessibility Overrides click action description for TimePicker hour/minute selectors and manually specifies traversal order for radial time picker nodes. BUG: 17468036 Change-Id: I4472b42a95d762085d7a4d382feb2b9216c0d41c --- .../android/widget/TimePickerClockDelegate.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'core/java/android/widget/TimePickerClockDelegate.java') diff --git a/core/java/android/widget/TimePickerClockDelegate.java b/core/java/android/widget/TimePickerClockDelegate.java index d61b6fc..8d475a7 100644 --- a/core/java/android/widget/TimePickerClockDelegate.java +++ b/core/java/android/widget/TimePickerClockDelegate.java @@ -33,9 +33,11 @@ import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; +import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; +import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import com.android.internal.R; @@ -136,9 +138,13 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl // Set up hour/minute labels. mHourView = (TextView) mHeaderView.findViewById(R.id.hours); mHourView.setOnClickListener(mClickListener); + mHourView.setAccessibilityDelegate( + new ClickActionDelegate(context, R.string.select_hours)); mSeparatorView = (TextView) mHeaderView.findViewById(R.id.separator); mMinuteView = (TextView) mHeaderView.findViewById(R.id.minutes); mMinuteView.setOnClickListener(mClickListener); + mMinuteView.setAccessibilityDelegate( + new ClickActionDelegate(context, R.string.select_minutes)); final int headerTimeTextAppearance = a.getResourceId( R.styleable.TimePicker_headerTimeTextAppearance, 0); @@ -206,6 +212,22 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl initialize(currentHour, currentMinute, false /* 12h */, HOUR_INDEX); } + private static class ClickActionDelegate extends AccessibilityDelegate { + private final AccessibilityAction mClickAction; + + public ClickActionDelegate(Context context, int resId) { + mClickAction = new AccessibilityAction( + AccessibilityNodeInfo.ACTION_CLICK, context.getString(resId)); + } + + @Override + public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(host, info); + + info.addAction(mClickAction); + } + } + private int computeStableWidth(TextView v, int maxNumber) { int maxWidth = 0; -- cgit v1.1