Merge "Fix down arrow in AutoCompleteTextView." into honeycomb
This commit is contained in:
@@ -4467,15 +4467,14 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If there is a selection returns true.
|
* If there is a selection returns false.
|
||||||
* Otherwise resurrects the selection and returns false.
|
* Otherwise resurrects the selection and returns true if resurrected.
|
||||||
*/
|
*/
|
||||||
boolean ensureSelectionOnMovementKey() {
|
boolean resurrectSelectionIfNeeded() {
|
||||||
if (mSelectedPosition < 0) {
|
if (mSelectedPosition < 0) {
|
||||||
resurrectSelection();
|
return resurrectSelection();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1486,77 +1486,79 @@ public class GridView extends AbsListView {
|
|||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case KeyEvent.KEYCODE_DPAD_LEFT:
|
case KeyEvent.KEYCODE_DPAD_LEFT:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_LEFT);
|
handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_LEFT);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_DPAD_RIGHT:
|
case KeyEvent.KEYCODE_DPAD_RIGHT:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_RIGHT);
|
handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_RIGHT);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_DPAD_UP:
|
case KeyEvent.KEYCODE_DPAD_UP:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_UP);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_DPAD_DOWN:
|
case KeyEvent.KEYCODE_DPAD_DOWN:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_DOWN);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_DPAD_CENTER:
|
case KeyEvent.KEYCODE_DPAD_CENTER:
|
||||||
case KeyEvent.KEYCODE_ENTER: {
|
case KeyEvent.KEYCODE_ENTER:
|
||||||
if (event.hasNoModifiers()
|
if (event.hasNoModifiers()) {
|
||||||
&& event.getRepeatCount() == 0 && getChildCount() > 0) {
|
handled = resurrectSelectionIfNeeded();
|
||||||
ensureSelectionOnMovementKey();
|
if (!handled
|
||||||
keyPressed();
|
&& event.getRepeatCount() == 0 && getChildCount() > 0) {
|
||||||
|
keyPressed();
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_SPACE:
|
case KeyEvent.KEYCODE_SPACE:
|
||||||
if (mPopup == null || !mPopup.isShowing()) {
|
if (mPopup == null || !mPopup.isShowing()) {
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_PAGE_UP:
|
case KeyEvent.KEYCODE_PAGE_UP:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_PAGE_DOWN:
|
case KeyEvent.KEYCODE_PAGE_DOWN:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_MOVE_HOME:
|
case KeyEvent.KEYCODE_MOVE_HOME:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_MOVE_END:
|
case KeyEvent.KEYCODE_MOVE_END:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1569,32 +1571,34 @@ public class GridView extends AbsListView {
|
|||||||
// perhaps it should be configurable (and more comprehensive).
|
// perhaps it should be configurable (and more comprehensive).
|
||||||
if (false) {
|
if (false) {
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && sequenceScroll(FOCUS_FORWARD);
|
handled = resurrectSelectionIfNeeded()
|
||||||
|
|| sequenceScroll(FOCUS_FORWARD);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && sequenceScroll(FOCUS_BACKWARD);
|
handled = resurrectSelectionIfNeeded()
|
||||||
|
|| sequenceScroll(FOCUS_BACKWARD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!handled) {
|
|
||||||
handled = sendToTextFilter(keyCode, count, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (handled) {
|
if (handled) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
}
|
||||||
switch (action) {
|
|
||||||
case KeyEvent.ACTION_DOWN:
|
if (sendToTextFilter(keyCode, count, event)) {
|
||||||
return super.onKeyDown(keyCode, event);
|
return true;
|
||||||
case KeyEvent.ACTION_UP:
|
}
|
||||||
return super.onKeyUp(keyCode, event);
|
|
||||||
case KeyEvent.ACTION_MULTIPLE:
|
switch (action) {
|
||||||
return super.onKeyMultiple(keyCode, count, event);
|
case KeyEvent.ACTION_DOWN:
|
||||||
default:
|
return super.onKeyDown(keyCode, event);
|
||||||
return false;
|
case KeyEvent.ACTION_UP:
|
||||||
}
|
return super.onKeyUp(keyCode, event);
|
||||||
|
case KeyEvent.ACTION_MULTIPLE:
|
||||||
|
return super.onKeyMultiple(keyCode, count, event);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
* views using non-modal ListPopupWindow can have it handle key selection of items.
|
||||||
*
|
*
|
||||||
* @param keyCode keyCode param passed to the host view's onKeyDown
|
* @param keyCode keyCode param passed to the host view's onKeyDown
|
||||||
|
|||||||
@@ -2081,25 +2081,35 @@ public class ListView extends AbsListView {
|
|||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case KeyEvent.KEYCODE_DPAD_UP:
|
case KeyEvent.KEYCODE_DPAD_UP:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
if (ensureSelectionOnMovementKey()) {
|
handled = resurrectSelectionIfNeeded();
|
||||||
|
if (!handled) {
|
||||||
while (count-- > 0) {
|
while (count-- > 0) {
|
||||||
handled |= arrowScroll(FOCUS_UP);
|
if (arrowScroll(FOCUS_UP)) {
|
||||||
|
handled = true;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_DPAD_DOWN:
|
case KeyEvent.KEYCODE_DPAD_DOWN:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
if (ensureSelectionOnMovementKey()) {
|
handled = resurrectSelectionIfNeeded();
|
||||||
|
if (!handled) {
|
||||||
while (count-- > 0) {
|
while (count-- > 0) {
|
||||||
handled |= arrowScroll(FOCUS_DOWN);
|
if (arrowScroll(FOCUS_DOWN)) {
|
||||||
|
handled = true;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2117,19 +2127,22 @@ public class ListView extends AbsListView {
|
|||||||
|
|
||||||
case KeyEvent.KEYCODE_DPAD_CENTER:
|
case KeyEvent.KEYCODE_DPAD_CENTER:
|
||||||
case KeyEvent.KEYCODE_ENTER:
|
case KeyEvent.KEYCODE_ENTER:
|
||||||
if (mItemCount > 0 && event.getRepeatCount() == 0) {
|
if (event.hasNoModifiers()) {
|
||||||
ensureSelectionOnMovementKey();
|
handled = resurrectSelectionIfNeeded();
|
||||||
keyPressed();
|
if (!handled
|
||||||
|
&& event.getRepeatCount() == 0 && getChildCount() > 0) {
|
||||||
|
keyPressed();
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
handled = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_SPACE:
|
case KeyEvent.KEYCODE_SPACE:
|
||||||
if (mPopup == null || !mPopup.isShowing()) {
|
if (mPopup == null || !mPopup.isShowing()) {
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
@@ -2137,29 +2150,29 @@ public class ListView extends AbsListView {
|
|||||||
|
|
||||||
case KeyEvent.KEYCODE_PAGE_UP:
|
case KeyEvent.KEYCODE_PAGE_UP:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_PAGE_DOWN:
|
case KeyEvent.KEYCODE_PAGE_DOWN:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && pageScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_ALT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_MOVE_HOME:
|
case KeyEvent.KEYCODE_MOVE_HOME:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KeyEvent.KEYCODE_MOVE_END:
|
case KeyEvent.KEYCODE_MOVE_END:
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && fullScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || fullScroll(FOCUS_DOWN);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2172,35 +2185,35 @@ public class ListView extends AbsListView {
|
|||||||
// perhaps it should be configurable (and more comprehensive).
|
// perhaps it should be configurable (and more comprehensive).
|
||||||
if (false) {
|
if (false) {
|
||||||
if (event.hasNoModifiers()) {
|
if (event.hasNoModifiers()) {
|
||||||
handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_DOWN);
|
handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_DOWN);
|
||||||
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
} else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
|
||||||
handled = ensureSelectionOnMovementKey() && arrowScroll(FOCUS_UP);
|
handled = resurrectSelectionIfNeeded() || arrowScroll(FOCUS_UP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!handled) {
|
|
||||||
handled = sendToTextFilter(keyCode, count, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (handled) {
|
if (handled) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
}
|
||||||
switch (action) {
|
|
||||||
case KeyEvent.ACTION_DOWN:
|
|
||||||
return super.onKeyDown(keyCode, event);
|
|
||||||
|
|
||||||
case KeyEvent.ACTION_UP:
|
if (sendToTextFilter(keyCode, count, event)) {
|
||||||
return super.onKeyUp(keyCode, event);
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
case KeyEvent.ACTION_MULTIPLE:
|
switch (action) {
|
||||||
return super.onKeyMultiple(keyCode, count, event);
|
case KeyEvent.ACTION_DOWN:
|
||||||
|
return super.onKeyDown(keyCode, event);
|
||||||
|
|
||||||
default: // shouldn't happen
|
case KeyEvent.ACTION_UP:
|
||||||
return false;
|
return super.onKeyUp(keyCode, event);
|
||||||
}
|
|
||||||
|
case KeyEvent.ACTION_MULTIPLE:
|
||||||
|
return super.onKeyMultiple(keyCode, count, event);
|
||||||
|
|
||||||
|
default: // shouldn't happen
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user