| Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/CardViewHolder.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/CardViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/CardViewHolder.java
|
| index 05a102fe16ae14529b25f788ebd1a2575caf5364..4eff2c8841524821a5facb40ce6f55c406fb36ba 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/CardViewHolder.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/CardViewHolder.java
|
| @@ -4,6 +4,7 @@
|
|
|
| package org.chromium.chrome.browser.ntp.cards;
|
|
|
| +import android.graphics.Rect;
|
| import android.support.annotation.CallSuper;
|
| import android.support.annotation.DrawableRes;
|
| import android.support.annotation.Nullable;
|
| @@ -18,6 +19,7 @@ import android.view.View.OnClickListener;
|
| import android.view.ViewGroup;
|
| import android.view.animation.Interpolator;
|
|
|
| +import org.chromium.base.ApiCompatibilityUtils;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ntp.ContextMenuManager;
|
| import org.chromium.chrome.browser.ntp.UiConfig;
|
| @@ -48,11 +50,16 @@ public abstract class CardViewHolder extends NewTabPageViewHolder {
|
| private final int mMaxPeekPadding;
|
|
|
| /**
|
| - * Due to the card background being a 9 patch file - the card border shadow will be part of
|
| - * the card width and height. This value will be used to adjust values to account for the
|
| - * borders.
|
| + * The card shadow is part of the drawable nine-patch and not drawn via setElevation(),
|
| + * so it is included in the height and width of the drawable. This member contains the
|
| + * dimensions of the shadow (from the drawable's padding), so it can be used to offset the
|
| + * position in calculations.
|
| */
|
| - private final int mCards9PatchAdjustment;
|
| + private final Rect mCardShadow = new Rect();
|
| +
|
| + private final int mCardGap;
|
| +
|
| + private final int mDefaultLateralMargin;
|
|
|
| protected final NewTabPageRecyclerView mRecyclerView;
|
|
|
| @@ -78,8 +85,10 @@ public abstract class CardViewHolder extends NewTabPageViewHolder {
|
| UiConfig uiConfig, final ContextMenuManager contextMenuManager) {
|
| super(inflateView(layoutId, recyclerView));
|
|
|
| - mCards9PatchAdjustment = recyclerView.getResources().getDimensionPixelSize(
|
| - R.dimen.snippets_card_9_patch_adjustment);
|
| + ApiCompatibilityUtils.getDrawable(recyclerView.getResources(), R.drawable.card_single)
|
| + .getPadding(mCardShadow);
|
| +
|
| + mCardGap = recyclerView.getResources().getDimensionPixelSize(R.dimen.snippets_card_gap);
|
|
|
| mMaxPeekPadding = recyclerView.getResources().getDimensionPixelSize(
|
| R.dimen.snippets_padding);
|
| @@ -115,7 +124,11 @@ public abstract class CardViewHolder extends NewTabPageViewHolder {
|
|
|
| // Configure the resizer to use negative margins on regular display to balance out the
|
| // lateral shadow of the card 9-patch and avoid a rounded corner effect.
|
| - mMarginResizer.setMargins(-mCards9PatchAdjustment);
|
| + int cardCornerRadius = recyclerView.getResources().getDimensionPixelSize(
|
| + R.dimen.snippets_card_corner_radius);
|
| + assert mCardShadow.left == mCardShadow.right;
|
| + mDefaultLateralMargin = -(mCardShadow.left + cardCornerRadius);
|
| + mMarginResizer.setMargins(mDefaultLateralMargin);
|
| }
|
|
|
| /**
|
| @@ -176,7 +189,11 @@ public abstract class CardViewHolder extends NewTabPageViewHolder {
|
| hasCardBelow = isCard(belowViewType) && belowViewType != ItemViewType.PROMO;
|
| }
|
|
|
| - getParams().bottomMargin = hasCardBelow ? -mCards9PatchAdjustment : 0;
|
| + // By default the apparent distance between two cards is the sum of the bottom and top
|
| + // height of their shadows. We want |mCardGap| instead, so we set the bottom margin to
|
| + // the difference.
|
| + getParams().bottomMargin =
|
| + hasCardBelow ? (mCardGap - (mCardShadow.top + mCardShadow.bottom)) : 0;
|
|
|
| @DrawableRes
|
| int selectedBackground = selectBackground(hasCardAbove, hasCardBelow);
|
| @@ -247,9 +264,8 @@ public abstract class CardViewHolder extends NewTabPageViewHolder {
|
| }
|
| itemView.setPadding(lateralPadding, mMaxPeekPadding, lateralPadding, mMaxPeekPadding);
|
|
|
| - // Adjust the margins by |mCards9PatchAdjustment| so the card width
|
| - // is the actual width not including the elevation shadow, so we can have full bleed.
|
| - mMarginResizer.setMargins(mMaxPeekPadding - (peekPadding + mCards9PatchAdjustment));
|
| + // Adjust the margins. The shadow width is offset via the default lateral margin.
|
| + mMarginResizer.setMargins(mDefaultLateralMargin + mMaxPeekPadding - peekPadding);
|
|
|
| // Set the opacity of the card content to be 0 when peeking and 1 when full width.
|
| int itemViewChildCount = ((ViewGroup) itemView).getChildCount();
|
| @@ -285,10 +301,10 @@ public abstract class CardViewHolder extends NewTabPageViewHolder {
|
|
|
| @DrawableRes
|
| protected int selectBackground(boolean hasCardAbove, boolean hasCardBelow) {
|
| - if (hasCardAbove && hasCardBelow) return R.drawable.ntp_card_middle;
|
| - if (!hasCardAbove && hasCardBelow) return R.drawable.ntp_card_top;
|
| - if (hasCardAbove && !hasCardBelow) return R.drawable.ntp_card_bottom;
|
| - return R.drawable.ntp_card_single;
|
| + if (hasCardAbove && hasCardBelow) return R.drawable.card_middle;
|
| + if (!hasCardAbove && hasCardBelow) return R.drawable.card_top;
|
| + if (hasCardAbove && !hasCardBelow) return R.drawable.card_bottom;
|
| + return R.drawable.card_single;
|
| }
|
|
|
| protected NewTabPageRecyclerView getRecyclerView() {
|
|
|