Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(678)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/CardViewHolder.java

Issue 2273713002: 📰Use the scroll offset to stop the card from peeking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 c1d1a7c38a650ced72767f229ac5b6aa258710f1..3422712a923b16a34b79c03f78e13b77d449d03f 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
@@ -12,7 +12,6 @@
import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
@@ -22,7 +21,6 @@
import android.view.animation.Interpolator;
import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.UiConfig;
import org.chromium.chrome.browser.util.MathUtils;
import org.chromium.chrome.browser.util.ViewUtils;
@@ -71,8 +69,6 @@
*/
private float mPeekingPercentage;
- private boolean mCanPeek = false;
-
@DrawableRes
private int mBackground;
@@ -131,11 +127,12 @@ public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo men
@Override
public void onBindViewHolder(NewTabPageItem item) {
// Reset the peek status to avoid recycled view holders to be peeking at the wrong moment.
- int firstCardPos = mRecyclerView.getNewTabPageAdapter().getFirstCardPosition();
- NewTabPageLayout aboveTheFold = mRecyclerView.findAboveTheFoldView();
- setCanPeek(getAdapterPosition() == firstCardPos
- && aboveTheFold != null && aboveTheFold.hasSpaceForPeekingCard());
- updatePeek();
+ if (getAdapterPosition() != mRecyclerView.getNewTabPageAdapter().getFirstCardPosition()) {
+ // Not the first card, we can't peek anyway.
+ setPeekingPercentage(0f);
+ } else {
+ mRecyclerView.updatePeekingCard(this);
+ }
// Reset the transparency and translation in case a dismissed card is being recycled.
itemView.setAlpha(1f);
@@ -168,28 +165,23 @@ public void updateLayoutParams() {
/**
* Change the width, padding and child opacity of the card to give a smooth transition as the
* user scrolls.
+ * @param availableSpace space (pixels) available between the bottom of the screen and the
+ * above-the-fold section, where the card can peek.
+ * @param canPeek whether the screen size allows having a peeking card.
*/
- public void updatePeek() {
+ public void updatePeek(int availableSpace, boolean canPeek) {
float peekingPercentage;
- if (getCanPeek()) {
- // Find the position of the top of the current card. We use the bottom of the previous
- // view for it because near initialization time, the view has not been placed yet in
- // the recycler view and we get a wrong value.
- ViewHolder previousViewHolder =
- mRecyclerView.findViewHolderForAdapterPosition(getAdapterPosition() - 1);
- int top = previousViewHolder == null ? itemView.getTop()
- : previousViewHolder.itemView.getBottom();
-
- // How much of the (top of the) card is visible?
- int visible = mRecyclerView.getHeight() - top;
+ if (!canPeek) {
+ peekingPercentage = 0f;
+ } else {
// If 1 padding unit (|mMaxPeekPadding|) is visible, the card is fully peeking. This is
// reduced as the card is scrolled up, until 2 padding units are visible and the card is
// not peeking anymore at all. Anything not between 0 and 1 is clamped.
- peekingPercentage = MathUtils.clamp(2f - (float) visible / mMaxPeekPadding, 0f, 1f);
- } else {
- peekingPercentage = 0f;
+ peekingPercentage =
+ MathUtils.clamp(2f - (float) availableSpace / mMaxPeekPadding, 0f, 1f);
}
+
setPeekingPercentage(peekingPercentage);
}
@@ -200,20 +192,6 @@ public boolean isPeeking() {
return mPeekingPercentage > 0f;
}
- /**
- * Set whether the card can peek.
- */
- public void setCanPeek(boolean canPeek) {
- mCanPeek = canPeek;
- }
-
- /**
- * @return Whether the card can peek.
- */
- public boolean getCanPeek() {
- return mCanPeek;
- }
-
@Override
public void updateViewStateForDismiss(float dX) {
// Any changes in the animation here should be reflected also in |dismiss|

Powered by Google App Engine
This is Rietveld 408576698