Skip to content

Commit 80766f1

Browse files
author
Fabrice Di Meglio
committed
Fix bug #7259242 text is left justified with no padding
(padding is hard) - set correct values to mUserPaddingLeftInitial / mUserPaddingRightInitial - reset padding to initial values depending on layout direction Change-Id: I5cfb941b4874eafbfcfb5e2926f5a3c80b4931d3
1 parent 5607e6f commit 80766f1

File tree

1 file changed

+42
-19
lines changed

1 file changed

+42
-19
lines changed

core/java/android/view/View.java

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2881,14 +2881,14 @@ static class TransformationInfo {
28812881
*
28822882
* @hide
28832883
*/
2884-
int mUserPaddingLeftInitial = UNDEFINED_PADDING;
2884+
int mUserPaddingLeftInitial = 0;
28852885

28862886
/**
28872887
* Cache initial right padding.
28882888
*
28892889
* @hide
28902890
*/
2891-
int mUserPaddingRightInitial = UNDEFINED_PADDING;
2891+
int mUserPaddingRightInitial = 0;
28922892

28932893
/**
28942894
* Default undefined padding
@@ -3643,26 +3643,41 @@ public void onClick(View v) {
36433643
mUserPaddingRightInitial = padding;
36443644
}
36453645

3646-
// RTL compatibility mode: pre Jelly Bean MR1 case OR no RTL support case.
3647-
// left / right padding are used if defined (meaning here nothing to do). If they are not
3648-
// defined and start / end padding are defined (e.g. in Frameworks resources), then we use
3649-
// start / end and resolve them as left / right (layout direction is not taken into account).
36503646
if (isRtlCompatibilityMode()) {
3647+
// RTL compatibility mode: pre Jelly Bean MR1 case OR no RTL support case.
3648+
// left / right padding are used if defined (meaning here nothing to do). If they are not
3649+
// defined and start / end padding are defined (e.g. in Frameworks resources), then we use
3650+
// start / end and resolve them as left / right (layout direction is not taken into account).
3651+
// Padding from the background drawable is stored at this point in mUserPaddingLeftInitial
3652+
// and mUserPaddingRightInitial) so drawable padding will be used as ultimate default if
3653+
// defined.
36513654
if (!leftPaddingDefined && startPaddingDefined) {
36523655
leftPadding = startPadding;
36533656
}
3657+
mUserPaddingLeftInitial = (leftPadding > 0) ? leftPadding : 0;
36543658
if (!rightPaddingDefined && endPaddingDefined) {
36553659
rightPadding = endPadding;
36563660
}
3661+
mUserPaddingRightInitial = (rightPadding > 0) ? rightPadding : 0;
3662+
} else {
3663+
// Jelly Bean MR1 and after case: if start/end defined, they will override any left/right
3664+
// values defined. Otherwise, left /right values are used.
3665+
// Padding from the background drawable is stored at this point in mUserPaddingLeftInitial
3666+
// and mUserPaddingRightInitial) so drawable padding will be used as ultimate default if
3667+
// defined.
3668+
if (startPaddingDefined) {
3669+
mUserPaddingLeftInitial = startPadding;
3670+
} else if (leftPaddingDefined) {
3671+
mUserPaddingLeftInitial = leftPadding;
3672+
}
3673+
if (endPaddingDefined) {
3674+
mUserPaddingRightInitial = endPadding;
3675+
}
3676+
else if (rightPaddingDefined) {
3677+
mUserPaddingRightInitial = rightPadding;
3678+
}
36573679
}
36583680

3659-
// If the user specified the padding (either with android:padding or
3660-
// android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
3661-
// use the default padding or the padding from the background drawable
3662-
// (stored at this point in mPadding*). Padding resolution will happen later if
3663-
// RTL is supported.
3664-
mUserPaddingLeftInitial = leftPadding >= 0 ? leftPadding : mPaddingLeft;
3665-
mUserPaddingRightInitial = rightPadding >= 0 ? rightPadding : mPaddingRight;
36663681
internalSetPadding(
36673682
mUserPaddingLeftInitial,
36683683
topPadding >= 0 ? topPadding : mPaddingTop,
@@ -11745,10 +11760,8 @@ public void resolvePadding() {
1174511760
// If start / end padding are not defined, use the left / right ones.
1174611761
int resolvedLayoutDirection = getLayoutDirection();
1174711762
// Set user padding to initial values ...
11748-
mUserPaddingLeft = (mUserPaddingLeftInitial == UNDEFINED_PADDING) ?
11749-
0 : mUserPaddingLeftInitial;
11750-
mUserPaddingRight = (mUserPaddingRightInitial == UNDEFINED_PADDING) ?
11751-
0 : mUserPaddingRightInitial;
11763+
mUserPaddingLeft = mUserPaddingLeftInitial;
11764+
mUserPaddingRight = mUserPaddingRightInitial;
1175211765
// ... then resolve it.
1175311766
switch (resolvedLayoutDirection) {
1175411767
case LAYOUT_DIRECTION_RTL:
@@ -14782,8 +14795,18 @@ public boolean isPaddingRelative() {
1478214795
* @hide
1478314796
*/
1478414797
public void resetPaddingToInitialValues() {
14785-
mPaddingLeft = mUserPaddingLeftInitial;
14786-
mPaddingRight = mUserPaddingRightInitial;
14798+
if (isRtlCompatibilityMode()) {
14799+
mPaddingLeft = mUserPaddingLeftInitial;
14800+
mPaddingRight = mUserPaddingRightInitial;
14801+
} else {
14802+
if (isLayoutRtl()) {
14803+
mPaddingLeft = mUserPaddingRightInitial;
14804+
mPaddingRight = mUserPaddingLeftInitial;
14805+
} else {
14806+
mPaddingLeft = mUserPaddingLeftInitial;
14807+
mPaddingRight = mUserPaddingRightInitial;
14808+
}
14809+
}
1478714810
}
1478814811

1478914812
/**

0 commit comments

Comments
 (0)