summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2011-01-26 19:31:18 -0800
committer Jeff Brown <jeffbrown@google.com> 2011-01-26 21:08:53 -0800
commit8d6d3b83fb765eefc6fd38de77f1f45d2523ab89 (patch)
tree33de31cb0452d1c3c2a39245ab849487a6505c85
parent85fd2c9102f7cf105bf498f05ca35360a4bcede5 (diff)
Fix down arrow in AutoCompleteTextView.
Bug: 3337416 Change-Id: I572d55c973b9adc68765ba02197e84f3558e65bc
-rw-r--r--core/java/android/widget/AbsListView.java11
-rw-r--r--core/java/android/widget/GridView.java78
-rw-r--r--core/java/android/widget/ListPopupWindow.java2
-rw-r--r--core/java/android/widget/ListView.java81
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;
}
}