Adding support for interpolated padding.
Change-Id: Ib7733abdebb2125ae28f4f5deb532f6faf93d0b9
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c19ee5b..323336d 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -176,11 +176,15 @@
<attr name="layout_narrowParentWidth" format="dimension"/>
<attr name="layout_narrowWidth" format="dimension"/>
<attr name="layout_narrowLeftMargin" format="dimension"/>
+ <attr name="layout_narrowLeftPadding" format="dimension"/>
<attr name="layout_narrowRightMargin" format="dimension"/>
+ <attr name="layout_narrowRightPadding" format="dimension"/>
<attr name="layout_wideParentWidth" format="dimension"/>
<attr name="layout_wideWidth" format="dimension"/>
<attr name="layout_wideLeftMargin" format="dimension"/>
+ <attr name="layout_wideLeftPadding" format="dimension"/>
<attr name="layout_wideRightMargin" format="dimension"/>
+ <attr name="layout_wideRightPadding" format="dimension"/>
</declare-styleable>
<declare-styleable name="TransitionAnimationView">
diff --git a/src/com/android/contacts/widget/InterpolatingLayout.java b/src/com/android/contacts/widget/InterpolatingLayout.java
index 5900bf1..fb0c371 100644
--- a/src/com/android/contacts/widget/InterpolatingLayout.java
+++ b/src/com/android/contacts/widget/InterpolatingLayout.java
@@ -58,17 +58,25 @@
public int narrowParentWidth;
public int narrowWidth;
public int narrowLeftMargin;
+ public int narrowLeftPadding;
public int narrowRightMargin;
+ public int narrowRightPadding;
public int wideParentWidth;
public int wideWidth;
public int wideLeftMargin;
+ public int wideLeftPadding;
public int wideRightMargin;
+ public int wideRightPadding;
private float widthMultiplier;
private int widthConstant;
private float leftMarginMultiplier;
private int leftMarginConstant;
+ private float leftPaddingMultiplier;
+ private int leftPaddingConstant;
private float rightMarginMultiplier;
private int rightMarginConstant;
+ private float rightPaddingMultiplier;
+ private int rightPaddingConstant;
public LayoutParams(Context c, AttributeSet attrs) {
super(c, attrs);
@@ -80,16 +88,24 @@
R.styleable.InterpolatingLayout_Layout_layout_narrowWidth, -1);
narrowLeftMargin = a.getDimensionPixelSize(
R.styleable.InterpolatingLayout_Layout_layout_narrowLeftMargin, -1);
+ narrowLeftPadding = a.getDimensionPixelSize(
+ R.styleable.InterpolatingLayout_Layout_layout_narrowLeftPadding, -1);
narrowRightMargin = a.getDimensionPixelSize(
R.styleable.InterpolatingLayout_Layout_layout_narrowRightMargin, -1);
+ narrowRightPadding = a.getDimensionPixelSize(
+ R.styleable.InterpolatingLayout_Layout_layout_narrowRightPadding, -1);
wideParentWidth = a.getDimensionPixelSize(
R.styleable.InterpolatingLayout_Layout_layout_wideParentWidth, -1);
wideWidth = a.getDimensionPixelSize(
R.styleable.InterpolatingLayout_Layout_layout_wideWidth, -1);
wideLeftMargin = a.getDimensionPixelSize(
R.styleable.InterpolatingLayout_Layout_layout_wideLeftMargin, -1);
+ wideLeftPadding = a.getDimensionPixelSize(
+ R.styleable.InterpolatingLayout_Layout_layout_wideLeftPadding, -1);
wideRightMargin = a.getDimensionPixelSize(
R.styleable.InterpolatingLayout_Layout_layout_wideRightMargin, -1);
+ wideRightPadding = a.getDimensionPixelSize(
+ R.styleable.InterpolatingLayout_Layout_layout_wideRightPadding, -1);
a.recycle();
@@ -106,12 +122,26 @@
* leftMarginMultiplier);
}
+ if (narrowLeftPadding != -1) {
+ leftPaddingMultiplier = (float) (wideLeftPadding - narrowLeftPadding)
+ / (wideParentWidth - narrowParentWidth);
+ leftPaddingConstant = (int) (narrowLeftPadding - narrowParentWidth
+ * leftPaddingMultiplier);
+ }
+
if (narrowRightMargin != -1) {
rightMarginMultiplier = (float) (wideRightMargin - narrowRightMargin)
/ (wideParentWidth - narrowParentWidth);
rightMarginConstant = (int) (narrowRightMargin - narrowParentWidth
* rightMarginMultiplier);
}
+
+ if (narrowRightPadding != -1) {
+ rightPaddingMultiplier = (float) (wideRightPadding - narrowRightPadding)
+ / (wideParentWidth - narrowParentWidth);
+ rightPaddingConstant = (int) (narrowRightPadding - narrowParentWidth
+ * rightPaddingMultiplier);
+ }
}
public LayoutParams(int width, int height) {
@@ -140,6 +170,11 @@
}
}
+ public int resolveLeftPadding(int parentSize) {
+ int w = (int) (parentSize * leftPaddingMultiplier) + leftPaddingConstant;
+ return w < 0 ? 0 : w;
+ }
+
public int resolveRightMargin(int parentSize) {
if (narrowRightMargin == -1) {
return rightMargin;
@@ -148,6 +183,11 @@
return w < 0 ? 0 : w;
}
}
+
+ public int resolveRightPadding(int parentSize) {
+ int w = (int) (parentSize * rightPaddingMultiplier) + rightPaddingConstant;
+ return w < 0 ? 0 : w;
+ }
}
@Override
@@ -248,6 +288,15 @@
gravity = Gravity.LEFT | Gravity.TOP;
}
+ if (params.narrowLeftPadding != -1 || params.narrowRightPadding != -1) {
+ int leftPadding = params.narrowLeftPadding == -1 ? child.getPaddingLeft()
+ : params.resolveLeftPadding(width);
+ int rightPadding = params.narrowRightPadding == -1 ? child.getPaddingRight()
+ : params.resolveRightPadding(width);
+ child.setPadding(
+ leftPadding, child.getPaddingTop(), rightPadding, child.getPaddingBottom());
+ }
+
int leftMargin = params.resolveLeftMargin(width);
int rightMargin = params.resolveRightMargin(width);