summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Powell <adamp@google.com> 2011-01-19 17:11:37 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2011-01-19 17:11:37 -0800
commited58d8ed8a50cbd8c5e01c4e51bcbbe4341d1dfd (patch)
tree520b3e78fc8b4e3259aa48e94ecc981b21d651ab
parent2cb866b948c38923b31331a9b2f031eb9d791e6e (diff)
parentd2766aec6a72eb73264281472a5164a75c6df799 (diff)
Merge "Fix bug 3112733 - Missing TLS encryption option in manual email account setup" into honeycomb
-rw-r--r--core/java/android/widget/Spinner.java36
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);
+ }
+ }
}