@@ -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