summaryrefslogtreecommitdiff
path: root/core/java/android/widget
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2012-05-17 20:56:37 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-05-17 20:56:37 -0700
commit72e15ceb85ecbe066c2ba33ca7e086dc511a8d23 (patch)
tree24af225577e1ad1110d55b82744e6e4d4c61e4e4 /core/java/android/widget
parentd904c1c924f061f1ca0d5d36fe72ba29208167d6 (diff)
parentcefd97c8546d6dca184e8ac9589ab2ff1b795c06 (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.java52
-rw-r--r--core/java/android/widget/Gallery.java16
-rw-r--r--core/java/android/widget/HorizontalScrollView.java10
-rw-r--r--core/java/android/widget/NumberPicker.java57
-rw-r--r--core/java/android/widget/ScrollView.java21
-rw-r--r--core/java/android/widget/StackView.java15
-rw-r--r--core/java/android/widget/TextView.java3
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