Fix padding resolution

Change-Id: I2181a0a4057be0d20744b1512dbc1fbc53490d81
This commit is contained in:
Fabrice Di Meglio
2012-07-17 20:35:48 -07:00
parent a9108a217e
commit 016456e432

View File

@@ -2766,13 +2766,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
@ViewDebug.ExportedProperty(category = "padding")
protected int mUserPaddingLeft;
/**
* Cache if the user padding is relative.
*
*/
@ViewDebug.ExportedProperty(category = "padding")
boolean mUserPaddingRelative;
/**
* Cache the paddingStart set by the user to append to the scrollbar's size.
*
@@ -2787,6 +2780,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
@ViewDebug.ExportedProperty(category = "padding")
int mUserPaddingEnd;
/**
* Default undefined padding
*/
private static final int UNDEFINED_PADDING = Integer.MIN_VALUE;
/**
* @hide
*/
@@ -3098,9 +3096,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
(IMPORTANT_FOR_ACCESSIBILITY_DEFAULT << IMPORTANT_FOR_ACCESSIBILITY_SHIFT);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
setOverScrollMode(OVER_SCROLL_IF_CONTENT_SCROLLS);
mUserPaddingStart = -1;
mUserPaddingEnd = -1;
mUserPaddingRelative = false;
mUserPaddingStart = UNDEFINED_PADDING;
mUserPaddingEnd = UNDEFINED_PADDING;
}
/**
@@ -3166,8 +3163,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
int topPadding = -1;
int rightPadding = -1;
int bottomPadding = -1;
int startPadding = -1;
int endPadding = -1;
int startPadding = UNDEFINED_PADDING;
int endPadding = UNDEFINED_PADDING;
int padding = -1;
@@ -3214,10 +3211,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
bottomPadding = a.getDimensionPixelSize(attr, -1);
break;
case com.android.internal.R.styleable.View_paddingStart:
startPadding = a.getDimensionPixelSize(attr, -1);
startPadding = a.getDimensionPixelSize(attr, UNDEFINED_PADDING);
break;
case com.android.internal.R.styleable.View_paddingEnd:
endPadding = a.getDimensionPixelSize(attr, -1);
endPadding = a.getDimensionPixelSize(attr, UNDEFINED_PADDING);
break;
case com.android.internal.R.styleable.View_scrollX:
x = a.getDimensionPixelOffset(attr, 0);
@@ -3494,16 +3491,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
setOverScrollMode(overScrollMode);
if (background != null) {
setBackground(background);
}
// Cache user padding as we cannot fully resolve padding here (we dont have yet the resolved
// layout direction). Those cached values will be used later during padding resolution.
mUserPaddingStart = startPadding;
mUserPaddingEnd = endPadding;
updateUserPaddingRelative();
if (background != null) {
setBackground(background);
}
if (padding >= 0) {
leftPadding = padding;
@@ -3516,7 +3511,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// android:paddingLeft/Top/Right/Bottom), use this padding, otherwise
// use the default padding or the padding from the background drawable
// (stored at this point in mPadding*)
setPadding(leftPadding >= 0 ? leftPadding : mPaddingLeft,
internalSetPadding(leftPadding >= 0 ? leftPadding : mPaddingLeft,
topPadding >= 0 ? topPadding : mPaddingTop,
rightPadding >= 0 ? rightPadding : mPaddingRight,
bottomPadding >= 0 ? bottomPadding : mPaddingBottom);
@@ -3551,10 +3546,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
computeOpaqueFlags();
}
private void updateUserPaddingRelative() {
mUserPaddingRelative = (mUserPaddingStart >= 0 || mUserPaddingEnd >= 0);
}
/**
* Non-public constructor for use in testing
*/
@@ -5261,9 +5252,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
*/
protected boolean fitSystemWindows(Rect insets) {
if ((mViewFlags & FITS_SYSTEM_WINDOWS) == FITS_SYSTEM_WINDOWS) {
mUserPaddingStart = -1;
mUserPaddingEnd = -1;
mUserPaddingRelative = false;
mUserPaddingStart = UNDEFINED_PADDING;
mUserPaddingEnd = UNDEFINED_PADDING;
if ((mViewFlags & OPTIONAL_FITS_SYSTEM_WINDOWS) == 0
|| mAttachInfo == null
|| (mAttachInfo.mSystemUiVisibility & SYSTEM_UI_LAYOUT_FLAGS) == 0) {
@@ -5537,6 +5527,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// Set the new layout direction (filtered) and ask for a layout pass
mPrivateFlags2 |=
((layoutDirection << LAYOUT_DIRECTION_MASK_SHIFT) & LAYOUT_DIRECTION_MASK);
resolvePadding();
requestLayout();
}
}
@@ -10668,7 +10659,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @hide
*/
protected void recomputePadding() {
setPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
internalSetPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
}
/**
@@ -11283,8 +11274,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// Set to resolved
mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED;
onResolvedLayoutDirectionChanged();
// Resolve padding
resolvePadding();
}
/**
@@ -11309,14 +11298,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// Start user padding override Right user padding. Otherwise, if Right user
// padding is not defined, use the default Right padding. If Right user padding
// is defined, just use it.
if (mUserPaddingStart >= 0) {
if (mUserPaddingStart != UNDEFINED_PADDING) {
mUserPaddingRight = mUserPaddingStart;
} else if (mUserPaddingRight < 0) {
}
if (mUserPaddingRight == UNDEFINED_PADDING) {
mUserPaddingRight = mPaddingRight;
}
if (mUserPaddingEnd >= 0) {
if (mUserPaddingEnd != UNDEFINED_PADDING) {
mUserPaddingLeft = mUserPaddingEnd;
} else if (mUserPaddingLeft < 0) {
}
if (mUserPaddingLeft == UNDEFINED_PADDING) {
mUserPaddingLeft = mPaddingLeft;
}
break;
@@ -11325,25 +11316,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// Start user padding override Left user padding. Otherwise, if Left user
// padding is not defined, use the default left padding. If Left user padding
// is defined, just use it.
if (mUserPaddingStart >= 0) {
if (mUserPaddingStart != UNDEFINED_PADDING) {
mUserPaddingLeft = mUserPaddingStart;
} else if (mUserPaddingLeft < 0) {
}
if (mUserPaddingLeft == UNDEFINED_PADDING) {
mUserPaddingLeft = mPaddingLeft;
}
if (mUserPaddingEnd >= 0) {
if (mUserPaddingEnd != UNDEFINED_PADDING) {
mUserPaddingRight = mUserPaddingEnd;
} else if (mUserPaddingRight < 0) {
}
if (mUserPaddingRight == UNDEFINED_PADDING) {
mUserPaddingRight = mPaddingRight;
}
}
mUserPaddingBottom = (mUserPaddingBottom >= 0) ? mUserPaddingBottom : mPaddingBottom;
if(isPaddingRelative()) {
setPaddingRelative(mUserPaddingStart, mPaddingTop, mUserPaddingEnd, mUserPaddingBottom);
} else {
recomputePadding();
}
internalSetPadding(mUserPaddingLeft, mPaddingTop, mUserPaddingRight, mUserPaddingBottom);
onPaddingChanged(resolvedLayoutDirection);
}
@@ -14014,11 +14003,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
if (background.getPadding(padding)) {
switch (background.getLayoutDirection()) {
case LAYOUT_DIRECTION_RTL:
setPadding(padding.right, padding.top, padding.left, padding.bottom);
internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
break;
case LAYOUT_DIRECTION_LTR:
default:
setPadding(padding.left, padding.top, padding.right, padding.bottom);
internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
}
}
@@ -14108,9 +14097,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param bottom the bottom padding in pixels
*/
public void setPadding(int left, int top, int right, int bottom) {
mUserPaddingStart = -1;
mUserPaddingEnd = -1;
mUserPaddingRelative = false;
mUserPaddingStart = UNDEFINED_PADDING;
mUserPaddingEnd = UNDEFINED_PADDING;
internalSetPadding(left, top, right, bottom);
}
@@ -14192,7 +14180,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
public void setPaddingRelative(int start, int top, int end, int bottom) {
mUserPaddingStart = start;
mUserPaddingEnd = end;
mUserPaddingRelative = true;
switch(getResolvedLayoutDirection()) {
case LAYOUT_DIRECTION_RTL:
@@ -14279,7 +14266,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return true if the padding is relative or false if it is not.
*/
public boolean isPaddingRelative() {
return mUserPaddingRelative;
return (mUserPaddingStart != UNDEFINED_PADDING || mUserPaddingEnd != UNDEFINED_PADDING);
}
/**