Skip to content

Commit 48d1586

Browse files
committed
Add accessibility scroll support to some widgets.
1. Added support for accessibility scroll action to some widgets that are scrollable. 2. Making the super call when handling an accessibility action in the views to call super first to allow an accessibility delegate to intercept the call. bug:5932640 Change-Id: I5eb37d64bf9fba1d5c596981132e0df717e2a18a
1 parent 78cb7cf commit 48d1586

File tree

6 files changed

+90
-3
lines changed

6 files changed

+90
-3
lines changed

core/java/android/widget/AbsListView.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1480,6 +1480,9 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
14801480

14811481
@Override
14821482
public boolean performAccessibilityAction(int action, Bundle arguments) {
1483+
if (super.performAccessibilityAction(action, arguments)) {
1484+
return true;
1485+
}
14831486
switch (action) {
14841487
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
14851488
if (getLastVisiblePosition() < getCount() - 1) {
@@ -1496,7 +1499,7 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
14961499
}
14971500
} return false;
14981501
}
1499-
return super.performAccessibilityAction(action, arguments);
1502+
return false;
15001503
}
15011504

15021505
/**

core/java/android/widget/Gallery.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.content.Context;
2121
import android.content.res.TypedArray;
2222
import android.graphics.Rect;
23+
import android.os.Bundle;
2324
import android.util.AttributeSet;
2425
import android.util.Log;
2526
import android.view.ContextMenu.ContextMenuInfo;
@@ -1367,6 +1368,35 @@ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
13671368
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
13681369
super.onInitializeAccessibilityNodeInfo(info);
13691370
info.setClassName(Gallery.class.getName());
1371+
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);
1377+
}
1378+
}
1379+
1380+
@Override
1381+
public boolean performAccessibilityAction(int action, Bundle arguments) {
1382+
if (super.performAccessibilityAction(action, arguments)) {
1383+
return true;
1384+
}
1385+
switch (action) {
1386+
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
1387+
if (mItemCount > 0 && mSelectedPosition < mItemCount - 1) {
1388+
final int currentChildIndex = mSelectedPosition - mFirstPosition;
1389+
return scrollToChild(currentChildIndex + 1);
1390+
}
1391+
} return false;
1392+
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
1393+
if (mItemCount > 0 && mSelectedPosition > 0) {
1394+
final int currentChildIndex = mSelectedPosition - mFirstPosition;
1395+
return scrollToChild(currentChildIndex - 1);
1396+
}
1397+
} return false;
1398+
}
1399+
return false;
13701400
}
13711401

13721402
/**

core/java/android/widget/HorizontalScrollView.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,9 @@ protected void onOverScrolled(int scrollX, int scrollY,
739739

740740
@Override
741741
public boolean performAccessibilityAction(int action, Bundle arguments) {
742+
if (super.performAccessibilityAction(action, arguments)) {
743+
return true;
744+
}
742745
switch (action) {
743746
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
744747
final int viewportWidth = getWidth() - mPaddingLeft - mPaddingRight;
@@ -757,7 +760,7 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
757760
}
758761
} return false;
759762
}
760-
return super.performAccessibilityAction(action, arguments);
763+
return false;
761764
}
762765

763766
@Override

core/java/android/widget/NumberPicker.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2172,6 +2172,18 @@ public boolean performAction(int virtualViewId, int action, Bundle arguments) {
21722172
}
21732173
return false;
21742174
}
2175+
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
2176+
if (getWrapSelectorWheel() || getValue() < getMaxValue()) {
2177+
changeValueByOne(true);
2178+
return true;
2179+
}
2180+
} return false;
2181+
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
2182+
if (getWrapSelectorWheel() || getValue() > getMinValue()) {
2183+
changeValueByOne(false);
2184+
return true;
2185+
}
2186+
} return false;
21752187
}
21762188
} break;
21772189
case VIRTUAL_VIEW_ID_INPUT: {
@@ -2497,6 +2509,12 @@ private AccessibilityNodeInfo createAccessibilityNodeInfoForNumberPicker(int lef
24972509
if (mAccessibilityFocusedView == View.NO_ID) {
24982510
info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
24992511
}
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);
2517+
}
25002518

25012519
return info;
25022520
}

core/java/android/widget/ScrollView.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,9 @@ protected void onOverScrolled(int scrollX, int scrollY,
742742

743743
@Override
744744
public boolean performAccessibilityAction(int action, Bundle arguments) {
745+
if (super.performAccessibilityAction(action, arguments)) {
746+
return true;
747+
}
745748
switch (action) {
746749
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
747750
final int viewportHeight = getHeight() - mPaddingBottom - mPaddingTop;
@@ -760,7 +763,7 @@ public boolean performAccessibilityAction(int action, Bundle arguments) {
760763
}
761764
} return false;
762765
}
763-
return super.performAccessibilityAction(action, arguments);
766+
return false;
764767
}
765768

766769
@Override

core/java/android/widget/StackView.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import android.graphics.RectF;
3333
import android.graphics.Region;
3434
import android.graphics.TableMaskFilter;
35+
import android.os.Bundle;
3536
import android.util.AttributeSet;
3637
import android.util.Log;
3738
import android.view.InputDevice;
@@ -1228,6 +1229,35 @@ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
12281229
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
12291230
super.onInitializeAccessibilityNodeInfo(info);
12301231
info.setClassName(StackView.class.getName());
1232+
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);
1238+
}
1239+
}
1240+
1241+
@Override
1242+
public boolean performAccessibilityAction(int action, Bundle arguments) {
1243+
if (super.performAccessibilityAction(action, arguments)) {
1244+
return true;
1245+
}
1246+
switch (action) {
1247+
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: {
1248+
if (getDisplayedChild() < getChildCount() - 1) {
1249+
showNext();
1250+
return true;
1251+
}
1252+
} return false;
1253+
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
1254+
if (getDisplayedChild() > 0) {
1255+
showPrevious();
1256+
return true;
1257+
}
1258+
} return false;
1259+
}
1260+
return false;
12311261
}
12321262

12331263
class LayoutParams extends ViewGroup.LayoutParams {

0 commit comments

Comments
 (0)