From 4fc8287c78adee312a51180330021522ccf79690 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 10 Nov 2015 16:52:14 -0800 Subject: Handle more cases in FocusHelper#handleHotseatButtonKeyEvent(). The first of these cases seems like they should already have been present, and the last couple allow you to switch pages by hitting arrow keys on the edges of the hotseat. Bug: 25589939 Change-Id: I9378b209250f7dc376fa97efde979bcee2979537 --- src/com/android/launcher3/FocusHelper.java | 42 ++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index 8516afb4e..44403e2df 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -174,7 +174,7 @@ public class FocusHelper { } /** - * Handles key events in the workspace hot seat (bottom of the screen). + * Handles key events in the workspace hotseat (bottom of the screen). *

Currently we don't special case for the phone UI in different orientations, even though * the hotseat is on the side in landscape mode. This is to ensure that accessibility * consistency is maintained across rotations. @@ -263,12 +263,38 @@ public class FocusHelper { countY, matrix, iconIndex, pageIndex, pageCount, Utilities.isRtl(v.getResources())); View newIcon = null; - if (newIconIndex == FocusLogic.NEXT_PAGE_FIRST_ITEM) { - parent = getCellLayoutChildrenForIndex(workspace, pageIndex + 1); - newIcon = parent.getChildAt(0); - // TODO(hyunyoungs): handle cases where the child is not an icon but - // a folder or a widget. - workspace.snapToPage(pageIndex + 1); + switch (newIconIndex) { + case FocusLogic.NEXT_PAGE_FIRST_ITEM: + parent = getCellLayoutChildrenForIndex(workspace, pageIndex + 1); + newIcon = parent.getChildAt(0); + // TODO(hyunyoungs): handle cases where the child is not an icon but + // a folder or a widget. + workspace.snapToPage(pageIndex + 1); + break; + case FocusLogic.PREVIOUS_PAGE_FIRST_ITEM: + parent = getCellLayoutChildrenForIndex(workspace, pageIndex - 1); + newIcon = parent.getChildAt(0); + // TODO(hyunyoungs): handle cases where the child is not an icon but + // a folder or a widget. + workspace.snapToPage(pageIndex - 1); + break; + case FocusLogic.PREVIOUS_PAGE_LAST_ITEM: + parent = getCellLayoutChildrenForIndex(workspace, pageIndex - 1); + newIcon = parent.getChildAt(parent.getChildCount() - 1); + // TODO(hyunyoungs): handle cases where the child is not an icon but + // a folder or a widget. + workspace.snapToPage(pageIndex - 1); + break; + case FocusLogic.PREVIOUS_PAGE_LEFT_COLUMN: + case FocusLogic.PREVIOUS_PAGE_RIGHT_COLUMN: + // Go to the previous page but keep the focus on the same hotseat icon. + workspace.snapToPage(pageIndex - 1); + break; + case FocusLogic.NEXT_PAGE_LEFT_COLUMN: + case FocusLogic.NEXT_PAGE_RIGHT_COLUMN: + // Go to the next page but keep the focus on the same hotseat icon. + workspace.snapToPage(pageIndex + 1); + break; } if (parent == iconParent && newIconIndex >= iconParent.getChildCount()) { newIconIndex -= iconParent.getChildCount(); @@ -368,7 +394,7 @@ public class FocusHelper { if (parent != null) { iconLayout = (CellLayout) parent.getParent(); matrix = FocusLogic.createSparseMatrix(iconLayout, - iconLayout.getCountX(), row); + iconLayout.getCountX(), row); newIconIndex = FocusLogic.handleKeyEvent(keyCode, countX + 1, countY, matrix, FocusLogic.PIVOT, newPageIndex, pageCount, Utilities.isRtl(v.getResources())); -- cgit v1.2.3