Handling arrow keys in Overview

Bug: 73090995
Test: Tab, Shift-Tab, left, right: when overview is opened via Alt+Tab
or via touch.

Change-Id: Ifb05027da2f6b9c2a9a2320cec7015e5cc82d633
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 2709f40..db82286 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -609,6 +609,10 @@
         set.play(anim);
     }
 
+    private void snapToPageRelative(int delta) {
+        snapToPage((getNextPage() + getPageCount() + delta) % getPageCount());
+    }
+
     @Override
     public void onVisibilityAggregated(boolean isVisible) {
         super.onVisibilityAggregated(isVisible);
@@ -621,19 +625,24 @@
 
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
-        if (event.getKeyCode() == KeyEvent.KEYCODE_TAB
-                && event.getAction() == KeyEvent.ACTION_DOWN) {
-            snapToPage((getNextPage()
-                    + (event.isShiftPressed() ? getPageCount() - 1 : 1)) % getPageCount());
-            loadVisibleTaskData();
-            return true;
+        if (event.getAction() == KeyEvent.ACTION_DOWN) {
+            switch (event.getKeyCode()) {
+                case KeyEvent.KEYCODE_TAB:
+                    snapToPageRelative(event.isShiftPressed() ? -1 : 1);
+                    return true;
+                case KeyEvent.KEYCODE_DPAD_RIGHT:
+                    snapToPageRelative(mIsRtl ? -1 : 1);
+                    return true;
+                case KeyEvent.KEYCODE_DPAD_LEFT:
+                    snapToPageRelative(mIsRtl ? 1 : -1);
+                    return true;
+            }
         }
         return super.dispatchKeyEvent(event);
     }
 
     public void snapToTaskAfterNext() {
-        snapToPage((getNextPage() + 1) % getPageCount());
-        loadVisibleTaskData();
+        snapToPageRelative(1);
     }
 
     public void launchNextTask() {