Skip to content

Commit e54c5f1

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "Exposing some accessiblity actions only for enabled views." into jb-dev
2 parents 56ee04e + fb1e80a commit e54c5f1

File tree

8 files changed

+110
-68
lines changed

8 files changed

+110
-68
lines changed

core/java/android/view/View.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4776,11 +4776,11 @@ void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
47764776
info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
47774777
}
47784778

4779-
if (isClickable()) {
4779+
if (isClickable() && isEnabled()) {
47804780
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
47814781
}
47824782

4783-
if (isLongClickable()) {
4783+
if (isLongClickable() && isEnabled()) {
47844784
info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
47854785
}
47864786

core/java/android/widget/AbsListView.java

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,11 +1470,13 @@ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
14701470
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
14711471
super.onInitializeAccessibilityNodeInfo(info);
14721472
info.setClassName(AbsListView.class.getName());
1473-
if (getFirstVisiblePosition() > 0) {
1474-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
1475-
}
1476-
if (getLastVisiblePosition() < getCount() - 1) {
1477-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
1473+
if (isEnabled()) {
1474+
if (getFirstVisiblePosition() > 0) {
1475+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
1476+
}
1477+
if (getLastVisiblePosition() < getCount() - 1) {
1478+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
1479+
}
14781480
}
14791481
}
14801482

@@ -1485,14 +1487,14 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
14851487
}
14861488
switch (action) {
14871489
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
1488-
if (getLastVisiblePosition() < getCount() - 1) {
1490+
if (isEnabled() && getLastVisiblePosition() < getCount() - 1) {
14891491
final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom;
14901492
smoothScrollBy(viewportHeight, PositionScroller.SCROLL_DURATION);
14911493
return true;
14921494
}
14931495
} return false;
14941496
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
1495-
if (mFirstPosition > 0) {
1497+
if (isEnabled() && mFirstPosition > 0) {
14961498
final int viewportHeight = getHeight() - mListPadding.top - mListPadding.bottom;
14971499
smoothScrollBy(-viewportHeight, PositionScroller.SCROLL_DURATION);
14981500
return true;
@@ -2294,17 +2296,19 @@ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo i
22942296
return;
22952297
}
22962298

2297-
if (isClickable()) {
2299+
if (isClickable() && isEnabled()) {
22982300
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
22992301
info.setClickable(true);
23002302
}
23012303

2302-
if (isLongClickable()) {
2304+
if (isLongClickable() && isEnabled()) {
23032305
info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
23042306
info.setLongClickable(true);
23052307
}
23062308

2307-
info.addAction(AccessibilityNodeInfo.ACTION_SELECT);
2309+
if (isEnabled()) {
2310+
info.addAction(AccessibilityNodeInfo.ACTION_SELECT);
2311+
}
23082312

23092313
if (position == getSelectedItemPosition()) {
23102314
info.setSelected(true);
@@ -2313,34 +2317,40 @@ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo i
23132317

23142318
@Override
23152319
public boolean performAccessibilityAction(View host, int action, Bundle arguments) {
2320+
if (super.performAccessibilityAction(host, action, arguments)) {
2321+
return true;
2322+
}
2323+
23162324
final int position = getPositionForView(host);
23172325

23182326
if (position == INVALID_POSITION) {
23192327
return false;
23202328
}
23212329

2330+
if (!isEnabled()) {
2331+
return false;
2332+
}
2333+
23222334
final long id = getItemIdAtPosition(position);
23232335

23242336
switch (action) {
2325-
case AccessibilityNodeInfo.ACTION_SELECT:
2337+
case AccessibilityNodeInfo.ACTION_SELECT: {
23262338
setSelection(position);
23272339
return true;
2328-
case AccessibilityNodeInfo.ACTION_CLICK:
2329-
if (!super.performAccessibilityAction(host, action, arguments)) {
2340+
}
2341+
case AccessibilityNodeInfo.ACTION_CLICK: {
2342+
if (isClickable()) {
23302343
return performItemClick(host, position, id);
23312344
}
2332-
return true;
2333-
case AccessibilityNodeInfo.ACTION_LONG_CLICK:
2334-
if (!super.performAccessibilityAction(host, action, arguments)) {
2345+
} return false;
2346+
case AccessibilityNodeInfo.ACTION_LONG_CLICK: {
2347+
if (isLongClickable()) {
23352348
return performLongPress(host, position, id);
23362349
}
2337-
return true;
2338-
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS:
2339-
smoothScrollToPosition(position);
2340-
break;
2350+
} return false;
23412351
}
23422352

2343-
return super.performAccessibilityAction(host, action, arguments);
2353+
return false;
23442354
}
23452355
}
23462356

core/java/android/widget/Gallery.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,11 +1369,13 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
13691369
super.onInitializeAccessibilityNodeInfo(info);
13701370
info.setClassName(Gallery.class.getName());
13711371
info.setScrollable(mItemCount > 1);
1372-
if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) {
1373-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
1374-
}
1375-
if (mItemCount > 0 && mSelectedPosition > 0) {
1376-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
1372+
if (isEnabled()) {
1373+
if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) {
1374+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
1375+
}
1376+
if (isEnabled() && mItemCount > 0 && mSelectedPosition > 0) {
1377+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
1378+
}
13771379
}
13781380
}
13791381

@@ -1384,13 +1386,13 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
13841386
}
13851387
switch (action) {
13861388
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
1387-
if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) {
1389+
if (isEnabled() && mItemCount > 0 && mSelectedPosition < mItemCount - 1) {
13881390
final int currentChildIndex = mSelectedPosition - mFirstPosition;
13891391
return scrollToChild(currentChildIndex + 1);
13901392
}
13911393
} return false;
13921394
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
1393-
if (mItemCount > 0 && mSelectedPosition > 0) {
1395+
if (isEnabled() && mItemCount > 0 && mSelectedPosition > 0) {
13941396
final int currentChildIndex = mSelectedPosition - mFirstPosition;
13951397
return scrollToChild(currentChildIndex - 1);
13961398
}

core/java/android/widget/HorizontalScrollView.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,9 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
744744
}
745745
switch (action) {
746746
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
747+
if (!isEnabled()) {
748+
return false;
749+
}
747750
final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight;
748751
final int targetScrollX = Math.min(mScrollX + viewportWidth, getScrollRange());
749752
if (targetScrollX != mScrollX) {
@@ -752,6 +755,9 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
752755
}
753756
} return false;
754757
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
758+
if (!isEnabled()) {
759+
return false;
760+
}
755761
final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight;
756762
final int targetScrollX = Math.max(0, mScrollX - viewportWidth);
757763
if (targetScrollX != mScrollX) {
@@ -770,10 +776,10 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
770776
final int scrollRange = getScrollRange();
771777
if (scrollRange > 0) {
772778
info.setScrollable(true);
773-
if (mScrollX > 0) {
779+
if (isEnabled() && mScrollX > 0) {
774780
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
775781
}
776-
if (mScrollX < scrollRange) {
782+
if (isEnabled() && mScrollX < scrollRange) {
777783
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
778784
}
779785
}

core/java/android/widget/NumberPicker.java

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2173,13 +2173,15 @@ public boolean performAction(int virtualViewId, int action, Bundle arguments) {
21732173
return false;
21742174
}
21752175
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
2176-
if (getWrapSelectorWheel() || getValue() < getMaxValue()) {
2176+
if (NumberPicker.this.isEnabled()
2177+
&& (getWrapSelectorWheel() || getValue() < getMaxValue())) {
21772178
changeValueByOne(true);
21782179
return true;
21792180
}
21802181
} return false;
21812182
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
2182-
if (getWrapSelectorWheel() || getValue() > getMinValue()) {
2183+
if (NumberPicker.this.isEnabled()
2184+
&& (getWrapSelectorWheel() || getValue() > getMinValue())) {
21832185
changeValueByOne(false);
21842186
return true;
21852187
}
@@ -2189,20 +2191,23 @@ public boolean performAction(int virtualViewId, int action, Bundle arguments) {
21892191
case VIRTUAL_VIEW_ID_INPUT: {
21902192
switch (action) {
21912193
case AccessibilityNodeInfo.ACTION_FOCUS: {
2192-
if (!mInputText.isFocused()) {
2194+
if (NumberPicker.this.isEnabled() && !mInputText.isFocused()) {
21932195
return mInputText.requestFocus();
21942196
}
21952197
} break;
21962198
case AccessibilityNodeInfo.ACTION_CLEAR_FOCUS: {
2197-
if (mInputText.isFocused()) {
2199+
if (NumberPicker.this.isEnabled() && mInputText.isFocused()) {
21982200
mInputText.clearFocus();
21992201
return true;
22002202
}
22012203
return false;
22022204
}
22032205
case AccessibilityNodeInfo.ACTION_CLICK: {
2204-
showSoftInput();
2205-
return true;
2206+
if (NumberPicker.this.isEnabled()) {
2207+
showSoftInput();
2208+
return true;
2209+
}
2210+
return false;
22062211
}
22072212
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: {
22082213
if (mAccessibilityFocusedView != virtualViewId) {
@@ -2230,10 +2235,13 @@ public boolean performAction(int virtualViewId, int action, Bundle arguments) {
22302235
case VIRTUAL_VIEW_ID_INCREMENT: {
22312236
switch (action) {
22322237
case AccessibilityNodeInfo.ACTION_CLICK: {
2233-
NumberPicker.this.changeValueByOne(true);
2234-
sendAccessibilityEventForVirtualView(virtualViewId,
2235-
AccessibilityEvent.TYPE_VIEW_CLICKED);
2236-
} return true;
2238+
if (NumberPicker.this.isEnabled()) {
2239+
NumberPicker.this.changeValueByOne(true);
2240+
sendAccessibilityEventForVirtualView(virtualViewId,
2241+
AccessibilityEvent.TYPE_VIEW_CLICKED);
2242+
return true;
2243+
}
2244+
} return false;
22372245
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: {
22382246
if (mAccessibilityFocusedView != virtualViewId) {
22392247
mAccessibilityFocusedView = virtualViewId;
@@ -2257,11 +2265,14 @@ public boolean performAction(int virtualViewId, int action, Bundle arguments) {
22572265
case VIRTUAL_VIEW_ID_DECREMENT: {
22582266
switch (action) {
22592267
case AccessibilityNodeInfo.ACTION_CLICK: {
2260-
final boolean increment = (virtualViewId == VIRTUAL_VIEW_ID_INCREMENT);
2261-
NumberPicker.this.changeValueByOne(increment);
2262-
sendAccessibilityEventForVirtualView(virtualViewId,
2263-
AccessibilityEvent.TYPE_VIEW_CLICKED);
2264-
} return true;
2268+
if (NumberPicker.this.isEnabled()) {
2269+
final boolean increment = (virtualViewId == VIRTUAL_VIEW_ID_INCREMENT);
2270+
NumberPicker.this.changeValueByOne(increment);
2271+
sendAccessibilityEventForVirtualView(virtualViewId,
2272+
AccessibilityEvent.TYPE_VIEW_CLICKED);
2273+
return true;
2274+
}
2275+
} return false;
22652276
case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS: {
22662277
if (mAccessibilityFocusedView != virtualViewId) {
22672278
mAccessibilityFocusedView = virtualViewId;
@@ -2470,7 +2481,9 @@ private AccessibilityNodeInfo createAccessibilityNodeInfoForVirtualButton(int vi
24702481
if (mAccessibilityFocusedView == virtualViewId) {
24712482
info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
24722483
}
2473-
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
2484+
if (NumberPicker.this.isEnabled()) {
2485+
info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
2486+
}
24742487

24752488
return info;
24762489
}
@@ -2509,11 +2522,13 @@ private AccessibilityNodeInfo createAccessibilityNodeInfoForNumberPicker(int lef
25092522
if (mAccessibilityFocusedView == View.NO_ID) {
25102523
info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
25112524
}
2512-
if (getWrapSelectorWheel() || getValue() < getMaxValue()) {
2513-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
2514-
}
2515-
if (getWrapSelectorWheel() || getValue() > getMinValue()) {
2516-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
2525+
if (NumberPicker.this.isEnabled()) {
2526+
if (getWrapSelectorWheel() || getValue() < getMaxValue()) {
2527+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
2528+
}
2529+
if (getWrapSelectorWheel() || getValue() > getMinValue()) {
2530+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
2531+
}
25172532
}
25182533

25192534
return info;

core/java/android/widget/ScrollView.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,9 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
745745
if (super.performAccessibilityAction(action, arguments)) {
746746
return true;
747747
}
748+
if (!isEnabled()) {
749+
return false;
750+
}
748751
switch (action) {
749752
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
750753
final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop;
@@ -770,14 +773,16 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
770773
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
771774
super.onInitializeAccessibilityNodeInfo(info);
772775
info.setClassName(ScrollView.class.getName());
773-
final int scrollRange = getScrollRange();
774-
if (scrollRange > 0) {
775-
info.setScrollable(true);
776-
if (mScrollY > 0) {
777-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
778-
}
779-
if (mScrollY < scrollRange) {
780-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
776+
if (isEnabled()) {
777+
final int scrollRange = getScrollRange();
778+
if (scrollRange > 0) {
779+
info.setScrollable(true);
780+
if (mScrollY > 0) {
781+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
782+
}
783+
if (mScrollY < scrollRange) {
784+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
785+
}
781786
}
782787
}
783788
}

core/java/android/widget/StackView.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,11 +1230,13 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
12301230
super.onInitializeAccessibilityNodeInfo(info);
12311231
info.setClassName(StackView.class.getName());
12321232
info.setScrollable(getChildCount() > 1);
1233-
if (getDisplayedChild() < getChildCount() - 1) {
1234-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
1235-
}
1236-
if (getDisplayedChild() > 0) {
1237-
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
1233+
if (isEnabled()) {
1234+
if (getDisplayedChild() < getChildCount() - 1) {
1235+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
1236+
}
1237+
if (getDisplayedChild() > 0) {
1238+
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
1239+
}
12381240
}
12391241
}
12401242

@@ -1243,6 +1245,9 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
12431245
if (super.performAccessibilityAction(action, arguments)) {
12441246
return true;
12451247
}
1248+
if (!isEnabled()) {
1249+
return false;
1250+
}
12461251
switch (action) {
12471252
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
12481253
if (getDisplayedChild() < getChildCount() - 1) {

core/java/android/widget/TextView.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7739,8 +7739,7 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
77397739
info.setText(getTextForAccessibility());
77407740
}
77417741

7742-
if (TextUtils.isEmpty(getContentDescription())
7743-
&& !TextUtils.isEmpty(mText)) {
7742+
if (TextUtils.isEmpty(getContentDescription()) && !TextUtils.isEmpty(mText)) {
77447743
info.addAction(AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY);
77457744
info.addAction(AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY);
77467745
info.setMovementGranularities(AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER

0 commit comments

Comments
 (0)