Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/v2/NewTabPageAdapter.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/v2/NewTabPageAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/v2/NewTabPageAdapter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..773e523564023f89201d528c68e91db32749ba98 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/v2/NewTabPageAdapter.java |
@@ -0,0 +1,112 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.ntp.v2; |
+ |
+import android.support.v7.widget.RecyclerView.Adapter; |
+import android.view.ViewGroup; |
+ |
+import org.chromium.base.Log; |
+import org.chromium.chrome.browser.ntp.NewTabPageLayout; |
+import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; |
+import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; |
+import org.chromium.chrome.browser.ntp.snippets.SnippetArticleViewHolder; |
+import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; |
+import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge.SnippetsObserver; |
+ |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** |
+ * A class that handles merging above the fold elements and below the fold cards into an adapter |
+ * that will be used to back the NTP RecyclerView. The first element in the adapter should always be |
+ * the above-the-fold view (containing the logo, search box, and most visited tiles) and subsequent |
+ * elements will be the cards shown to the user |
+ */ |
+public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> implements SnippetsObserver { |
+ private static final String TAG = "Ntp"; |
+ |
+ private final NewTabPageManager mNewTabPageManager; |
+ private final NewTabPageLayout mNewTabPageLayout; |
+ private final AboveTheFoldListItem mAboveTheFoldListItem; |
+ private final SnippetsBridge mSnippetsBridge; |
+ private final List<NewTabPageListItem> mNewTabPageListItems; |
+ |
+ /** |
+ * Constructor to create the manager for all the cards to display on the NTP |
+ * |
+ * @param snippetsBridge the bridge used to communicate with the native snippet service |
+ * @param manager the NewTabPageManager to use to start navigations |
+ * @param newTabPageLayout the layout encapsulating all the above-the-fold elements |
+ * (logo, search box, most visited tiles) |
+ */ |
+ public NewTabPageAdapter(SnippetsBridge snippetsBridge, NewTabPageManager manager, |
+ NewTabPageLayout newTabPageLayout) { |
+ mNewTabPageManager = manager; |
+ mNewTabPageLayout = newTabPageLayout; |
+ mSnippetsBridge = snippetsBridge; |
+ mAboveTheFoldListItem = new AboveTheFoldListItem(); |
+ mNewTabPageListItems = new ArrayList<NewTabPageListItem>(); |
+ mNewTabPageListItems.add(mAboveTheFoldListItem); |
+ |
+ mSnippetsBridge.setObserver(this); |
+ } |
+ |
+ @Override |
+ public void onSnippetsReceived(List<SnippetArticle> listSnippets) { |
+ int newSnippetCount = listSnippets.size(); |
+ Log.d(TAG, "Received %d new snippets.", newSnippetCount); |
+ mNewTabPageListItems.clear(); |
+ mNewTabPageListItems.add(mAboveTheFoldListItem); |
+ |
+ if (newSnippetCount > 0) { |
+ mNewTabPageListItems.add(new HeaderListItem()); |
+ mNewTabPageListItems.addAll(listSnippets); |
+ } |
+ |
+ notifyDataSetChanged(); |
+ } |
+ |
+ @Override |
+ @NewTabPageListItem.ViewType |
+ public int getItemViewType(int position) { |
+ return mNewTabPageListItems.get(position).getType(); |
+ } |
+ |
+ @Override |
+ public NewTabPageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { |
+ if (viewType == NewTabPageListItem.VIEW_TYPE_ABOVE_THE_FOLD) { |
+ return new NewTabPageViewHolder(mNewTabPageLayout); |
+ } |
+ |
+ if (viewType == NewTabPageListItem.VIEW_TYPE_HEADER) { |
+ return new NewTabPageViewHolder(HeaderListItem.createView(parent)); |
+ } |
+ |
+ if (viewType == NewTabPageListItem.VIEW_TYPE_SNIPPET) { |
+ return new SnippetArticleViewHolder( |
+ SnippetArticleViewHolder.createView(parent), mNewTabPageManager); |
+ } |
+ |
+ return null; |
+ } |
+ |
+ @Override |
+ public void onBindViewHolder(NewTabPageViewHolder holder, final int position) { |
+ holder.onBindViewHolder(mNewTabPageListItems.get(position)); |
+ } |
+ |
+ @Override |
+ public int getItemCount() { |
+ return mNewTabPageListItems.size(); |
+ } |
+ |
+ /** |
+ * Stops receiving updates about list items. This method should be called when the view is |
+ * going away or the sources of data are being destroyed. |
+ */ |
+ public void stopObserving() { |
+ mSnippetsBridge.removeObserver(); |
+ } |
+} |