Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 818a7bbf authored by Adam Powell's avatar Adam Powell Committed by Android (Google) Code Review
Browse files

Merge "Better fix for bug 3112733" into honeycomb

parents a6abd062 5f83a601
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.graphics.drawable.StateListDrawable;
import android.os.Build;
import android.os.IBinder;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -1087,8 +1086,15 @@ public class PopupWindow {
                p.width = Math.min(p.width, displayFrameWidth);
            }

            if (onTop) {
                int popupTop = mScreenLocation[1] + yoff - mPopupHeight;
                if (popupTop < 0) {
                    p.y += popupTop;
                }
            } else {
                p.y = Math.max(p.y, displayFrame.top);
            }
        }

        p.gravity |= Gravity.DISPLAY_CLIP_VERTICAL;
        
+1 −35
Original line number Diff line number Diff line
@@ -23,14 +23,13 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;


/**
@@ -70,8 +69,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {

    private int mGravity;

    private LayoutObserver mLayoutObserver;

    /**
     * Construct a new spinner with the given context's theme.
     *
@@ -172,7 +169,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
                    com.android.internal.R.styleable.Spinner_dropDownHorizontalOffset, 0));

            mPopup = popup;
            mLayoutObserver = new LayoutObserver();
            break;
        }
        }
@@ -425,11 +421,6 @@ 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();
            }
        }
@@ -677,7 +668,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
            super.show();
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            setSelection(Spinner.this.getSelectedItemPosition());
            setOnDismissListener(mLayoutObserver);
        }

        @Override
@@ -728,28 +718,4 @@ 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);
        }
    }
}