diff options
| author | yingleiw <yingleiw@google.com> | 2019-07-25 18:27:56 -0700 |
|---|---|---|
| committer | yingleiw <yingleiw@google.com> | 2019-07-31 13:59:42 -0700 |
| commit | 7b2e888fd8b238338b1175cd26611d3638e1532b (patch) | |
| tree | bf5f129796182992ef07caf606b25a337aa17439 /core/java/android/widget/StackView.java | |
| parent | e0ad59435c3856ce4031a5237071655e56a82745 (diff) | |
add directional accessibility page actions to StackView
StackView has ITEMS_SLIDE_UP mode and ITEMS_SLIDE_DOWN mode. In
ITEMS_SLIDE_UP mode, scroll forward is slide up and all pages go up
(page down action), scroll backward is slide down and all pages go down
(page up action). In ITEMS_SLIDE_DOWN mode, it is the opposite.
A video in ITEMS_SLIDE_UP MODE is here:
https://drive.google.com/file/d/1m5awAP7ja8tqSaSvNM_oDoVbaUeCa3l6/view?usp=sharing
Test: Tested with twisted talkback that in ITEMS_SLIDE_DOWN mode, page
down action is equivalent to scroll backward, and page up is equivalent
to scroll forward.
Bug: 136277517
Change-Id: I52b2af231781fa04cec5815db2e573a9014e434b
Diffstat (limited to 'core/java/android/widget/StackView.java')
| -rw-r--r-- | core/java/android/widget/StackView.java | 58 |
1 files changed, 47 insertions, 11 deletions
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java index 5091eea1898d..ad3563316854 100644 --- a/core/java/android/widget/StackView.java +++ b/core/java/android/widget/StackView.java @@ -42,6 +42,8 @@ import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.LinearInterpolator; import android.widget.RemoteViews.RemoteView; +import com.android.internal.R; + import java.lang.ref.WeakReference; @RemoteView @@ -1241,14 +1243,40 @@ public class StackView extends AdapterViewAnimator { info.setScrollable(getChildCount() > 1); if (isEnabled()) { if (getDisplayedChild() < getChildCount() - 1) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD); + if (mStackMode == ITEMS_SLIDE_UP) { + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_DOWN); + } else { + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_UP); + } } if (getDisplayedChild() > 0) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD); + if (mStackMode == ITEMS_SLIDE_UP) { + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_UP); + } else { + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_DOWN); + } } } } + private boolean goForward() { + if (getDisplayedChild() < getChildCount() - 1) { + showNext(); + return true; + } + return false; + } + + private boolean goBackward() { + if (getDisplayedChild() > 0) { + showPrevious(); + return true; + } + return false; + } + /** @hide */ @Override public boolean performAccessibilityActionInternal(int action, Bundle arguments) { @@ -1260,17 +1288,25 @@ public class StackView extends AdapterViewAnimator { } switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { - if (getDisplayedChild() < getChildCount() - 1) { - showNext(); - return true; - } - } return false; + return goForward(); + } case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: { - if (getDisplayedChild() > 0) { - showPrevious(); - return true; + return goBackward(); + } + case R.id.accessibilityActionPageUp: { + if (mStackMode == ITEMS_SLIDE_UP) { + return goBackward(); + } else { + return goForward(); + } + } + case R.id.accessibilityActionPageDown: { + if (mStackMode == ITEMS_SLIDE_UP) { + return goForward(); + } else { + return goBackward(); } - } return false; + } } return false; } |
