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

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

Issue 1928063002: [NTP Snippets] Fill space below the last snippet if necessary (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: suppress warning, back to int instead of viewlist, remove unnecessary checks Created 4 years, 7 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/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 4048be5cddb9a19c98e00fda7e0cfad87b7b5782..ac9e2a5eb7878ba3a124f1a7202a25a1396ba541 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
@@ -15,6 +15,7 @@
import android.view.animation.Interpolator;
import org.chromium.base.Log;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
@@ -33,19 +34,37 @@
*/
public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> implements SnippetsObserver {
private static final String TAG = "Ntp";
+ private static final Interpolator FADE_INTERPOLATOR = new FastOutLinearInInterpolator();
private final NewTabPageManager mNewTabPageManager;
private final NewTabPageLayout mNewTabPageLayout;
private final AboveTheFoldListItem mAboveTheFoldListItem;
private final List<NewTabPageListItem> mNewTabPageListItems;
private final ItemTouchCallbacks mItemTouchCallbacks;
-
- private static final Interpolator FADE_INTERPOLATOR = new FastOutLinearInInterpolator();
+ private NewTabPageRecyclerView mRecyclerView;
private class ItemTouchCallbacks extends ItemTouchHelper.Callback {
@Override
public void onSwiped(ViewHolder viewHolder, int direction) {
- NewTabPageAdapter.this.dismissItem(viewHolder.getAdapterPosition());
+ mRecyclerView.onItemDismissStarted(viewHolder.itemView);
+
+ // This is going to have a effect at the next layout pass, which is going to happen
+ // after the item has been removed from the adapter and the layout.
+ mRecyclerView.refreshBottomSpacing();
+
+ NewTabPageAdapter.this.dismissItem(viewHolder);
+ }
+
+ @Override
+ public void clearView(RecyclerView recyclerView, ViewHolder viewHolder) {
+ // clearView() is called when an interaction with the item is finished, which does
+ // 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);
+ }
+
+ super.clearView(recyclerView, viewHolder);
}
@Override
@@ -123,6 +142,7 @@ public void onSnippetsReceived(List<SnippetArticle> listSnippets) {
mNewTabPageListItems.add(mAboveTheFoldListItem);
mNewTabPageListItems.add(new SnippetHeaderListItem());
mNewTabPageListItems.addAll(listSnippets);
+ mNewTabPageListItems.add(new SpacingListItem());
notifyDataSetChanged();
@@ -151,6 +171,10 @@ public NewTabPageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
SnippetArticleViewHolder.createView(parent), mNewTabPageManager);
}
+ if (viewType == NewTabPageListItem.VIEW_TYPE_SPACING) {
+ return new NewTabPageViewHolder(SpacingListItem.createView(parent));
+ }
+
return null;
}
@@ -164,20 +188,25 @@ public int getItemCount() {
return mNewTabPageListItems.size();
}
- private void dismissItem(int position) {
- assert getItemViewType(position) == NewTabPageListItem.VIEW_TYPE_SNIPPET;
- mNewTabPageManager.onSnippetDismissed((SnippetArticle) mNewTabPageListItems.get(position));
- mNewTabPageListItems.remove(position);
+ @SuppressFBWarnings("BC_UNCONFIRMED_CAST")
gone 2016/05/16 23:47:29 Adding a type of FindBugs suppression is uglier th
dgn 2016/05/17 09:16:53 Done. Do you know who FindBugs doesn't complain fo
gone 2016/05/17 16:58:19 Honestly don't have a clue :/ I normally just do
+ @Override
+ public void onAttachedToRecyclerView(RecyclerView recyclerView) {
+ super.onAttachedToRecyclerView(recyclerView);
- int numRemovedItems = 1;
- if (mNewTabPageListItems.size() == 2) {
- // There's only the above-the-fold item and the header left, so we remove the header.
- position = 1; // When present, the header is always at that position.
- mNewTabPageListItems.remove(position);
- ++numRemovedItems;
- }
+ // We are assuming for now that the adapter is used with a single RecyclerView.
+ // Getting the reference as we are doing here is going to be broken if that changes.
+ assert mRecyclerView == null;
+ mRecyclerView = (NewTabPageRecyclerView) recyclerView;
+ }
+
+ private void dismissItem(ViewHolder itemViewHolder) {
+ assert itemViewHolder.getItemViewType() == NewTabPageListItem.VIEW_TYPE_SNIPPET;
- notifyItemRangeRemoved(position, numRemovedItems);
+ int position = itemViewHolder.getAdapterPosition();
+ mNewTabPageManager.onSnippetDismissed((SnippetArticle) mNewTabPageListItems.get(position));
+
+ mNewTabPageListItems.remove(position);
+ notifyItemRemoved(position);
}
List<NewTabPageListItem> getItemsForTesting() {

Powered by Google App Engine
This is Rietveld 408576698