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);