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

Commit 07ce0ca2 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Fix bug #7419054 TextView Drawables resolution is broken in RTL mode" into jb-mr1-dev

parents 4e0bf7c4 1957d281
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -14197,12 +14197,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @hide
     */
    protected void resolveDrawables() {
        if (canResolveLayoutDirection()) {
            if (mBackground != null) {
                mBackground.setLayoutDirection(getLayoutDirection());
            }
            mPrivateFlags2 |= PFLAG2_DRAWABLE_RESOLVED;
            onResolveDrawables(getLayoutDirection());
        }
    }
    /**
     * Called when layout direction has been resolved.
+0 −1
Original line number Diff line number Diff line
@@ -3384,7 +3384,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager

        if (child.isLayoutDirectionInherited()) {
            child.resetRtlProperties();
            child.resolveRtlPropertiesIfNeeded();
        }

        onViewAdded(child);
+19 −10
Original line number Diff line number Diff line
@@ -144,6 +144,8 @@ public class Editor {
    CharSequence mError;
    boolean mErrorWasChanged;
    ErrorPopup mErrorPopup;
    private int mLastLayoutDirection = -1;

    /**
     * This flag is set if the TextView tries to display an error before it
     * is attached to the window (so its position is still unknown).
@@ -288,23 +290,30 @@ public class Editor {
    public void setError(CharSequence error, Drawable icon) {
        mError = TextUtils.stringOrSpannedString(error);
        mErrorWasChanged = true;
        final int layoutDirection = mTextView.getLayoutDirection();
        if (mLastLayoutDirection != layoutDirection) {
            final Drawables dr = mTextView.mDrawables;
        if (dr != null) {
            switch (mTextView.getLayoutDirection()) {
            switch (layoutDirection) {
                default:
                case View.LAYOUT_DIRECTION_LTR:
                    if (dr != null) {
                        mTextView.setCompoundDrawables(dr.mDrawableLeft, dr.mDrawableTop, icon,
                                dr.mDrawableBottom);
                    } else {
                        mTextView.setCompoundDrawables(null, null, icon, null);
                    }
                    break;
                case View.LAYOUT_DIRECTION_RTL:
                    if (dr != null) {
                        mTextView.setCompoundDrawables(icon, dr.mDrawableTop, dr.mDrawableRight,
                                dr.mDrawableBottom);
                    } else {
                        mTextView.setCompoundDrawables(icon, null, null, null);
                    }
                    break;
            }
        } else {
            mTextView.setCompoundDrawables(null, null, icon, null);
            mLastLayoutDirection = layoutDirection;
        }

        if (mError == null) {
            if (mErrorPopup != null) {
                if (mErrorPopup.isShowing()) {
+4 −5
Original line number Diff line number Diff line
@@ -306,7 +306,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    private Layout.Alignment mLayoutAlignment;
    private int mResolvedTextAlignment;

    private boolean mResolvedDrawables;
    private int mLastLayoutDirection = -1;

    /**
     * On some devices the fading edges add a performance penalty if used
@@ -8260,16 +8260,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    @Override
    public void onResolveDrawables(int layoutDirection) {
        // No need to resolve twice
        if (mResolvedDrawables) {
        if (mLastLayoutDirection == layoutDirection) {
            return;
        }
        mLastLayoutDirection = layoutDirection;
        // No drawable to resolve
        if (mDrawables == null) {
            return;
        }
        // No relative drawable to resolve
        if (mDrawables.mDrawableStart == null && mDrawables.mDrawableEnd == null) {
            mResolvedDrawables = true;
            return;
        }

@@ -8307,7 +8307,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                break;
        }
        updateDrawablesLayoutDirection(dr, layoutDirection);
        mResolvedDrawables = true;
    }

    private void updateDrawablesLayoutDirection(Drawables dr, int layoutDirection) {
@@ -8329,7 +8328,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
     * @hide
     */
    protected void resetResolvedDrawables() {
        mResolvedDrawables = false;
        mLastLayoutDirection = -1;
    }

    /**