Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java |
index 56073eb873ebab2a771b054d55267835a6a1170f..a7ee607f2844848607cca892436e26629e2759cc 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java |
@@ -193,11 +193,11 @@ public class NewTabPageRecyclerView extends RecyclerView { |
return 0; |
} |
- ViewHolder lastContentItem = findLastContentItem(); |
+ ViewHolder spacer = findBottomSpacer(); |
ViewHolder aboveTheFold = findViewHolderForAdapterPosition(aboveTheFoldPosition); |
int bottomSpacing = getHeight() - mToolbarHeight; |
- if (lastContentItem == null || aboveTheFold == null) { |
+ if (spacer == null || aboveTheFold == null) { |
// This can happen in several cases, where some elements are not visible and the |
// RecyclerView didn't already attach them. We handle it by just adding space to make |
// sure that we never run out and force the UI to jump around and get stuck in a |
@@ -205,17 +205,16 @@ public class NewTabPageRecyclerView extends RecyclerView { |
// next pass. Known cases that make it necessary: |
// - The card list is refreshed while the NTP is not shown, for example when changing |
// the sync settings. |
- // - Dismissing a snippet and having the status card coming to take its place. |
+ // - Dismissing a suggestion and having the status card coming to take its place. |
// - Refresh while being below the fold, for example by tapping the status card. |
if (aboveTheFold != null) bottomSpacing -= aboveTheFold.itemView.getBottom(); |
Log.w(TAG, "The RecyclerView items are not attached, can't determine the content " |
- + "height: snap=%s, last=%s. Using full height: %d ", |
- aboveTheFold, lastContentItem, bottomSpacing); |
+ + "height: snap=%s, spacer=%s. Using full height: %d ", |
+ aboveTheFold, spacer, bottomSpacing); |
} else { |
- int contentHeight = |
- lastContentItem.itemView.getBottom() - aboveTheFold.itemView.getBottom(); |
+ int contentHeight = spacer.itemView.getTop() - aboveTheFold.itemView.getBottom(); |
bottomSpacing -= contentHeight - mCompensationHeight; |
} |
@@ -302,49 +301,35 @@ public class NewTabPageRecyclerView extends RecyclerView { |
* @return The {@code ViewHolder} for the first card, or null if it is not present. |
*/ |
private CardViewHolder findFirstCard() { |
- int firstCardPosition = getNewTabPageAdapter().getFirstCardPosition(); |
- if (firstCardPosition == RecyclerView.NO_POSITION) return null; |
+ int position = getNewTabPageAdapter().getFirstCardPosition(); |
+ if (position == RecyclerView.NO_POSITION) return null; |
- ViewHolder viewHolder = findViewHolderForAdapterPosition(firstCardPosition); |
+ ViewHolder viewHolder = findViewHolderForAdapterPosition(position); |
if (!(viewHolder instanceof CardViewHolder)) return null; |
return (CardViewHolder) viewHolder; |
} |
/** |
- * Finds the view holder for the last content item: the footer. |
- * @return The {@code ViewHolder} of the last content item, or null if it is not present. |
- */ |
- private ViewHolder findLastContentItem() { |
- int lastContentItemPosition = getNewTabPageAdapter().getLastContentItemPosition(); |
- if (lastContentItemPosition == RecyclerView.NO_POSITION) return null; |
- |
- ViewHolder viewHolder = findViewHolderForAdapterPosition(lastContentItemPosition); |
- if (viewHolder instanceof Footer.ViewHolder) return viewHolder; |
- |
- return null; |
- } |
- |
- /** |
* Finds the view holder for the bottom spacer. |
* @return The {@code ViewHolder} of the bottom spacer, or null if it is not present. |
*/ |
private ViewHolder findBottomSpacer() { |
- int bottomSpacerPosition = getNewTabPageAdapter().getBottomSpacerPosition(); |
- if (bottomSpacerPosition == RecyclerView.NO_POSITION) return null; |
+ int position = getNewTabPageAdapter().getBottomSpacerPosition(); |
+ if (position == RecyclerView.NO_POSITION) return null; |
- return findViewHolderForAdapterPosition(bottomSpacerPosition); |
+ return findViewHolderForAdapterPosition(position); |
} |
/** |
* Finds the above the fold view. |
- * @return The View for above the fold or null, if it is not present. |
+ * @return The view for above the fold or null, if it is not present. |
*/ |
public NewTabPageLayout findAboveTheFoldView() { |
- int aboveTheFoldPosition = getNewTabPageAdapter().getAboveTheFoldPosition(); |
- if (aboveTheFoldPosition == RecyclerView.NO_POSITION) return null; |
+ int position = getNewTabPageAdapter().getAboveTheFoldPosition(); |
+ if (position == RecyclerView.NO_POSITION) return null; |
- ViewHolder viewHolder = findViewHolderForAdapterPosition(aboveTheFoldPosition); |
+ ViewHolder viewHolder = findViewHolderForAdapterPosition(position); |
if (viewHolder == null) return null; |
View view = viewHolder.itemView; |