diff options
| author | Alan Viverette <alanv@google.com> | 2013-08-21 17:56:00 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-08-21 17:56:00 +0000 |
| commit | a2e88ef89611d69b65b1830cc5ffebfb679e9d4d (patch) | |
| tree | 65eaf556d9a02a9b7970b10ed13f501cd5b7fd80 /core/java/android/widget/Spinner.java | |
| parent | 5feb0ad1d234cc7146286e96f96ae162bd628363 (diff) | |
| parent | ca6a3611cdb28a514834adba35fcce2da6f2e7c2 (diff) | |
Merge "Move forwarding code to ListPopupWindow, add drag-to-open in Spinner" into klp-dev
Diffstat (limited to 'core/java/android/widget/Spinner.java')
| -rw-r--r-- | core/java/android/widget/Spinner.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index b707cefb7426..7c7df9655f4a 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -30,12 +30,14 @@ import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.ListPopupWindow.ForwardingListener; import android.widget.PopupWindow.OnDismissListener; @@ -76,7 +78,10 @@ public class Spinner extends AbsSpinner implements OnClickListener { * Use the theme-supplied value to select the dropdown mode. */ private static final int MODE_THEME = -1; - + + /** Forwarding listener used to implement drag-to-open. */ + private ForwardingListener mForwardingListener; + private SpinnerPopup mPopup; private DropDownAdapter mTempAdapter; int mDropDownWidth; @@ -173,7 +178,7 @@ public class Spinner extends AbsSpinner implements OnClickListener { } case MODE_DROPDOWN: { - DropdownPopup popup = new DropdownPopup(context, attrs, defStyle); + final DropdownPopup popup = new DropdownPopup(context, attrs, defStyle); mDropDownWidth = a.getLayoutDimension( com.android.internal.R.styleable.Spinner_dropDownWidth, @@ -193,6 +198,20 @@ public class Spinner extends AbsSpinner implements OnClickListener { } mPopup = popup; + mForwardingListener = new ForwardingListener(context) { + @Override + public ListPopupWindow getPopup() { + return popup; + } + + @Override + public boolean onForwardingStarted() { + if (!mPopup.isShowing()) { + mPopup.show(getTextDirection(), getTextAlignment()); + } + return true; + } + }; break; } } @@ -449,6 +468,15 @@ public class Spinner extends AbsSpinner implements OnClickListener { } @Override + public boolean onTouchEvent(MotionEvent event) { + if (mForwardingListener != null && mForwardingListener.onTouch(this, event)) { + return true; + } + + return super.onTouchEvent(event); + } + + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (mPopup != null && MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST) { |
