| 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;
|
|
|