summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-01-26 19:23:27 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-01-26 19:23:27 +0000
commite1eff7aadeb0c9f6cc51f07166accd63710ea2c5 (patch)
tree7911e5ce2e4aebd72952a056b7495247de907ec5 /core/java
parent5ac22aa60f773917981f42e64fbc28615871fd3e (diff)
parentde8d28405538128fad55e34dc7c74fd49a909ae6 (diff)
downloadframeworks_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.java25
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);