Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java |
index 9af358449ac4160b8285945afbf4e7187675f9fd..0558282a008b06940c525989c6c0bdeba465392a 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java |
@@ -69,7 +69,7 @@ |
private class ItemTouchCallbacks extends ItemTouchHelper.Callback { |
@Override |
public void onSwiped(ViewHolder viewHolder, int direction) { |
- mRecyclerView.onItemDismissStarted(viewHolder.itemView); |
+ mRecyclerView.onItemDismissStarted(viewHolder); |
NewTabPageAdapter.this.dismissItem(viewHolder.getAdapterPosition()); |
} |
@@ -79,7 +79,7 @@ public void clearView(RecyclerView recyclerView, ViewHolder viewHolder) { |
// not mean that the user went all the way and dismissed the item before releasing it. |
// We need to check that the item has been removed. |
if (viewHolder.getAdapterPosition() == RecyclerView.NO_POSITION) { |
- mRecyclerView.onItemDismissFinished(viewHolder.itemView); |
+ mRecyclerView.onItemDismissFinished(viewHolder); |
} |
super.clearView(recyclerView, viewHolder); |
@@ -364,10 +364,10 @@ public int getFirstHeaderPosition() { |
} |
public int getFirstCardPosition() { |
- // TODO(mvanouwerkerk): Don't rely on getFirstHeaderPosition() here. |
- int firstHeaderPosition = getFirstHeaderPosition(); |
- if (firstHeaderPosition == RecyclerView.NO_POSITION) return RecyclerView.NO_POSITION; |
- return firstHeaderPosition + 1; |
+ for (int i = 0; i < getItemCount(); ++i) { |
+ if (CardViewHolder.isCard(getItemViewType(i))) return i; |
+ } |
+ return RecyclerView.NO_POSITION; |
} |
public int getLastContentItemPosition() { |
@@ -414,7 +414,7 @@ private void updateGroups() { |
// TODO(treib,bauerb): Preserve the order of categories we got from getCategories. |
mGroups.addAll(mSections.values()); |
mGroups.add(mSigninPromo); |
- if (!mSections.isEmpty()) { |
+ if (hasVisibleBelowTheFoldItems()) { |
mGroups.add(mFooter); |
mGroups.add(mBottomSpacer); |
} |
@@ -430,7 +430,7 @@ private void removeSection(SuggestionsSection section) { |
notifyItemRangeRemoved(startPos, removedItems); |
- if (mSections.isEmpty()) { |
+ if (!hasVisibleBelowTheFoldItems()) { |
mGroups.remove(mFooter); |
mGroups.remove(mBottomSpacer); |
notifyItemRangeRemoved(startPos + removedItems, 2); |
@@ -556,6 +556,13 @@ public void onResult(Boolean result) { |
private void dismissPromo() { |
// TODO(dgn): accessibility announcement. |
mSigninPromo.dismiss(); |
+ |
+ if (!hasVisibleBelowTheFoldItems()) { |
+ int footerPosition = getLastContentItemPosition(); |
+ mGroups.remove(mFooter); |
+ mGroups.remove(mBottomSpacer); |
+ notifyItemRangeRemoved(footerPosition, 2); |
+ } |
} |
/** |
@@ -570,9 +577,9 @@ private void dismissPromo() { |
} |
/** |
- * Returns another view holder that should be dismissed as the same time as the provided one. |
+ * Returns another view holder that should be dismissed at the same time as the provided one. |
*/ |
- private ViewHolder getDismissSibling(ViewHolder viewHolder) { |
+ public ViewHolder getDismissSibling(ViewHolder viewHolder) { |
int swipePos = viewHolder.getAdapterPosition(); |
ItemGroup group = getGroup(swipePos); |
@@ -585,6 +592,10 @@ private ViewHolder getDismissSibling(ViewHolder viewHolder) { |
return mRecyclerView.findViewHolderForAdapterPosition(siblingPosDelta + swipePos); |
} |
+ private boolean hasVisibleBelowTheFoldItems() { |
+ return !mSections.isEmpty() || mSigninPromo.isShown(); |
+ } |
+ |
@VisibleForTesting |
ItemGroup getGroup(int itemPosition) { |
int itemsSkipped = 0; |