@@ -2798,18 +2798,18 @@ static class TransformationInfo {
27982798 int mUserPaddingEnd;
27992799
28002800 /**
2801- * Whether a left padding has been defined during layout inflation .
2801+ * Cache initial left padding.
28022802 *
28032803 * @hide
28042804 */
2805- boolean mUserPaddingLeftDefined = false ;
2805+ int mUserPaddingLeftInitial = UNDEFINED_PADDING ;
28062806
28072807 /**
2808- * Whether a right padding has been defined during layout inflation .
2808+ * Cache initial right padding.
28092809 *
28102810 * @hide
28112811 */
2812- boolean mUserPaddingRightDefined = false ;
2812+ int mUserPaddingRightInitial = UNDEFINED_PADDING ;
28132813
28142814 /**
28152815 * Default undefined padding
@@ -3231,19 +3231,19 @@ public View(Context context, AttributeSet attrs, int defStyle) {
32313231 break;
32323232 case com.android.internal.R.styleable.View_padding:
32333233 padding = a.getDimensionPixelSize(attr, -1);
3234- mUserPaddingLeftDefined = true ;
3235- mUserPaddingRightDefined = true ;
3234+ mUserPaddingLeftInitial = padding ;
3235+ mUserPaddingRightInitial = padding ;
32363236 break;
32373237 case com.android.internal.R.styleable.View_paddingLeft:
32383238 leftPadding = a.getDimensionPixelSize(attr, -1);
3239- mUserPaddingLeftDefined = true ;
3239+ mUserPaddingLeftInitial = leftPadding ;
32403240 break;
32413241 case com.android.internal.R.styleable.View_paddingTop:
32423242 topPadding = a.getDimensionPixelSize(attr, -1);
32433243 break;
32443244 case com.android.internal.R.styleable.View_paddingRight:
32453245 rightPadding = a.getDimensionPixelSize(attr, -1);
3246- mUserPaddingRightDefined = true ;
3246+ mUserPaddingRightInitial = rightPadding ;
32473247 break;
32483248 case com.android.internal.R.styleable.View_paddingBottom:
32493249 bottomPadding = a.getDimensionPixelSize(attr, -1);
@@ -3542,15 +3542,19 @@ public void onClick(View v) {
35423542 topPadding = padding;
35433543 rightPadding = padding;
35443544 bottomPadding = padding;
3545+ mUserPaddingLeftInitial = padding;
3546+ mUserPaddingRightInitial = padding;
35453547 }
35463548
35473549 // If the user specified the padding (either with android:padding or
35483550 // android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
35493551 // use the default padding or the padding from the background drawable
35503552 // (stored at this point in mPadding*)
3551- internalSetPadding(leftPadding >= 0 ? leftPadding : mPaddingLeft,
3553+ mUserPaddingLeftInitial = leftPadding >= 0 ? leftPadding : mPaddingLeft;
3554+ mUserPaddingRightInitial = rightPadding >= 0 ? rightPadding : mPaddingRight;
3555+ internalSetPadding(mUserPaddingLeftInitial,
35523556 topPadding >= 0 ? topPadding : mPaddingTop,
3553- rightPadding >= 0 ? rightPadding : mPaddingRight ,
3557+ mUserPaddingRightInitial ,
35543558 bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
35553559
35563560 if (viewFlagMasks != 0) {
@@ -11463,10 +11467,12 @@ public void resolvePadding() {
1146311467 // left / right padding are used if defined. If they are not defined and start / end
1146411468 // padding are defined (e.g. in Frameworks resources), then we use start / end and
1146511469 // resolve them as left / right (layout direction is not taken into account).
11466- if (!mUserPaddingLeftDefined && mUserPaddingStart != UNDEFINED_PADDING) {
11470+ if (mUserPaddingLeftInitial == UNDEFINED_PADDING &&
11471+ mUserPaddingStart != UNDEFINED_PADDING) {
1146711472 mUserPaddingLeft = mUserPaddingStart;
1146811473 }
11469- if (!mUserPaddingRightDefined && mUserPaddingEnd != UNDEFINED_PADDING) {
11474+ if (mUserPaddingRightInitial == UNDEFINED_PADDING
11475+ && mUserPaddingEnd != UNDEFINED_PADDING) {
1147011476 mUserPaddingRight = mUserPaddingEnd;
1147111477 }
1147211478
@@ -11480,6 +11486,12 @@ public void resolvePadding() {
1148011486 // left / right or right / left depending on the resolved layout direction.
1148111487 // If start / end padding are not defined, use the left / right ones.
1148211488 int resolvedLayoutDirection = getResolvedLayoutDirection();
11489+ // Set user padding to initial values ...
11490+ mUserPaddingLeft = (mUserPaddingLeftInitial == UNDEFINED_PADDING) ?
11491+ 0 : mUserPaddingLeftInitial;
11492+ mUserPaddingRight = (mUserPaddingRightInitial == UNDEFINED_PADDING) ?
11493+ 0 : mUserPaddingRightInitial;
11494+ // ... then resolve it.
1148311495 switch (resolvedLayoutDirection) {
1148411496 case LAYOUT_DIRECTION_RTL:
1148511497 if (mUserPaddingStart != UNDEFINED_PADDING) {
@@ -14243,10 +14255,14 @@ public void setBackgroundDrawable(Drawable background) {
1424314255 mPrivateFlags2 &= ~PFLAG2_PADDING_RESOLVED;
1424414256 switch (background.getLayoutDirection()) {
1424514257 case LAYOUT_DIRECTION_RTL:
14258+ mUserPaddingLeftInitial = padding.right;
14259+ mUserPaddingRightInitial = padding.left;
1424614260 internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
1424714261 break;
1424814262 case LAYOUT_DIRECTION_LTR:
1424914263 default:
14264+ mUserPaddingLeftInitial = padding.left;
14265+ mUserPaddingRightInitial = padding.right;
1425014266 internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
1425114267 }
1425214268 }
@@ -14343,6 +14359,9 @@ public void setPadding(int left, int top, int right, int bottom) {
1434314359 mUserPaddingStart = UNDEFINED_PADDING;
1434414360 mUserPaddingEnd = UNDEFINED_PADDING;
1434514361
14362+ mUserPaddingLeftInitial = left;
14363+ mUserPaddingRightInitial = right;
14364+
1434614365 internalSetPadding(left, top, right, bottom);
1434714366 }
1434814367
@@ -14432,10 +14451,14 @@ public void setPaddingRelative(int start, int top, int end, int bottom) {
1443214451
1443314452 switch(getResolvedLayoutDirection()) {
1443414453 case LAYOUT_DIRECTION_RTL:
14454+ mUserPaddingLeftInitial = end;
14455+ mUserPaddingRightInitial = start;
1443514456 internalSetPadding(end, top, start, bottom);
1443614457 break;
1443714458 case LAYOUT_DIRECTION_LTR:
1443814459 default:
14460+ mUserPaddingLeftInitial = start;
14461+ mUserPaddingRightInitial = end;
1443914462 internalSetPadding(start, top, end, bottom);
1444014463 }
1444114464 }
0 commit comments