From 8c8ac8125ac93e87733994190bb54925d188bdc1 Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Mon, 15 May 2017 15:36:15 -0700 Subject: [PATCH] Enabled (asymmetric) tab selection in GridView We decided its better for tab to do something than to have no tab navigation within GridView. Also fixed a small bug that made backwards focus order not work right. Bug: 38264959 Test: Manually tested in test-app. Added basic CTS for tab keys Change-Id: I8236deed26e6d8b8cae0130359b104af4d9a244d --- core/java/android/widget/GridView.java | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 82071d747775..fcb44af672d5 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1718,20 +1718,17 @@ public class GridView extends AbsListView { break; case KeyEvent.KEYCODE_TAB: - // XXX Sometimes it is useful to be able to TAB through the items in + // TODO: Sometimes it is useful to be able to TAB through the items in // a GridView sequentially. Unfortunately this can create an // asymmetry in TAB navigation order unless the list selection // always reverts to the top or bottom when receiving TAB focus from - // another widget. Leaving this behavior disabled for now but - // perhaps it should be configurable (and more comprehensive). - if (false) { - if (event.hasNoModifiers()) { - handled = resurrectSelectionIfNeeded() - || sequenceScroll(FOCUS_FORWARD); - } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = resurrectSelectionIfNeeded() - || sequenceScroll(FOCUS_BACKWARD); - } + // another widget. + if (event.hasNoModifiers()) { + handled = resurrectSelectionIfNeeded() + || sequenceScroll(FOCUS_FORWARD); + } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { + handled = resurrectSelectionIfNeeded() + || sequenceScroll(FOCUS_BACKWARD); } break; } @@ -1991,7 +1988,7 @@ public class GridView extends AbsListView { if (!mStackFromBottom) { rowStart = childIndex - (childIndex % mNumColumns); - rowEnd = Math.max(rowStart + mNumColumns - 1, count); + rowEnd = Math.min(rowStart + mNumColumns - 1, count); } else { rowEnd = count - 1 - (invertedIndex - (invertedIndex % mNumColumns)); rowStart = Math.max(0, rowEnd - mNumColumns + 1); -- 2.11.0