diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 55cf56ff7c9f1..f037958f5cfc0 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -1779,6 +1779,7 @@ public class KeyEvent extends InputEvent implements Parcelable { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: + case KeyEvent.KEYCODE_SPACE: return true; default: return false; diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 6dd87a035d23f..9f5cfa8dc3d7d 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -10173,8 +10173,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Default implementation of {@link KeyEvent.Callback#onKeyUp(int, KeyEvent) * KeyEvent.Callback.onKeyUp()}: perform clicking of the view - * when {@link KeyEvent#KEYCODE_DPAD_CENTER} or - * {@link KeyEvent#KEYCODE_ENTER} is released. + * when {@link KeyEvent#KEYCODE_DPAD_CENTER}, {@link KeyEvent#KEYCODE_ENTER} + * or {@link KeyEvent#KEYCODE_SPACE} is released. *

Key presses in software keyboards will generally NOT trigger this listener, * although some may elect to do so in some situations. Do not rely on this to * catch software key presses. diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 607e955d56981..ee73092b3fb52 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1643,8 +1643,16 @@ public class GridView extends AbsListView { boolean handled = false; int action = event.getAction(); + if (KeyEvent.isConfirmKey(keyCode) + && event.hasNoModifiers() && action == KeyEvent.ACTION_UP) { + handled = resurrectSelectionIfNeeded(); + if (!handled && event.getRepeatCount() == 0 && getChildCount() > 0) { + keyPressed(); + handled = true; + } + } - if (action != KeyEvent.ACTION_UP) { + if (!handled && action != KeyEvent.ACTION_UP) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: if (event.hasNoModifiers()) { @@ -1674,28 +1682,6 @@ public class GridView extends AbsListView { } break; - case KeyEvent.KEYCODE_DPAD_CENTER: - case KeyEvent.KEYCODE_ENTER: - if (event.hasNoModifiers()) { - handled = resurrectSelectionIfNeeded(); - if (!handled - && event.getRepeatCount() == 0 && getChildCount() > 0) { - keyPressed(); - handled = true; - } - } - break; - - case KeyEvent.KEYCODE_SPACE: - if (mPopup == null || !mPopup.isShowing()) { - if (event.hasNoModifiers()) { - handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN); - } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); - } - } - break; - case KeyEvent.KEYCODE_PAGE_UP: if (event.hasNoModifiers()) { handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index b43ea76976e1c..c2ddf6f9a3ae3 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -2180,8 +2180,17 @@ public class ListView extends AbsListView { boolean handled = false; int action = event.getAction(); + if (KeyEvent.isConfirmKey(keyCode) + && event.hasNoModifiers() && action == KeyEvent.ACTION_UP) { + handled = resurrectSelectionIfNeeded(); + if (!handled && event.getRepeatCount() == 0 && getChildCount() > 0) { + keyPressed(); + handled = true; + } + } - if (action != KeyEvent.ACTION_UP) { + + if (!handled && action != KeyEvent.ACTION_UP) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: if (event.hasNoModifiers()) { @@ -2229,29 +2238,6 @@ public class ListView extends AbsListView { } break; - case KeyEvent.KEYCODE_DPAD_CENTER: - case KeyEvent.KEYCODE_ENTER: - if (event.hasNoModifiers()) { - handled = resurrectSelectionIfNeeded(); - if (!handled - && event.getRepeatCount() == 0 && getChildCount() > 0) { - keyPressed(); - handled = true; - } - } - break; - - case KeyEvent.KEYCODE_SPACE: - if (mPopup == null || !mPopup.isShowing()) { - if (event.hasNoModifiers()) { - handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_DOWN); - } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) { - handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP); - } - handled = true; - } - break; - case KeyEvent.KEYCODE_PAGE_UP: if (event.hasNoModifiers()) { handled = resurrectSelectionIfNeeded() || pageScroll(FOCUS_UP);