Merge "Enabled (asymmetric) tab selection in GridView" into oc-dev am: 3653aed87b
am: f742df0ba1

Change-Id: I2d84da452136d2dda45d0f16034ecd35397179f7
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 82071d7..fcb44af 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -1718,20 +1718,17 @@
                     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 @@
 
         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);