diff options
| author | Svetoslav Ganov <svetoslavganov@google.com> | 2012-05-17 20:56:37 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2012-05-17 20:56:37 -0700 |
| commit | 72e15ceb85ecbe066c2ba33ca7e086dc511a8d23 (patch) | |
| tree | 24af225577e1ad1110d55b82744e6e4d4c61e4e4 /core/java/android/widget | |
| parent | d904c1c924f061f1ca0d5d36fe72ba29208167d6 (diff) | |
| parent | cefd97c8546d6dca184e8ac9589ab2ff1b795c06 (diff) | |
am cefd97c8: am e54c5f13: Merge "Exposing some accessiblity actions only for enabled views." into jb-dev
* commit 'cefd97c8546d6dca184e8ac9589ab2ff1b795c06':
Exposing some accessiblity actions only for enabled views.
Diffstat (limited to 'core/java/android/widget')
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 52 | ||||
| -rw-r--r-- | core/java/android/widget/Gallery.java | 16 | ||||
| -rw-r--r-- | core/java/android/widget/HorizontalScrollView.java | 10 | ||||
| -rw-r--r-- | core/java/android/widget/NumberPicker.java | 57 | ||||
| -rw-r--r-- | core/java/android/widget/ScrollView.java | 21 | ||||
| -rw-r--r-- | core/java/android/widget/StackView.java | 15 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 3 |
7 files changed, 108 insertions, 66 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 04c8cdc59e9b..8643e9eaaed7 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -1470,11 +1470,13 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(AbsListView.class.getName()); - if (getFirstVisiblePosition() > 0) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); - } - if (getLastVisiblePosition() < getCount() - 1) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + if (isEnabled()) { + if (getFirstVisiblePosition() > 0) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + } + if (getLastVisiblePosition() < getCount() - 1) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + } } } @@ -1485,14 +1487,14 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { - if (getLastVisiblePosition() < getCount() - 1) { + if (isEnabled() && getLastVisiblePosition() < getCount() - 1) { final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom; smoothScrollBy(viewportHeight, PositionScroller.SCROLL_DURATION); return true; } } return false; case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: { - if (mFirstPosition > 0) { + if (isEnabled() && mFirstPosition > 0) { final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom; smoothScrollBy(-viewportHeight, PositionScroller.SCROLL_DURATION); return true; @@ -2294,17 +2296,19 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te return; } - if (isClickable()) { + if (isClickable() && isEnabled()) { info.addAction(AccessibilityNodeInfo.ACTION_CLICK); info.setClickable(true); } - if (isLongClickable()) { + if (isLongClickable() && isEnabled()) { info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK); info.setLongClickable(true); } - info.addAction(AccessibilityNodeInfo.ACTION_SELECT); + if (isEnabled()) { + info.addAction(AccessibilityNodeInfo.ACTION_SELECT); + } if (position == getSelectedItemPosition()) { info.setSelected(true); @@ -2313,34 +2317,40 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te @Override public boolean performAccessibilityAction(View host, int action, Bundle arguments) { + if (super.performAccessibilityAction(host, action, arguments)) { + return true; + } + final int position = getPositionForView(host); if (position == INVALID_POSITION) { return false; } + if (!isEnabled()) { + return false; + } + final long id = getItemIdAtPosition(position); switch (action) { - case AccessibilityNodeInfo.ACTION_SELECT: + case AccessibilityNodeInfo.ACTION_SELECT: { setSelection(position); return true; - case AccessibilityNodeInfo.ACTION_CLICK: - if (!super.performAccessibilityAction(host, action, arguments)) { + } + case AccessibilityNodeInfo.ACTION_CLICK: { + if (isClickable()) { return performItemClick(host, position, id); } - return true; - case AccessibilityNodeInfo.ACTION_LONG_CLICK: - if (!super.performAccessibilityAction(host, action, arguments)) { + } return false; + case AccessibilityNodeInfo.ACTION_LONG_CLICK: { + if (isLongClickable()) { return performLongPress(host, position, id); } - return true; - case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: - smoothScrollToPosition(position); - break; + } return false; } - return super.performAccessibilityAction(host, action, arguments); + return false; } } diff --git a/core/java/android/widget/Gallery.java b/core/java/android/widget/Gallery.java index c8e702ce4ead..d58ddf8145f7 100644 --- a/core/java/android/widget/Gallery.java +++ b/core/java/android/widget/Gallery.java @@ -1369,11 +1369,13 @@ public class Gallery extends AbsSpinner implements GestureDetector.OnGestureList super.onInitializeAccessibilityNodeInfo(info); info.setClassName(Gallery.class.getName()); info.setScrollable(mItemCount > 1); - if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); - } - if (mItemCount > 0 && mSelectedPosition > 0) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + if (isEnabled()) { + if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + } + if (isEnabled() && mItemCount > 0 && mSelectedPosition > 0) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + } } } @@ -1384,13 +1386,13 @@ public class Gallery extends AbsSpinner implements GestureDetector.OnGestureList } switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { - if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) { + if (isEnabled() && mItemCount > 0 && mSelectedPosition < mItemCount - 1) { final int currentChildIndex = mSelectedPosition - mFirstPosition; return scrollToChild(currentChildIndex + 1); } } return false; case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: { - if (mItemCount > 0 && mSelectedPosition > 0) { + if (isEnabled() && mItemCount > 0 && mSelectedPosition > 0) { final int currentChildIndex = mSelectedPosition - mFirstPosition; return scrollToChild(currentChildIndex - 1); } diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index f889cb74671c..8c6ce19e12b8 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -744,6 +744,9 @@ public class HorizontalScrollView extends FrameLayout { } switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { + if (!isEnabled()) { + return false; + } final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight; final int targetScrollX = Math.min(mScrollX + viewportWidth, getScrollRange()); if (targetScrollX != mScrollX) { @@ -752,6 +755,9 @@ public class HorizontalScrollView extends FrameLayout { } } return false; case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: { + if (!isEnabled()) { + return false; + } final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight; final int targetScrollX = Math.max(0, mScrollX - viewportWidth); if (targetScrollX != mScrollX) { @@ -770,10 +776,10 @@ public class HorizontalScrollView extends FrameLayout { final int scrollRange = getScrollRange(); if (scrollRange > 0) { info.setScrollable(true); - if (mScrollX > 0) { + if (isEnabled() && mScrollX > 0) { info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); } - if (mScrollX < scrollRange) { + if (isEnabled() && mScrollX < scrollRange) { info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); } } diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index 515f0c4bfb3f..b60ffc52982c 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -2173,13 +2173,15 @@ public class NumberPicker extends LinearLayout { return false; } case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { - if (getWrapSelectorWheel() || getValue() < getMaxValue()) { + if (NumberPicker.this.isEnabled() + && (getWrapSelectorWheel() || getValue() < getMaxValue())) { changeValueByOne(true); return true; } } return false; case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: { - if (getWrapSelectorWheel() || getValue() > getMinValue()) { + if (NumberPicker.this.isEnabled() + && (getWrapSelectorWheel() || getValue() > getMinValue())) { changeValueByOne(false); return true; } @@ -2189,20 +2191,23 @@ public class NumberPicker extends LinearLayout { case VIRTUAL_VIEW_ID_INPUT: { switch (action) { case AccessibilityNodeInfo.ACTION_FOCUS: { - if (!mInputText.isFocused()) { + if (NumberPicker.this.isEnabled() && !mInputText.isFocused()) { return mInputText.requestFocus(); } } break; case AccessibilityNodeInfo.ACTION_CLEAR_FOCUS: { - if (mInputText.isFocused()) { + if (NumberPicker.this.isEnabled() && mInputText.isFocused()) { mInputText.clearFocus(); return true; } return false; } case AccessibilityNodeInfo.ACTION_CLICK: { - showSoftInput(); - return true; + if (NumberPicker.this.isEnabled()) { + showSoftInput(); + return true; + } + return false; } case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: { if (mAccessibilityFocusedView != virtualViewId) { @@ -2230,10 +2235,13 @@ public class NumberPicker extends LinearLayout { case VIRTUAL_VIEW_ID_INCREMENT: { switch (action) { case AccessibilityNodeInfo.ACTION_CLICK: { - NumberPicker.this.changeValueByOne(true); - sendAccessibilityEventForVirtualView(virtualViewId, - AccessibilityEvent.TYPE_VIEW_CLICKED); - } return true; + if (NumberPicker.this.isEnabled()) { + NumberPicker.this.changeValueByOne(true); + sendAccessibilityEventForVirtualView(virtualViewId, + AccessibilityEvent.TYPE_VIEW_CLICKED); + return true; + } + } return false; case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: { if (mAccessibilityFocusedView != virtualViewId) { mAccessibilityFocusedView = virtualViewId; @@ -2257,11 +2265,14 @@ public class NumberPicker extends LinearLayout { case VIRTUAL_VIEW_ID_DECREMENT: { switch (action) { case AccessibilityNodeInfo.ACTION_CLICK: { - final boolean increment = (virtualViewId == VIRTUAL_VIEW_ID_INCREMENT); - NumberPicker.this.changeValueByOne(increment); - sendAccessibilityEventForVirtualView(virtualViewId, - AccessibilityEvent.TYPE_VIEW_CLICKED); - } return true; + if (NumberPicker.this.isEnabled()) { + final boolean increment = (virtualViewId == VIRTUAL_VIEW_ID_INCREMENT); + NumberPicker.this.changeValueByOne(increment); + sendAccessibilityEventForVirtualView(virtualViewId, + AccessibilityEvent.TYPE_VIEW_CLICKED); + return true; + } + } return false; case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: { if (mAccessibilityFocusedView != virtualViewId) { mAccessibilityFocusedView = virtualViewId; @@ -2470,7 +2481,9 @@ public class NumberPicker extends LinearLayout { if (mAccessibilityFocusedView == virtualViewId) { info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS); } - info.addAction(AccessibilityNodeInfo.ACTION_CLICK); + if (NumberPicker.this.isEnabled()) { + info.addAction(AccessibilityNodeInfo.ACTION_CLICK); + } return info; } @@ -2509,11 +2522,13 @@ public class NumberPicker extends LinearLayout { if (mAccessibilityFocusedView == View.NO_ID) { info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS); } - if (getWrapSelectorWheel() || getValue() < getMaxValue()) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); - } - if (getWrapSelectorWheel() || getValue() > getMinValue()) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + if (NumberPicker.this.isEnabled()) { + if (getWrapSelectorWheel() || getValue() < getMaxValue()) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + } + if (getWrapSelectorWheel() || getValue() > getMinValue()) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + } } return info; diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index a499743bcb8d..2a20c56c943d 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -745,6 +745,9 @@ public class ScrollView extends FrameLayout { if (super.performAccessibilityAction(action, arguments)) { return true; } + if (!isEnabled()) { + return false; + } switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop; @@ -770,14 +773,16 @@ public class ScrollView extends FrameLayout { public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(ScrollView.class.getName()); - final int scrollRange = getScrollRange(); - if (scrollRange > 0) { - info.setScrollable(true); - if (mScrollY > 0) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); - } - if (mScrollY < scrollRange) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + if (isEnabled()) { + final int scrollRange = getScrollRange(); + if (scrollRange > 0) { + info.setScrollable(true); + if (mScrollY > 0) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + } + if (mScrollY < scrollRange) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + } } } } diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java index dd0915ba47e3..293eda182559 100644 --- a/core/java/android/widget/StackView.java +++ b/core/java/android/widget/StackView.java @@ -1230,11 +1230,13 @@ public class StackView extends AdapterViewAnimator { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(StackView.class.getName()); info.setScrollable(getChildCount() > 1); - if (getDisplayedChild() < getChildCount() - 1) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); - } - if (getDisplayedChild() > 0) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + if (isEnabled()) { + if (getDisplayedChild() < getChildCount() - 1) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + } + if (getDisplayedChild() > 0) { + info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + } } } @@ -1243,6 +1245,9 @@ public class StackView extends AdapterViewAnimator { if (super.performAccessibilityAction(action, arguments)) { return true; } + if (!isEnabled()) { + return false; + } switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { if (getDisplayedChild() < getChildCount() - 1) { diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 4192d283751c..7d69bbcdad2f 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -7728,8 +7728,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener info.setText(getTextForAccessibility()); } - if (TextUtils.isEmpty(getContentDescription()) - && !TextUtils.isEmpty(mText)) { + if (TextUtils.isEmpty(getContentDescription()) && !TextUtils.isEmpty(mText)) { info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY); info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY); info.setMovementGranularities(AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER |
