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

Commit dd8611fc authored by dongwan0605.kim's avatar dongwan0605.kim Committed by Selim Cinek
Browse files

Fix RTL issue of ImageFloatingTextView

Sometimes, makeSingleLayout() can be invoked before layout direction is resolved.
When not resolved, it indents in LTR layout although it should be RTL.

So, to guarantee the exact indenting, we should re-build the text layout
when the layout direction is changed.

Test: manual - Test BigTextStyle notifications with LargeIcon under RTL configurations.
Fixes: 31633875
Change-Id: Idc6c5d7d41632cb9e1b70d9c67c13852e3f25023
parent ae9fa16b
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@ public class ImageFloatingTextView extends TextView {
    /** Number of lines from the top to indent */
    private int mIndentLines;

    /** Resolved layout direction */
    private int mResolvedDirection = LAYOUT_DIRECTION_UNDEFINED;

    public ImageFloatingTextView(Context context) {
        this(context, null);
    }
@@ -82,7 +85,7 @@ public class ImageFloatingTextView extends TextView {
                margins[i] = endMargin;
            }
        }
        if (getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
        if (mResolvedDirection == LAYOUT_DIRECTION_RTL) {
            builder.setIndents(margins, null);
        } else {
            builder.setIndents(null, margins);
@@ -91,6 +94,19 @@ public class ImageFloatingTextView extends TextView {
        return builder.build();
    }

    @Override
    public void onRtlPropertiesChanged(int layoutDirection) {
        super.onRtlPropertiesChanged(layoutDirection);

        if (layoutDirection != mResolvedDirection && isLayoutDirectionResolved()) {
            mResolvedDirection = layoutDirection;
            if (mIndentLines > 0) {
                // Invalidate layout.
                setHint(getHint());
            }
        }
    }

    @RemotableViewMethod
    public void setHasImage(boolean hasImage) {
        setNumIndentLines(hasImage ? 2 : 0);