From df01607380c81e26c1c90129aa22b2e1118e2b71 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Mon, 17 Aug 2009 12:51:30 -0700 Subject: [PATCH] Fix listview clicks with the trackball. --- core/java/android/widget/AbsListView.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index b7e8f1007f22e..67721c936fed6 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -546,6 +546,7 @@ public abstract class AbsListView extends AdapterView implements Te private void initAbsListView() { // Setting focusable in touch mode will set the focusable property to true + setClickable(true); setFocusableInTouchMode(true); setWillNotDraw(false); setAlwaysDrawnWithCacheEnabled(false); @@ -1433,6 +1434,10 @@ public abstract class AbsListView extends AdapterView implements Te * this is a long press. */ void keyPressed() { + if (!isEnabled() || !isClickable()) { + return; + } + Drawable selector = mSelector; Rect selectorRect = mSelectorRect; if (selector != null && (isFocused() || touchModeDrawsInPressedState()) @@ -1450,8 +1455,8 @@ public abstract class AbsListView extends AdapterView implements Te Drawable d = selector.getCurrent(); if (d != null && d instanceof TransitionDrawable) { if (longClickable) { - ((TransitionDrawable) d).startTransition(ViewConfiguration - .getLongPressTimeout()); + ((TransitionDrawable) d).startTransition( + ViewConfiguration.getLongPressTimeout()); } else { ((TransitionDrawable) d).resetTransition(); } @@ -1731,6 +1736,11 @@ public abstract class AbsListView extends AdapterView implements Te return false; } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + return false; + } + @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { @@ -1739,8 +1749,7 @@ public abstract class AbsListView extends AdapterView implements Te if (!isEnabled()) { return true; } - // Long clickable items don't necessarily have to be clickable - if (isClickable() && (event.getRepeatCount() == 0) && isPressed() && + if (isClickable() && isPressed() && mSelectedPosition >= 0 && mAdapter != null && mSelectedPosition < mAdapter.getCount()) {