diff options
| author | 2011-01-19 17:11:37 -0800 | |
|---|---|---|
| committer | 2011-01-19 17:11:37 -0800 | |
| commit | ed58d8ed8a50cbd8c5e01c4e51bcbbe4341d1dfd (patch) | |
| tree | 520b3e78fc8b4e3259aa48e94ecc981b21d651ab | |
| parent | 2cb866b948c38923b31331a9b2f031eb9d791e6e (diff) | |
| parent | d2766aec6a72eb73264281472a5164a75c6df799 (diff) | |
Merge "Fix bug 3112733 - Missing TLS encryption option in manual email account setup" into honeycomb
| -rw-r--r-- | core/java/android/widget/Spinner.java | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index 0baddcb97501..e38a69fde005 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -23,13 +23,14 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.res.TypedArray; import android.database.DataSetObserver; -import android.graphics.drawable.Drawable; import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; /** @@ -69,6 +70,8 @@ public class Spinner extends AbsSpinner implements OnClickListener { private int mGravity; + private LayoutObserver mLayoutObserver; + /** * Construct a new spinner with the given context's theme. * @@ -169,6 +172,7 @@ public class Spinner extends AbsSpinner implements OnClickListener { com.android.internal.R.styleable.Spinner_dropDownHorizontalOffset, 0)); mPopup = popup; + mLayoutObserver = new LayoutObserver(); break; } } @@ -421,6 +425,11 @@ public class Spinner extends AbsSpinner implements OnClickListener { handled = true; if (!mPopup.isShowing()) { + if (mLayoutObserver != null) { + final ViewTreeObserver vto = getViewTreeObserver(); + vto.addOnGlobalLayoutListener(mLayoutObserver); + vto.addOnScrollChangedListener(mLayoutObserver); + } mPopup.show(); } } @@ -668,6 +677,7 @@ public class Spinner extends AbsSpinner implements OnClickListener { super.show(); getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); setSelection(Spinner.this.getSelectedItemPosition()); + setOnDismissListener(mLayoutObserver); } @Override @@ -718,4 +728,28 @@ public class Spinner extends AbsSpinner implements OnClickListener { ViewGroup.LayoutParams.WRAP_CONTENT); } } + + private class LayoutObserver implements ViewTreeObserver.OnGlobalLayoutListener, + ViewTreeObserver.OnScrollChangedListener, PopupWindow.OnDismissListener { + @Override + public void onScrollChanged() { + if (mPopup != null && mPopup.isShowing()) { + mPopup.show(); + } + } + + @Override + public void onGlobalLayout() { + if (mPopup != null && mPopup.isShowing()) { + mPopup.show(); + } + } + + @Override + public void onDismiss() { + ViewTreeObserver vto = getViewTreeObserver(); + vto.removeGlobalOnLayoutListener(mLayoutObserver); + vto.removeOnScrollChangedListener(mLayoutObserver); + } + } } |