diff options
author | Alan Viverette <alanv@google.com> | 2015-01-26 19:23:27 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-01-26 19:23:27 +0000 |
commit | e1eff7aadeb0c9f6cc51f07166accd63710ea2c5 (patch) | |
tree | 7911e5ce2e4aebd72952a056b7495247de907ec5 /core/java | |
parent | 5ac22aa60f773917981f42e64fbc28615871fd3e (diff) | |
parent | de8d28405538128fad55e34dc7c74fd49a909ae6 (diff) | |
download | frameworks_base-e1eff7aadeb0c9f6cc51f07166accd63710ea2c5.zip frameworks_base-e1eff7aadeb0c9f6cc51f07166accd63710ea2c5.tar.gz frameworks_base-e1eff7aadeb0c9f6cc51f07166accd63710ea2c5.tar.bz2 |
am de8d2840: Merge "Prevent drag-to-open from cycling pressed state, propagate hotspot" into lmp-mr1-dev
* commit 'de8d28405538128fad55e34dc7c74fd49a909ae6':
Prevent drag-to-open from cycling pressed state, propagate hotspot
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/widget/ListPopupWindow.java | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index fe8b08b..d85bbb9 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -1648,19 +1648,32 @@ public class ListPopupWindow { private void setPressedItem(View child, int position, float x, float y) { mDrawsInPressedState = true; - // Ordering is essential. First update the pressed state and layout - // the children. This will ensure the selector actually gets drawn. - setPressed(true); - layoutChildren(); + // Ordering is essential. First, update the container's pressed state. + drawableHotspotChanged(x, y); + if (!isPressed()) { + setPressed(true); + } + + // Next, run layout if we need to stabilize child positions. + if (mDataChanged) { + layoutChildren(); + } // Manage the pressed view based on motion position. This allows us to // play nicely with actual touch and scroll events. final View motionView = getChildAt(mMotionPosition - mFirstPosition); - if (motionView != null) { + if (motionView != null && motionView != child && motionView.isPressed()) { motionView.setPressed(false); } mMotionPosition = position; - child.setPressed(true); + + // Offset for child coordinates. + final float childX = x - child.getLeft(); + final float childY = y - child.getTop(); + child.drawableHotspotChanged(childX, childY); + if (!child.isPressed()) { + child.setPressed(true); + } // Ensure that keyboard focus starts from the last touched position. setSelectedPositionInt(position); |