summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2010-03-30 16:26:36 -0700
committerAdam Powell <adamp@google.com>2010-03-30 16:26:36 -0700
commit005c0a445e32dfbf18bf93d209da857604925a58 (patch)
treea9a47bb56d69890eeba6fda68a73a22b3d559549 /core/java
parentd4610977d9217cbd70dd59f61914c74d1ca61036 (diff)
downloadframeworks_base-005c0a445e32dfbf18bf93d209da857604925a58.zip
frameworks_base-005c0a445e32dfbf18bf93d209da857604925a58.tar.gz
frameworks_base-005c0a445e32dfbf18bf93d209da857604925a58.tar.bz2
Fix bug 2523622 - ListView invokes onItemClick for disabled adapter items
AbsListView was relying on TOUCH_MODE_DOWN to signal that the item was enabled, but onInterceptTouchEvent uses it for other purposes. Check before dispatching the event. Change-Id: I6babd3872cb51ebdba8e97a3b349e0cc08cd1279
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/widget/AbsListView.java23
1 files changed, 12 insertions, 11 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index d615fd0..8ef2aeb 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1688,11 +1688,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// bail out before bad things happen
if (mDataChanged) return;
- if (mAdapter != null && mItemCount > 0 &&
- mClickMotionPosition != INVALID_POSITION &&
- mClickMotionPosition < mAdapter.getCount() && sameWindow()) {
- performItemClick(mChild, mClickMotionPosition, getAdapter().getItemId(
- mClickMotionPosition));
+ final ListAdapter adapter = mAdapter;
+ final int motionPosition = mClickMotionPosition;
+ if (adapter != null && mItemCount > 0 &&
+ motionPosition != INVALID_POSITION &&
+ motionPosition < adapter.getCount() && sameWindow()) {
+ performItemClick(mChild, motionPosition, adapter.getItemId(motionPosition));
}
}
}
@@ -2118,8 +2119,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mPendingCheckForTap : mPendingCheckForLongPress);
}
mLayoutMode = LAYOUT_NORMAL;
- mTouchMode = TOUCH_MODE_TAP;
- if (!mDataChanged) {
+ if (!mDataChanged && mAdapter.isEnabled(motionPosition)) {
+ mTouchMode = TOUCH_MODE_TAP;
setSelectedPositionInt(mMotionPosition);
layoutChildren();
child.setPressed(true);
@@ -2141,12 +2142,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mTouchMode = TOUCH_MODE_REST;
}
}, ViewConfiguration.getPressedStateDuration());
+ } else {
+ mTouchMode = TOUCH_MODE_REST;
}
return true;
- } else {
- if (!mDataChanged) {
- post(performClick);
- }
+ } else if (!mDataChanged && mAdapter.isEnabled(motionPosition)) {
+ post(performClick);
}
}
mTouchMode = TOUCH_MODE_REST;