@@ -2766,13 +2766,6 @@ static class TransformationInfo {
27662766 @ViewDebug.ExportedProperty(category = "padding")
27672767 protected int mUserPaddingLeft;
27682768
2769- /**
2770- * Cache if the user padding is relative.
2771- *
2772- */
2773- @ViewDebug.ExportedProperty(category = "padding")
2774- boolean mUserPaddingRelative;
2775-
27762769 /**
27772770 * Cache the paddingStart set by the user to append to the scrollbar's size.
27782771 *
@@ -2787,6 +2780,11 @@ static class TransformationInfo {
27872780 @ViewDebug.ExportedProperty(category = "padding")
27882781 int mUserPaddingEnd;
27892782
2783+ /**
2784+ * Default undefined padding
2785+ */
2786+ private static final int UNDEFINED_PADDING = Integer.MIN_VALUE;
2787+
27902788 /**
27912789 * @hide
27922790 */
@@ -3098,9 +3096,8 @@ public View(Context context) {
30983096 (IMPORTANT_FOR_ACCESSIBILITY_DEFAULT << IMPORTANT_FOR_ACCESSIBILITY_SHIFT);
30993097 mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
31003098 setOverScrollMode(OVER_SCROLL_IF_CONTENT_SCROLLS);
3101- mUserPaddingStart = -1;
3102- mUserPaddingEnd = -1;
3103- mUserPaddingRelative = false;
3099+ mUserPaddingStart = UNDEFINED_PADDING;
3100+ mUserPaddingEnd = UNDEFINED_PADDING;
31043101 }
31053102
31063103 /**
@@ -3166,8 +3163,8 @@ public View(Context context, AttributeSet attrs, int defStyle) {
31663163 int topPadding = -1;
31673164 int rightPadding = -1;
31683165 int bottomPadding = -1;
3169- int startPadding = -1 ;
3170- int endPadding = -1 ;
3166+ int startPadding = UNDEFINED_PADDING ;
3167+ int endPadding = UNDEFINED_PADDING ;
31713168
31723169 int padding = -1;
31733170
@@ -3214,10 +3211,10 @@ public View(Context context, AttributeSet attrs, int defStyle) {
32143211 bottomPadding = a.getDimensionPixelSize(attr, -1);
32153212 break;
32163213 case com.android.internal.R.styleable.View_paddingStart:
3217- startPadding = a.getDimensionPixelSize(attr, -1 );
3214+ startPadding = a.getDimensionPixelSize(attr, UNDEFINED_PADDING );
32183215 break;
32193216 case com.android.internal.R.styleable.View_paddingEnd:
3220- endPadding = a.getDimensionPixelSize(attr, -1 );
3217+ endPadding = a.getDimensionPixelSize(attr, UNDEFINED_PADDING );
32213218 break;
32223219 case com.android.internal.R.styleable.View_scrollX:
32233220 x = a.getDimensionPixelOffset(attr, 0);
@@ -3494,16 +3491,14 @@ public void onClick(View v) {
34943491
34953492 setOverScrollMode(overScrollMode);
34963493
3497- if (background != null) {
3498- setBackground(background);
3499- }
3500-
35013494 // Cache user padding as we cannot fully resolve padding here (we dont have yet the resolved
35023495 // layout direction). Those cached values will be used later during padding resolution.
35033496 mUserPaddingStart = startPadding;
35043497 mUserPaddingEnd = endPadding;
35053498
3506- updateUserPaddingRelative();
3499+ if (background != null) {
3500+ setBackground(background);
3501+ }
35073502
35083503 if (padding >= 0) {
35093504 leftPadding = padding;
@@ -3516,7 +3511,7 @@ public void onClick(View v) {
35163511 // android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
35173512 // use the default padding or the padding from the background drawable
35183513 // (stored at this point in mPadding*)
3519- setPadding (leftPadding >= 0 ? leftPadding : mPaddingLeft,
3514+ internalSetPadding (leftPadding >= 0 ? leftPadding : mPaddingLeft,
35203515 topPadding >= 0 ? topPadding : mPaddingTop,
35213516 rightPadding >= 0 ? rightPadding : mPaddingRight,
35223517 bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
@@ -3551,10 +3546,6 @@ public void onClick(View v) {
35513546 computeOpaqueFlags();
35523547 }
35533548
3554- private void updateUserPaddingRelative() {
3555- mUserPaddingRelative = (mUserPaddingStart >= 0 || mUserPaddingEnd >= 0);
3556- }
3557-
35583549 /**
35593550 * Non-public constructor for use in testing
35603551 */
@@ -5261,9 +5252,8 @@ public boolean isShown() {
52615252 */
52625253 protected boolean fitSystemWindows(Rect insets) {
52635254 if ((mViewFlags & FITS_SYSTEM_WINDOWS) == FITS_SYSTEM_WINDOWS) {
5264- mUserPaddingStart = -1;
5265- mUserPaddingEnd = -1;
5266- mUserPaddingRelative = false;
5255+ mUserPaddingStart = UNDEFINED_PADDING;
5256+ mUserPaddingEnd = UNDEFINED_PADDING;
52675257 if ((mViewFlags & OPTIONAL_FITS_SYSTEM_WINDOWS) == 0
52685258 || mAttachInfo == null
52695259 || (mAttachInfo.mSystemUiVisibility & SYSTEM_UI_LAYOUT_FLAGS) == 0) {
@@ -5537,6 +5527,7 @@ public void setLayoutDirection(int layoutDirection) {
55375527 // Set the new layout direction (filtered) and ask for a layout pass
55385528 mPrivateFlags2 |=
55395529 ((layoutDirection << LAYOUT_DIRECTION_MASK_SHIFT) & LAYOUT_DIRECTION_MASK);
5530+ resolvePadding();
55405531 requestLayout();
55415532 }
55425533 }
@@ -10668,7 +10659,7 @@ public void setVerticalScrollBarEnabled(boolean verticalScrollBarEnabled) {
1066810659 * @hide
1066910660 */
1067010661 protected void recomputePadding() {
10671- setPadding (mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
10662+ internalSetPadding (mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
1067210663 }
1067310664
1067410665 /**
@@ -11283,8 +11274,6 @@ public void resolveLayoutDirection() {
1128311274 // Set to resolved
1128411275 mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED;
1128511276 onResolvedLayoutDirectionChanged();
11286- // Resolve padding
11287- resolvePadding();
1128811277 }
1128911278
1129011279 /**
@@ -11309,14 +11298,16 @@ public void resolvePadding() {
1130911298 // Start user padding override Right user padding. Otherwise, if Right user
1131011299 // padding is not defined, use the default Right padding. If Right user padding
1131111300 // is defined, just use it.
11312- if (mUserPaddingStart >= 0 ) {
11301+ if (mUserPaddingStart != UNDEFINED_PADDING ) {
1131311302 mUserPaddingRight = mUserPaddingStart;
11314- } else if (mUserPaddingRight < 0) {
11303+ }
11304+ if (mUserPaddingRight == UNDEFINED_PADDING) {
1131511305 mUserPaddingRight = mPaddingRight;
1131611306 }
11317- if (mUserPaddingEnd >= 0 ) {
11307+ if (mUserPaddingEnd != UNDEFINED_PADDING ) {
1131811308 mUserPaddingLeft = mUserPaddingEnd;
11319- } else if (mUserPaddingLeft < 0) {
11309+ }
11310+ if (mUserPaddingLeft == UNDEFINED_PADDING) {
1132011311 mUserPaddingLeft = mPaddingLeft;
1132111312 }
1132211313 break;
@@ -11325,25 +11316,23 @@ public void resolvePadding() {
1132511316 // Start user padding override Left user padding. Otherwise, if Left user
1132611317 // padding is not defined, use the default left padding. If Left user padding
1132711318 // is defined, just use it.
11328- if (mUserPaddingStart >= 0 ) {
11319+ if (mUserPaddingStart != UNDEFINED_PADDING ) {
1132911320 mUserPaddingLeft = mUserPaddingStart;
11330- } else if (mUserPaddingLeft < 0) {
11321+ }
11322+ if (mUserPaddingLeft == UNDEFINED_PADDING) {
1133111323 mUserPaddingLeft = mPaddingLeft;
1133211324 }
11333- if (mUserPaddingEnd >= 0 ) {
11325+ if (mUserPaddingEnd != UNDEFINED_PADDING ) {
1133411326 mUserPaddingRight = mUserPaddingEnd;
11335- } else if (mUserPaddingRight < 0) {
11327+ }
11328+ if (mUserPaddingRight == UNDEFINED_PADDING) {
1133611329 mUserPaddingRight = mPaddingRight;
1133711330 }
1133811331 }
1133911332
1134011333 mUserPaddingBottom = (mUserPaddingBottom >= 0) ? mUserPaddingBottom : mPaddingBottom;
1134111334
11342- if(isPaddingRelative()) {
11343- setPaddingRelative(mUserPaddingStart, mPaddingTop, mUserPaddingEnd, mUserPaddingBottom);
11344- } else {
11345- recomputePadding();
11346- }
11335+ internalSetPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
1134711336 onPaddingChanged(resolvedLayoutDirection);
1134811337 }
1134911338
@@ -14014,11 +14003,11 @@ public void setBackgroundDrawable(Drawable background) {
1401414003 if (background.getPadding(padding)) {
1401514004 switch (background.getLayoutDirection()) {
1401614005 case LAYOUT_DIRECTION_RTL:
14017- setPadding (padding.right, padding.top, padding.left, padding.bottom);
14006+ internalSetPadding (padding.right, padding.top, padding.left, padding.bottom);
1401814007 break;
1401914008 case LAYOUT_DIRECTION_LTR:
1402014009 default:
14021- setPadding (padding.left, padding.top, padding.right, padding.bottom);
14010+ internalSetPadding (padding.left, padding.top, padding.right, padding.bottom);
1402214011 }
1402314012 }
1402414013
@@ -14108,9 +14097,8 @@ public Drawable getBackground() {
1410814097 * @param bottom the bottom padding in pixels
1410914098 */
1411014099 public void setPadding(int left, int top, int right, int bottom) {
14111- mUserPaddingStart = -1;
14112- mUserPaddingEnd = -1;
14113- mUserPaddingRelative = false;
14100+ mUserPaddingStart = UNDEFINED_PADDING;
14101+ mUserPaddingEnd = UNDEFINED_PADDING;
1411414102
1411514103 internalSetPadding(left, top, right, bottom);
1411614104 }
@@ -14192,7 +14180,6 @@ private void internalSetPadding(int left, int top, int right, int bottom) {
1419214180 public void setPaddingRelative(int start, int top, int end, int bottom) {
1419314181 mUserPaddingStart = start;
1419414182 mUserPaddingEnd = end;
14195- mUserPaddingRelative = true;
1419614183
1419714184 switch(getResolvedLayoutDirection()) {
1419814185 case LAYOUT_DIRECTION_RTL:
@@ -14279,7 +14266,7 @@ public int getPaddingEnd() {
1427914266 * @return true if the padding is relative or false if it is not.
1428014267 */
1428114268 public boolean isPaddingRelative() {
14282- return mUserPaddingRelative ;
14269+ return (mUserPaddingStart != UNDEFINED_PADDING || mUserPaddingEnd != UNDEFINED_PADDING) ;
1428314270 }
1428414271
1428514272 /**
0 commit comments