From 8fbd56e1390c874300df882bfa46e74ad32d9514 Mon Sep 17 00:00:00 2001 From: Vadim Tryshev Date: Tue, 22 May 2018 18:09:28 -0700 Subject: Fixing arrow navigation in task carousel Bug: 80155387 Change-Id: Icbdca2e8ad2a0e7e7dfbc8493942787d9fa58a62 --- .../com/android/quickstep/views/RecentsView.java | 34 +++++++++------------- .../quickstep/views/RecentsViewContainer.java | 8 +++++ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 829ed6c7a..0358028bc 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -930,11 +930,16 @@ public abstract class RecentsView extends PagedView impl set.play(anim); } - private void snapToPageRelative(int delta) { + private boolean snapToPageRelative(int delta, boolean cycle) { if (getPageCount() == 0) { - return; + return false; + } + final int newPageUnbound = getNextPage() + delta; + if (!cycle && (newPageUnbound < 0 || newPageUnbound >= getChildCount())) { + return false; } - snapToPage((getNextPage() + getPageCount() + delta) % getPageCount()); + snapToPage((newPageUnbound + getPageCount()) % getPageCount()); + return true; } @Override @@ -970,21 +975,12 @@ public abstract class RecentsView extends PagedView impl if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_TAB: - if (!event.isAltPressed() && - getNextPage() == - (event.isShiftPressed() ? 0 : getChildCount() - 1)) { - // If not Alt-Tab navigation, don't loop forever in the carousel and leave - // it once we reached the end. - return false; - } - snapToPageRelative(event.isShiftPressed() ? -1 : 1); - return true; + return snapToPageRelative(event.isShiftPressed() ? -1 : 1, + event.isAltPressed() /* cycle */); case KeyEvent.KEYCODE_DPAD_RIGHT: - snapToPageRelative(mIsRtl ? -1 : 1); - return true; + return snapToPageRelative(mIsRtl ? -1 : 1, false /* cycle */); case KeyEvent.KEYCODE_DPAD_LEFT: - snapToPageRelative(mIsRtl ? 1 : -1); - return true; + return snapToPageRelative(mIsRtl ? 1 : -1, false /* cycle */); case KeyEvent.KEYCODE_DEL: case KeyEvent.KEYCODE_FORWARD_DEL: dismissTask((TaskView) getChildAt(getNextPage()), true /*animateTaskView*/, @@ -1012,16 +1008,14 @@ public abstract class RecentsView extends PagedView impl setCurrentPage(0); break; case FOCUS_BACKWARD: + case FOCUS_RIGHT: + case FOCUS_LEFT: setCurrentPage(getChildCount() - 1); break; } } } - public void snapToTaskAfterNext() { - snapToPageRelative(1); - } - public float getContentAlpha() { return mContentAlpha; } diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java index 846c28b56..3391214de 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java +++ b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java @@ -70,6 +70,14 @@ public class RecentsViewContainer extends InsettableFrameLayout { mRecentsView.setClearAllButton(mClearAllButton); mClearAllButton.setRecentsView(mRecentsView); + + if (mRecentsView.isRtl()) { + mClearAllButton.setNextFocusRightId(mRecentsView.getId()); + mRecentsView.setNextFocusLeftId(mClearAllButton.getId()); + } else { + mClearAllButton.setNextFocusLeftId(mRecentsView.getId()); + mRecentsView.setNextFocusRightId(mClearAllButton.getId()); + } } @Override -- cgit v1.2.3