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

Commit 78528b22 authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed a RTL layouting bug with LinearLayout

When the RTL properties of a horizontal LinearLayout
changed, nobody enforced the view to be layouted anew,
even though its layout is dependent on the layout
direction. This could lead to stale layouts being
temporarily layouted the wrong way.

Bug: 20495301
Change-Id: I979c8d86ee711626b2901b65ebdf007c1eb1c0fa
parent 7b7e1f97
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -26,6 +26,12 @@ public final class LayoutDirection {
    // No instantiation
    private LayoutDirection() {}

    /**
     * An undefined layout direction.
     * @hide
     */
    public static final int UNDEFINED = -1;

    /**
     * Horizontal layout direction is from Left to Right.
     */
+6 −0
Original line number Diff line number Diff line
@@ -1871,6 +1871,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    @Retention(RetentionPolicy.SOURCE)
    public @interface ResolvedLayoutDir {}
    /**
     * A flag to indicate that the layout direction of this view has not been defined yet.
     * @hide
     */
    public static final int LAYOUT_DIRECTION_UNDEFINED = LayoutDirection.UNDEFINED;
    /**
     * Horizontal layout direction of this view is from Left to Right.
     * Use with {@link #setLayoutDirection}.
+13 −0
Original line number Diff line number Diff line
@@ -185,6 +185,8 @@ public class LinearLayout extends ViewGroup {
    private int mShowDividers;
    private int mDividerPadding;

    private int mLayoutDirection = View.LAYOUT_DIRECTION_UNDEFINED;

    public LinearLayout(Context context) {
        this(context, null);
    }
@@ -1567,6 +1569,17 @@ public class LinearLayout extends ViewGroup {
        }
    }

    @Override
    public void onRtlPropertiesChanged(@ResolvedLayoutDir int layoutDirection) {
        super.onRtlPropertiesChanged(layoutDirection);
        if (layoutDirection != mLayoutDirection) {
            mLayoutDirection = layoutDirection;
            if (mOrientation == HORIZONTAL) {
                requestLayout();
            }
        }
    }

    /**
     * Position the children during a layout pass if the orientation of this
     * LinearLayout is set to {@link #HORIZONTAL}.