diff options
author | Alan Viverette <alanv@google.com> | 2014-12-11 22:11:54 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-12-11 22:11:56 +0000 |
commit | ff44188309fca037892d0ded64cfee04a3a71c42 (patch) | |
tree | efe3b7c149d5c324fb89f2c7349be603be531938 /core/java/android/widget | |
parent | 47d9a58ce15007f79bc094d9b1599e41d51670a3 (diff) | |
parent | 3fc00e3139706c2c90f8e7261eef48086887dc11 (diff) | |
download | frameworks_base-ff44188309fca037892d0ded64cfee04a3a71c42.zip frameworks_base-ff44188309fca037892d0ded64cfee04a3a71c42.tar.gz frameworks_base-ff44188309fca037892d0ded64cfee04a3a71c42.tar.bz2 |
Merge "Improve time picker accessibility" into lmp-mr1-dev
Diffstat (limited to 'core/java/android/widget')
-rw-r--r-- | core/java/android/widget/RadialTimePickerView.java | 26 | ||||
-rw-r--r-- | core/java/android/widget/TimePickerClockDelegate.java | 22 |
2 files changed, 48 insertions, 0 deletions
diff --git a/core/java/android/widget/RadialTimePickerView.java b/core/java/android/widget/RadialTimePickerView.java index 75c6184..7b64cf5 100644 --- a/core/java/android/widget/RadialTimePickerView.java +++ b/core/java/android/widget/RadialTimePickerView.java @@ -1456,6 +1456,32 @@ public class RadialTimePickerView extends View implements View.OnTouchListener { final boolean selected = isVirtualViewSelected(type, value); node.setSelected(selected); + + final int nextId = getVirtualViewIdAfter(type, value); + if (nextId != INVALID_ID) { + node.setTraversalBefore(RadialTimePickerView.this, nextId); + } + } + + private int getVirtualViewIdAfter(int type, int value) { + if (type == TYPE_HOUR) { + final int nextValue = value + 1; + final int max = mIs24HourMode ? 23 : 12; + if (nextValue <= max) { + return makeId(type, nextValue); + } + } else if (type == TYPE_MINUTE) { + final int current = getCurrentMinute(); + final int snapValue = value - (value % MINUTE_INCREMENT); + final int nextValue = snapValue + MINUTE_INCREMENT; + if (value < current && nextValue > current) { + // The current value is between two snap values. + return makeId(type, current); + } else if (nextValue < 60) { + return makeId(type, nextValue); + } + } + return INVALID_ID; } @Override 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; |