diff options
| author | 2011-01-26 19:31:18 -0800 | |
|---|---|---|
| committer | 2011-01-26 21:08:53 -0800 | |
| commit | 8d6d3b83fb765eefc6fd38de77f1f45d2523ab89 (patch) | |
| tree | 33de31cb0452d1c3c2a39245ab849487a6505c85 | |
| parent | 85fd2c9102f7cf105bf498f05ca35360a4bcede5 (diff) | |
Fix down arrow in AutoCompleteTextView.
Bug: 3337416
Change-Id: I572d55c973b9adc68765ba02197e84f3558e65bc
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 11 | ||||
| -rw-r--r-- | core/java/android/widget/GridView.java | 78 | ||||
| -rw-r--r-- | core/java/android/widget/ListPopupWindow.java | 2 | ||||
| -rw-r--r-- | core/java/android/widget/ListView.java | 81 |
4 files changed, 94 insertions, 78 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 48e91ad6f082..3f38f2eec581 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -4467,15 +4467,14 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } /** - * If there is a selection returns true. - * Otherwise resurrects the selection and returns false. + * If there is a selection returns false. + * Otherwise resurrects the selection and returns true if resurrected. */ - boolean ensureSelectionOnMovementKey() { + boolean resurrectSelectionIfNeeded() { if (mSelectedPosition < 0) { - resurrectSelection(); - return false; + return resurrectSelection(); } - return true; + return false; } /** diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index c7addcc4cb33..a84df16d2d59 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1486,77 +1486,79 @@ public class GridView extends AbsListView { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_LEFT); + handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_LEFT); } break; case KeyEvent.KEYCODE_DPAD_RIGHT: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_RIGHT); + handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_RIGHT); } break; case KeyEvent.KEYCODE_DPAD_UP: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_UP); } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP); } break; case KeyEvent.KEYCODE_DPAD_DOWN: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_DOWN); } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN); } break; case KeyEvent.KEYCODE_DPAD_CENTER: - case KeyEvent.KEYCODE_ENTER: { - if (event.hasNoModifiers() - && event.getRepeatCount() == 0 && getChildCount() > 0) { - ensureSelectionOnMovementKey(); - keyPressed(); + case KeyEvent.KEYCODE_ENTER: + if (event.hasNoModifiers()) { + handled = resurrectSelectionIfNeeded(); + if (!handled + && event.getRepeatCount() == 0 && getChildCount() > 0) { + keyPressed(); + handled = true; + } } - return true; - } + break; case KeyEvent.KEYCODE_SPACE: if (mPopup == null || !mPopup.isShowing()) { if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN); } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); } } break; case KeyEvent.KEYCODE_PAGE_UP: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP); } break; case KeyEvent.KEYCODE_PAGE_DOWN: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN); } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN); } break; case KeyEvent.KEYCODE_MOVE_HOME: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP); } break; case KeyEvent.KEYCODE_MOVE_END: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN); } break; @@ -1569,32 +1571,34 @@ public class GridView extends AbsListView { // perhaps it should be configurable (and more comprehensive). if (false) { if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && sequenceScroll(FOCUS_FORWARD); + handled = resurrectSelectionIfNeeded() + || sequenceScroll(FOCUS_FORWARD); } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = ensureSelectionOnMovementKey() && sequenceScroll(FOCUS_BACKWARD); + handled = resurrectSelectionIfNeeded() + || sequenceScroll(FOCUS_BACKWARD); } } break; } } - if (!handled) { - handled = sendToTextFilter(keyCode, count, event); + if (handled) { + return true; } - if (handled) { + if (sendToTextFilter(keyCode, count, event)) { return true; - } else { - switch (action) { - case KeyEvent.ACTION_DOWN: - return super.onKeyDown(keyCode, event); - case KeyEvent.ACTION_UP: - return super.onKeyUp(keyCode, event); - case KeyEvent.ACTION_MULTIPLE: - return super.onKeyMultiple(keyCode, count, event); - default: - return false; - } + } + + switch (action) { + case KeyEvent.ACTION_DOWN: + return super.onKeyDown(keyCode, event); + case KeyEvent.ACTION_UP: + return super.onKeyUp(keyCode, event); + case KeyEvent.ACTION_MULTIPLE: + return super.onKeyMultiple(keyCode, count, event); + default: + return false; } } diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index 444a163d385d..5dc42e44ae9f 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -774,7 +774,7 @@ public class ListPopupWindow { } /** - * Filter key down events. By forwarding key up events to this function, + * Filter key down events. By forwarding key down events to this function, * views using non-modal ListPopupWindow can have it handle key selection of items. * * @param keyCode keyCode param passed to the host view's onKeyDown diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index a107c600b62f..12a0ebf254e0 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -2081,25 +2081,35 @@ public class ListView extends AbsListView { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: if (event.hasNoModifiers()) { - if (ensureSelectionOnMovementKey()) { + handled = resurrectSelectionIfNeeded(); + if (!handled) { while (count-- > 0) { - handled |= arrowScroll(FOCUS_UP); + if (arrowScroll(FOCUS_UP)) { + handled = true; + } else { + break; + } } } } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP); } break; case KeyEvent.KEYCODE_DPAD_DOWN: if (event.hasNoModifiers()) { - if (ensureSelectionOnMovementKey()) { + handled = resurrectSelectionIfNeeded(); + if (!handled) { while (count-- > 0) { - handled |= arrowScroll(FOCUS_DOWN); + if (arrowScroll(FOCUS_DOWN)) { + handled = true; + } else { + break; + } } } } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN); } break; @@ -2117,19 +2127,22 @@ public class ListView extends AbsListView { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: - if (mItemCount > 0 && event.getRepeatCount() == 0) { - ensureSelectionOnMovementKey(); - keyPressed(); + if (event.hasNoModifiers()) { + handled = resurrectSelectionIfNeeded(); + if (!handled + && event.getRepeatCount() == 0 && getChildCount() > 0) { + keyPressed(); + handled = true; + } } - handled = true; break; case KeyEvent.KEYCODE_SPACE: if (mPopup == null || !mPopup.isShowing()) { if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN); } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); } handled = true; } @@ -2137,29 +2150,29 @@ public class ListView extends AbsListView { case KeyEvent.KEYCODE_PAGE_UP: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP); } break; case KeyEvent.KEYCODE_PAGE_DOWN: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN); } else if (event.hasModifiers(KeyEvent.META_ALT_ON)) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN); } break; case KeyEvent.KEYCODE_MOVE_HOME: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP); } break; case KeyEvent.KEYCODE_MOVE_END: if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN); } break; @@ -2172,35 +2185,35 @@ public class ListView extends AbsListView { // perhaps it should be configurable (and more comprehensive). if (false) { if (event.hasNoModifiers()) { - handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_DOWN); + handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_DOWN); } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_UP); + handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_UP); } } break; } } - if (!handled) { - handled = sendToTextFilter(keyCode, count, event); + if (handled) { + return true; } - if (handled) { + if (sendToTextFilter(keyCode, count, event)) { return true; - } else { - switch (action) { - case KeyEvent.ACTION_DOWN: - return super.onKeyDown(keyCode, event); + } - case KeyEvent.ACTION_UP: - return super.onKeyUp(keyCode, event); + switch (action) { + case KeyEvent.ACTION_DOWN: + return super.onKeyDown(keyCode, event); - case KeyEvent.ACTION_MULTIPLE: - return super.onKeyMultiple(keyCode, count, event); + case KeyEvent.ACTION_UP: + return super.onKeyUp(keyCode, event); - default: // shouldn't happen - return false; - } + case KeyEvent.ACTION_MULTIPLE: + return super.onKeyMultiple(keyCode, count, event); + + default: // shouldn't happen + return false; } } |