| 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 61c9993dbb1cee56ddc4a72b658f488d7ba09acb..8b42f012f91ad944a4e2f45c9d7c1bd0ee8de6f8 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 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| 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 class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| // 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 class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| }
|
|
|
| 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() {
|
| @@ -413,7 +413,7 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| mGroups.add(mAboveTheFold);
|
| mGroups.addAll(mSections.values());
|
| mGroups.add(mSigninPromo);
|
| - if (!mSections.isEmpty()) {
|
| + if (hasVisibleBelowTheFoldItems()) {
|
| mGroups.add(mFooter);
|
| mGroups.add(mBottomSpacer);
|
| }
|
| @@ -429,7 +429,7 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
|
|
| notifyItemRangeRemoved(startPos, removedItems);
|
|
|
| - if (mSections.isEmpty()) {
|
| + if (!hasVisibleBelowTheFoldItems()) {
|
| mGroups.remove(mFooter);
|
| mGroups.remove(mBottomSpacer);
|
| notifyItemRangeRemoved(startPos + removedItems, 2);
|
| @@ -555,6 +555,13 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| private void dismissPromo() {
|
| // TODO(dgn): accessibility announcement.
|
| mSigninPromo.dismiss();
|
| +
|
| + if (!hasVisibleBelowTheFoldItems()) {
|
| + int footerPosition = getLastContentItemPosition();
|
| + mGroups.remove(mFooter);
|
| + mGroups.remove(mBottomSpacer);
|
| + notifyItemRangeRemoved(footerPosition, 2);
|
| + }
|
| }
|
|
|
| /**
|
| @@ -569,9 +576,9 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| }
|
|
|
| /**
|
| - * 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);
|
|
|
| @@ -584,6 +591,10 @@ public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder>
|
| return mRecyclerView.findViewHolderForAdapterPosition(siblingPosDelta + swipePos);
|
| }
|
|
|
| + private boolean hasVisibleBelowTheFoldItems() {
|
| + return !mSections.isEmpty() || mSigninPromo.isShown();
|
| + }
|
| +
|
| @VisibleForTesting
|
| ItemGroup getGroup(int itemPosition) {
|
| int itemsSkipped = 0;
|
|
|