From 0fc0713253b0c1e7acb7067f7203f1313818fa37 Mon Sep 17 00:00:00 2001 From: Vadim Tryshev Date: Fri, 4 May 2018 12:08:54 -0700 Subject: [PATCH] Fixing reverted order of accessibility scrolling in Recents Bug: 78788182 Change-Id: I275381e65bbd2fa24e427fea0bb9ca44366e0357 Testing: Manual --- .../android/quickstep/views/RecentsView.java | 16 ++++++++ src/com/android/launcher3/PagedView.java | 37 +++++++++++++++---- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index ce460bc0d7..525e074bdb 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1255,4 +1255,20 @@ public abstract class RecentsView extends PagedView impl public void revealClearAllButton() { scrollTo(mIsRtl ? 0 : computeMaxScrollX(), 0); } + + @Override + public void addChildrenForAccessibility(ArrayList outChildren) { + if (FLIP_RECENTS) { + for (int i = getChildCount() - 1; i >= 0; --i) { + outChildren.add(getChildAt(i)); + } + } else { + super.addChildrenForAccessibility(outChildren); + } + } + + @Override + protected boolean isPageOrderFlipped() { + return FLIP_RECENTS; + } } diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 87ee076f36..57f13864d4 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1495,17 +1495,24 @@ public abstract class PagedView extends ViewGrou return ScrollView.class.getName(); } + protected boolean isPageOrderFlipped() { + return false; + } + /* Accessibility */ @SuppressWarnings("deprecation") @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); + final boolean pagesFlipped = isPageOrderFlipped(); info.setScrollable(getPageCount() > 1); if (getCurrentPage() < getPageCount() - 1) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); + info.addAction(pagesFlipped ? AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD + : AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); } if (getCurrentPage() > 0) { - info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); + info.addAction(pagesFlipped ? AccessibilityNodeInfo.ACTION_SCROLL_FORWARD + : AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD); } // Accessibility-wise, PagedView doesn't support long click, so disabling it. @@ -1529,24 +1536,40 @@ public abstract class PagedView extends ViewGrou event.setScrollable(getPageCount() > 1); } + private boolean accessibilityScrollLeft() { + if (getCurrentPage() > 0) { + scrollLeft(); + return true; + } + return false; + } + + private boolean accessibilityScrollRight() { + if (getCurrentPage() < getPageCount() - 1) { + scrollRight(); + return true; + } + return false; + } + @Override public boolean performAccessibilityAction(int action, Bundle arguments) { if (super.performAccessibilityAction(action, arguments)) { return true; } + final boolean pagesFlipped = isPageOrderFlipped(); switch (action) { case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: { - if (getCurrentPage() < getPageCount() - 1) { - scrollRight(); + if (pagesFlipped ? accessibilityScrollLeft() : accessibilityScrollRight()) { return true; } } break; case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: { - if (getCurrentPage() > 0) { - scrollLeft(); + if (pagesFlipped ? accessibilityScrollRight() : accessibilityScrollLeft()) { return true; } - } break; + } + break; } return false; }