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

Commit 38d64c5a authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Make Spinner widget aware of layout direction

- see bug #5429822 UI should be mirrored for RTL locales (Arabic, Hebrew, farsi)

Change-Id: I6ebeee67e3e34271897e14f73b7364b1ae83145a
parent 8dbf3b00
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -349,7 +349,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
    public void setGravity(int gravity) {
        if (mGravity != gravity) {
            if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {
                gravity |= Gravity.LEFT;
                gravity |= Gravity.START;
            }
            mGravity = gravity;
            requestLayout();
@@ -453,7 +453,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
    /**
     * Creates and positions all views for this Spinner.
     *
     * @param delta Change in the selected position. +1 moves selection is moving to the right,
     * @param delta Change in the selected position. +1 means selection is moving to the right,
     * so views are scrolling to the left. -1 means selection is moving to the left.
     */
    @Override
@@ -485,7 +485,9 @@ public class Spinner extends AbsSpinner implements OnClickListener {
        View sel = makeAndAddView(mSelectedPosition);
        int width = sel.getMeasuredWidth();
        int selectedOffset = childrenLeft;
        switch (mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
        final int layoutDirection = getResolvedLayoutDirection();
        final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection);
        switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
            case Gravity.CENTER_HORIZONTAL:
                selectedOffset = childrenLeft + (childrenWidth / 2) - (width / 2);
                break;
@@ -932,19 +934,18 @@ public class Spinner extends AbsSpinner implements OnClickListener {
        @Override
        public void show() {
            final Drawable background = getBackground();
            int bgOffset = 0;
            int hOffset = 0;
            if (background != null) {
                background.getPadding(mTempRect);
                bgOffset = -mTempRect.left;
                hOffset = isLayoutRtl() ? mTempRect.right : -mTempRect.left;
            } else {
                mTempRect.left = mTempRect.right = 0;
            }

            final int spinnerPaddingLeft = Spinner.this.getPaddingLeft();
            if (mDropDownWidth == WRAP_CONTENT) {
                final int spinnerWidth = Spinner.this.getWidth();
            final int spinnerPaddingRight = Spinner.this.getPaddingRight();

            final int spinnerWidth = Spinner.this.getWidth();
            if (mDropDownWidth == WRAP_CONTENT) {
                int contentWidth =  measureContentWidth(
                        (SpinnerAdapter) mAdapter, getBackground());
                final int contentWidthLimit = mContext.getResources()
@@ -952,17 +953,20 @@ public class Spinner extends AbsSpinner implements OnClickListener {
                if (contentWidth > contentWidthLimit) {
                    contentWidth = contentWidthLimit;
                }

                setContentWidth(Math.max(
                       contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
            } else if (mDropDownWidth == MATCH_PARENT) {
                final int spinnerWidth = Spinner.this.getWidth();
                final int spinnerPaddingRight = Spinner.this.getPaddingRight();
                setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight);
            } else {
                setContentWidth(mDropDownWidth);
            }
            setHorizontalOffset(bgOffset + spinnerPaddingLeft);

            if (isLayoutRtl()) {
                hOffset += spinnerWidth - spinnerPaddingRight - getWidth();
            } else {
                hOffset += spinnerPaddingLeft;
            }
            setHorizontalOffset(hOffset);
            setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
            super.show();
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+1 −1
Original line number Diff line number Diff line
@@ -1769,7 +1769,7 @@ please see styles_device_defaults.xml.
        <item name="android:dropDownHorizontalOffset">0dip</item>
        <item name="android:dropDownWidth">wrap_content</item>
        <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>
        <item name="android:gravity">left|center_vertical</item>
        <item name="android:gravity">start|center_vertical</item>
        <item name="android:disableChildrenWhenDisabled">true</item>
    </style>