Merge "CardView improvements" into lmp-preview-dev
diff --git a/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java b/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java
index 9f6014f..98be3c5 100644
--- a/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java
+++ b/v7/cardview/eclair-mr1/android/support/v7/widget/RoundRectDrawableWithShadow.java
@@ -34,7 +34,7 @@
  * A rounded rectangle drawable which also includes a shadow around.
  */
 class RoundRectDrawableWithShadow extends Drawable {
-
+    final static float SHADOW_MULTIPLIER = 1.5f;
     /*
     * This helper is set by CardView implementations.
     * <p>
@@ -55,7 +55,7 @@
 
     Path mCornerShadowPath;
 
-    float mShadowSize = 6;
+    float mShadowSize;
 
     private boolean mDirty = true;
 
@@ -66,6 +66,8 @@
     RoundRectDrawableWithShadow(Resources resources, int backgroundColor, float radius) {
         mShadowStartColor = resources.getColor(R.color.cardview_shadow_start_color);
         mShadowEndColor = resources.getColor(R.color.cardview_shadow_end_color);
+        mShadowSize = resources.getDimension(R.dimen.cardview_shadow_size) * SHADOW_MULTIPLIER;
+
 
         mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
         mPaint.setColor(backgroundColor);
@@ -90,11 +92,9 @@
 
     @Override
     public boolean getPadding(Rect padding) {
-        if (mCornerRadius == 0) {
-            return super.getPadding(padding);
-        }
-        final int intCornerRadius = (int) Math.ceil(mCornerRadius);
-        padding.set(intCornerRadius, intCornerRadius, intCornerRadius, intCornerRadius);
+        final int topShadow = (int) Math.ceil(mShadowSize * (1 / (SHADOW_MULTIPLIER * 2)));
+        final int sideShadow = (int) Math.ceil(mShadowSize - topShadow);
+        padding.set(sideShadow, topShadow, sideShadow, (int) Math.ceil(mShadowSize));
         return true;
     }
 
@@ -124,11 +124,16 @@
             mDirty = false;
         }
         drawShadow(canvas);
-        final float offset = mShadowSize / 2f;
+        final float offset = mShadowSize * (1 - 1 / (SHADOW_MULTIPLIER * 2));
+        final float horizontalOffset = mShadowSize - offset;
         canvas.translate(0, -offset);
         mPreShadowBounds.bottom += offset;
+        mPreShadowBounds.left -= horizontalOffset;
+        mPreShadowBounds.right += horizontalOffset;
         sRoundRectHelper.drawRoundRect(canvas, mPreShadowBounds, mCornerRadius, mPaint);
         mPreShadowBounds.bottom -= offset;
+        mPreShadowBounds.left += horizontalOffset;
+        mPreShadowBounds.right -= horizontalOffset;
         canvas.translate(0, offset);
     }
 
diff --git a/v7/cardview/res/values/colors.xml b/v7/cardview/res/values/colors.xml
index 1b6f2d4..3ed7087 100644
--- a/v7/cardview/res/values/colors.xml
+++ b/v7/cardview/res/values/colors.xml
@@ -15,8 +15,10 @@
 -->
 
 <resources>
-    <!-- Default background color for CardView. -->
+    <!-- Background color for light CardView. -->
     <color name="cardview_light_background">#FFFAFAFA</color>
+	<!-- Background color for dark CardView. -->
+	<color name="cardview_dark_background">#FF202020</color>
     <!-- Shadow color for the first pixels around CardView. -->
     <color name="cardview_shadow_start_color">#37000000</color>
     <!-- Shadow color for the furthest pixels around CardView. -->
diff --git a/v7/cardview/res/values/dimens.xml b/v7/cardview/res/values/dimens.xml
index e4ca6f0..5fbd42a 100644
--- a/v7/cardview/res/values/dimens.xml
+++ b/v7/cardview/res/values/dimens.xml
@@ -19,4 +19,6 @@
     <dimen name="cardview_default_radius">2dp</dimen>
     <!-- Elevation value to use for CardViews on L+. -->
     <dimen name="cardview_elevation">2dp</dimen>
+    <!-- Shadow size for CardView on pre L. -->
+    <dimen name="cardview_shadow_size">2dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/v7/cardview/res/values/styles.xml b/v7/cardview/res/values/styles.xml
index 12fa3a8..f8a7909 100644
--- a/v7/cardview/res/values/styles.xml
+++ b/v7/cardview/res/values/styles.xml
@@ -14,8 +14,13 @@
      limitations under the License.
 -->
 <resources>
-    <style name="CardViewLight">
+    <style name="CardView">
         <item name="cardBackgroundColor">@color/cardview_light_background</item>
-        <item name="cardCornerRadius">@dimen/cardview_default_radius</item>
+    </style>
+    <style name="CardView.Light">
+        <item name="cardBackgroundColor">@color/cardview_light_background</item>
+    </style>
+    <style name="CardView.Dark">
+        <item name="cardBackgroundColor">@color/cardview_dark_background</item>
     </style>
 </resources>
\ No newline at end of file
diff --git a/v7/cardview/src/android/support/v7/widget/CardView.java b/v7/cardview/src/android/support/v7/widget/CardView.java
index 5c1af68..03f494f 100644
--- a/v7/cardview/src/android/support/v7/widget/CardView.java
+++ b/v7/cardview/src/android/support/v7/widget/CardView.java
@@ -17,7 +17,6 @@
 package android.support.v7.widget;
 
 import android.content.Context;
-import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.os.Build;
 import android.support.v7.cardview.R;
@@ -35,7 +34,7 @@
  * intersection.
  *
  * @attr ref android.support.v7.cardview.R.styleable#CardView_cardBackgroundColor
- * @attr ref android.support.v7.cardview.R.styleable#CardView_cornerRadius
+ * @attr ref android.support.v7.cardview.R.styleable#CardView_cardCornerRadius
  */
 public class CardView extends FrameLayout implements CardViewDelegate {
 
@@ -68,7 +67,7 @@
 
     private void initialize(Context context, AttributeSet attrs, int defStyleAttr) {
         TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CardView, defStyleAttr,
-                R.style.CardViewLight);
+                R.style.CardView_Light);
         int backgroundColor = a.getColor(R.styleable.CardView_cardBackgroundColor, 0);
         float radius = a.getDimension(R.styleable.CardView_cardCornerRadius, 0);
 
@@ -81,7 +80,7 @@
      *
      * @param radius The radius in pixels of the corners of the rectangle shape
      *
-     * @attr ref android.support.v7.cardview.R.styleable#CardView_cornerRadius
+     * @attr ref android.support.v7.cardview.R.styleable#CardView_cardCornerRadius
      *
      * @see #setRadius(float)
      *
@@ -100,4 +99,4 @@
     public float getRadius() {
         return IMPL.getRadius(this);
     }
-}
\ No newline at end of file
+}