Skip to content

Commit 072533e

Browse files
Fabrice Di MeglioAndroid (Google) Code Review
authored andcommitted
Merge "Fix bug #7146516 Padding can be "over" resolved" into jb-mr1-dev
2 parents efa5685 + 7e7786a commit 072533e

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

core/java/android/view/View.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2814,18 +2814,18 @@ static class TransformationInfo {
28142814
int mUserPaddingEnd;
28152815

28162816
/**
2817-
* Whether a left padding has been defined during layout inflation.
2817+
* Cache initial left padding.
28182818
*
28192819
* @hide
28202820
*/
2821-
boolean mUserPaddingLeftDefined = false;
2821+
int mUserPaddingLeftInitial = UNDEFINED_PADDING;
28222822

28232823
/**
2824-
* Whether a right padding has been defined during layout inflation.
2824+
* Cache initial right padding.
28252825
*
28262826
* @hide
28272827
*/
2828-
boolean mUserPaddingRightDefined = false;
2828+
int mUserPaddingRightInitial = UNDEFINED_PADDING;
28292829

28302830
/**
28312831
* Default undefined padding
@@ -3247,19 +3247,19 @@ public View(Context context, AttributeSet attrs, int defStyle) {
32473247
break;
32483248
case com.android.internal.R.styleable.View_padding:
32493249
padding = a.getDimensionPixelSize(attr, -1);
3250-
mUserPaddingLeftDefined = true;
3251-
mUserPaddingRightDefined = true;
3250+
mUserPaddingLeftInitial = padding;
3251+
mUserPaddingRightInitial = padding;
32523252
break;
32533253
case com.android.internal.R.styleable.View_paddingLeft:
32543254
leftPadding = a.getDimensionPixelSize(attr, -1);
3255-
mUserPaddingLeftDefined = true;
3255+
mUserPaddingLeftInitial = leftPadding;
32563256
break;
32573257
case com.android.internal.R.styleable.View_paddingTop:
32583258
topPadding = a.getDimensionPixelSize(attr, -1);
32593259
break;
32603260
case com.android.internal.R.styleable.View_paddingRight:
32613261
rightPadding = a.getDimensionPixelSize(attr, -1);
3262-
mUserPaddingRightDefined = true;
3262+
mUserPaddingRightInitial = rightPadding;
32633263
break;
32643264
case com.android.internal.R.styleable.View_paddingBottom:
32653265
bottomPadding = a.getDimensionPixelSize(attr, -1);
@@ -3561,15 +3561,19 @@ public void onClick(View v) {
35613561
topPadding = padding;
35623562
rightPadding = padding;
35633563
bottomPadding = padding;
3564+
mUserPaddingLeftInitial = padding;
3565+
mUserPaddingRightInitial = padding;
35643566
}
35653567

35663568
// If the user specified the padding (either with android:padding or
35673569
// android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
35683570
// use the default padding or the padding from the background drawable
35693571
// (stored at this point in mPadding*)
3570-
internalSetPadding(leftPadding >= 0 ? leftPadding : mPaddingLeft,
3572+
mUserPaddingLeftInitial = leftPadding >= 0 ? leftPadding : mPaddingLeft;
3573+
mUserPaddingRightInitial = rightPadding >= 0 ? rightPadding : mPaddingRight;
3574+
internalSetPadding(mUserPaddingLeftInitial,
35713575
topPadding >= 0 ? topPadding : mPaddingTop,
3572-
rightPadding >= 0 ? rightPadding : mPaddingRight,
3576+
mUserPaddingRightInitial,
35733577
bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
35743578

35753579
if (viewFlagMasks != 0) {
@@ -11540,10 +11544,12 @@ public void resolvePadding() {
1154011544
// left / right padding are used if defined. If they are not defined and start / end
1154111545
// padding are defined (e.g. in Frameworks resources), then we use start / end and
1154211546
// resolve them as left / right (layout direction is not taken into account).
11543-
if (!mUserPaddingLeftDefined && mUserPaddingStart != UNDEFINED_PADDING) {
11547+
if (mUserPaddingLeftInitial == UNDEFINED_PADDING &&
11548+
mUserPaddingStart != UNDEFINED_PADDING) {
1154411549
mUserPaddingLeft = mUserPaddingStart;
1154511550
}
11546-
if (!mUserPaddingRightDefined && mUserPaddingEnd != UNDEFINED_PADDING) {
11551+
if (mUserPaddingRightInitial == UNDEFINED_PADDING
11552+
&& mUserPaddingEnd != UNDEFINED_PADDING) {
1154711553
mUserPaddingRight = mUserPaddingEnd;
1154811554
}
1154911555

@@ -11557,6 +11563,12 @@ public void resolvePadding() {
1155711563
// left / right or right / left depending on the resolved layout direction.
1155811564
// If start / end padding are not defined, use the left / right ones.
1155911565
int resolvedLayoutDirection = getResolvedLayoutDirection();
11566+
// Set user padding to initial values ...
11567+
mUserPaddingLeft = (mUserPaddingLeftInitial == UNDEFINED_PADDING) ?
11568+
0 : mUserPaddingLeftInitial;
11569+
mUserPaddingRight = (mUserPaddingRightInitial == UNDEFINED_PADDING) ?
11570+
0 : mUserPaddingRightInitial;
11571+
// ... then resolve it.
1156011572
switch (resolvedLayoutDirection) {
1156111573
case LAYOUT_DIRECTION_RTL:
1156211574
if (mUserPaddingStart != UNDEFINED_PADDING) {
@@ -14322,10 +14334,14 @@ public void setBackgroundDrawable(Drawable background) {
1432214334
mPrivateFlags2 &= ~PFLAG2_PADDING_RESOLVED;
1432314335
switch (background.getLayoutDirection()) {
1432414336
case LAYOUT_DIRECTION_RTL:
14337+
mUserPaddingLeftInitial = padding.right;
14338+
mUserPaddingRightInitial = padding.left;
1432514339
internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
1432614340
break;
1432714341
case LAYOUT_DIRECTION_LTR:
1432814342
default:
14343+
mUserPaddingLeftInitial = padding.left;
14344+
mUserPaddingRightInitial = padding.right;
1432914345
internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
1433014346
}
1433114347
}
@@ -14422,6 +14438,9 @@ public void setPadding(int left, int top, int right, int bottom) {
1442214438
mUserPaddingStart = UNDEFINED_PADDING;
1442314439
mUserPaddingEnd = UNDEFINED_PADDING;
1442414440

14441+
mUserPaddingLeftInitial = left;
14442+
mUserPaddingRightInitial = right;
14443+
1442514444
internalSetPadding(left, top, right, bottom);
1442614445
}
1442714446

@@ -14511,10 +14530,14 @@ public void setPaddingRelative(int start, int top, int end, int bottom) {
1451114530

1451214531
switch(getResolvedLayoutDirection()) {
1451314532
case LAYOUT_DIRECTION_RTL:
14533+
mUserPaddingLeftInitial = end;
14534+
mUserPaddingRightInitial = start;
1451414535
internalSetPadding(end, top, start, bottom);
1451514536
break;
1451614537
case LAYOUT_DIRECTION_LTR:
1451714538
default:
14539+
mUserPaddingLeftInitial = start;
14540+
mUserPaddingRightInitial = end;
1451814541
internalSetPadding(start, top, end, bottom);
1451914542
}
1452014543
}

0 commit comments

Comments
 (0)