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

Commit d02341d0 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android Git Automerger
Browse files

am 072533e9: Merge "Fix bug #7146516 Padding can be "over" resolved" into jb-mr1-dev

* commit '072533e9':
  Fix bug #7146516 Padding can be "over" resolved
parents eebe7df2 072533e9
Loading
Loading
Loading
Loading
+35 −12
Original line number Original line Diff line number Diff line
@@ -2814,18 +2814,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    int mUserPaddingEnd;
    int mUserPaddingEnd;
    /**
    /**
     * Whether a left padding has been defined during layout inflation.
     * Cache initial left padding.
     *
     *
     * @hide
     * @hide
     */
     */
    boolean mUserPaddingLeftDefined = false;
    int mUserPaddingLeftInitial = UNDEFINED_PADDING;
    /**
    /**
     * Whether a right padding has been defined during layout inflation.
     * Cache initial right padding.
     *
     *
     * @hide
     * @hide
     */
     */
    boolean mUserPaddingRightDefined = false;
    int mUserPaddingRightInitial = UNDEFINED_PADDING;
    /**
    /**
     * Default undefined padding
     * Default undefined padding
@@ -3247,19 +3247,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                    break;
                    break;
                case com.android.internal.R.styleable.View_padding:
                case com.android.internal.R.styleable.View_padding:
                    padding = a.getDimensionPixelSize(attr, -1);
                    padding = a.getDimensionPixelSize(attr, -1);
                    mUserPaddingLeftDefined = true;
                    mUserPaddingLeftInitial = padding;
                    mUserPaddingRightDefined = true;
                    mUserPaddingRightInitial = padding;
                    break;
                    break;
                 case com.android.internal.R.styleable.View_paddingLeft:
                 case com.android.internal.R.styleable.View_paddingLeft:
                    leftPadding = a.getDimensionPixelSize(attr, -1);
                    leftPadding = a.getDimensionPixelSize(attr, -1);
                    mUserPaddingLeftDefined = true;
                    mUserPaddingLeftInitial = leftPadding;
                    break;
                    break;
                case com.android.internal.R.styleable.View_paddingTop:
                case com.android.internal.R.styleable.View_paddingTop:
                    topPadding = a.getDimensionPixelSize(attr, -1);
                    topPadding = a.getDimensionPixelSize(attr, -1);
                    break;
                    break;
                case com.android.internal.R.styleable.View_paddingRight:
                case com.android.internal.R.styleable.View_paddingRight:
                    rightPadding = a.getDimensionPixelSize(attr, -1);
                    rightPadding = a.getDimensionPixelSize(attr, -1);
                    mUserPaddingRightDefined = true;
                    mUserPaddingRightInitial = rightPadding;
                    break;
                    break;
                case com.android.internal.R.styleable.View_paddingBottom:
                case com.android.internal.R.styleable.View_paddingBottom:
                    bottomPadding = a.getDimensionPixelSize(attr, -1);
                    bottomPadding = a.getDimensionPixelSize(attr, -1);
@@ -3561,15 +3561,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            topPadding = padding;
            topPadding = padding;
            rightPadding = padding;
            rightPadding = padding;
            bottomPadding = padding;
            bottomPadding = padding;
            mUserPaddingLeftInitial = padding;
            mUserPaddingRightInitial = padding;
        }
        }
        // If the user specified the padding (either with android:padding or
        // If the user specified the padding (either with android:padding or
        // android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
        // android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
        // use the default padding or the padding from the background drawable
        // use the default padding or the padding from the background drawable
        // (stored at this point in mPadding*)
        // (stored at this point in mPadding*)
        internalSetPadding(leftPadding >= 0 ? leftPadding : mPaddingLeft,
        mUserPaddingLeftInitial = leftPadding >= 0 ? leftPadding : mPaddingLeft;
        mUserPaddingRightInitial = rightPadding >= 0 ? rightPadding : mPaddingRight;
        internalSetPadding(mUserPaddingLeftInitial,
                topPadding >= 0 ? topPadding : mPaddingTop,
                topPadding >= 0 ? topPadding : mPaddingTop,
                rightPadding >= 0 ? rightPadding : mPaddingRight,
                mUserPaddingRightInitial,
                bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
                bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
        if (viewFlagMasks != 0) {
        if (viewFlagMasks != 0) {
@@ -11540,10 +11544,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            // left / right padding are used if defined. If they are not defined and start / end
            // left / right padding are used if defined. If they are not defined and start / end
            // padding are defined (e.g. in Frameworks resources), then we use start / end and
            // padding are defined (e.g. in Frameworks resources), then we use start / end and
            // resolve them as left / right (layout direction is not taken into account).
            // resolve them as left / right (layout direction is not taken into account).
            if (!mUserPaddingLeftDefined && mUserPaddingStart != UNDEFINED_PADDING) {
            if (mUserPaddingLeftInitial == UNDEFINED_PADDING &&
                    mUserPaddingStart != UNDEFINED_PADDING) {
                mUserPaddingLeft = mUserPaddingStart;
                mUserPaddingLeft = mUserPaddingStart;
            }
            }
            if (!mUserPaddingRightDefined && mUserPaddingEnd != UNDEFINED_PADDING) {
            if (mUserPaddingRightInitial == UNDEFINED_PADDING
                    && mUserPaddingEnd != UNDEFINED_PADDING) {
                mUserPaddingRight = mUserPaddingEnd;
                mUserPaddingRight = mUserPaddingEnd;
            }
            }
@@ -11557,6 +11563,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            // left / right or right / left depending on the resolved layout direction.
            // left / right or right / left depending on the resolved layout direction.
            // If start / end padding are not defined, use the left / right ones.
            // If start / end padding are not defined, use the left / right ones.
            int resolvedLayoutDirection = getResolvedLayoutDirection();
            int resolvedLayoutDirection = getResolvedLayoutDirection();
            // Set user padding to initial values ...
            mUserPaddingLeft = (mUserPaddingLeftInitial == UNDEFINED_PADDING) ?
                    0 : mUserPaddingLeftInitial;
            mUserPaddingRight = (mUserPaddingRightInitial == UNDEFINED_PADDING) ?
                    0 : mUserPaddingRightInitial;
            // ... then resolve it.
            switch (resolvedLayoutDirection) {
            switch (resolvedLayoutDirection) {
                case LAYOUT_DIRECTION_RTL:
                case LAYOUT_DIRECTION_RTL:
                    if (mUserPaddingStart != UNDEFINED_PADDING) {
                    if (mUserPaddingStart != UNDEFINED_PADDING) {
@@ -14322,10 +14334,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                mPrivateFlags2 &= ~PFLAG2_PADDING_RESOLVED;
                mPrivateFlags2 &= ~PFLAG2_PADDING_RESOLVED;
                switch (background.getLayoutDirection()) {
                switch (background.getLayoutDirection()) {
                    case LAYOUT_DIRECTION_RTL:
                    case LAYOUT_DIRECTION_RTL:
                        mUserPaddingLeftInitial = padding.right;
                        mUserPaddingRightInitial = padding.left;
                        internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
                        internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
                        break;
                        break;
                    case LAYOUT_DIRECTION_LTR:
                    case LAYOUT_DIRECTION_LTR:
                    default:
                    default:
                        mUserPaddingLeftInitial = padding.left;
                        mUserPaddingRightInitial = padding.right;
                        internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
                        internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
                }
                }
            }
            }
@@ -14422,6 +14438,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        mUserPaddingStart = UNDEFINED_PADDING;
        mUserPaddingStart = UNDEFINED_PADDING;
        mUserPaddingEnd = UNDEFINED_PADDING;
        mUserPaddingEnd = UNDEFINED_PADDING;
        mUserPaddingLeftInitial = left;
        mUserPaddingRightInitial = right;
        internalSetPadding(left, top, right, bottom);
        internalSetPadding(left, top, right, bottom);
    }
    }
@@ -14511,10 +14530,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        switch(getResolvedLayoutDirection()) {
        switch(getResolvedLayoutDirection()) {
            case LAYOUT_DIRECTION_RTL:
            case LAYOUT_DIRECTION_RTL:
                mUserPaddingLeftInitial = end;
                mUserPaddingRightInitial = start;
                internalSetPadding(end, top, start, bottom);
                internalSetPadding(end, top, start, bottom);
                break;
                break;
            case LAYOUT_DIRECTION_LTR:
            case LAYOUT_DIRECTION_LTR:
            default:
            default:
                mUserPaddingLeftInitial = start;
                mUserPaddingRightInitial = end;
                internalSetPadding(start, top, end, bottom);
                internalSetPadding(start, top, end, bottom);
        }
        }
    }
    }