Skip to content

Commit 0e3057c

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "Add accessibility scroll support to some widgets." into jb-dev
2 parents d6c1e49 + 48d1586 commit 0e3057c

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)