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

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

Issue 1833763002: Add new NTP layout with snippet cards and hide it behind a flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address more comments Created 4 years, 9 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
new file mode 100644
index 0000000000000000000000000000000000000000..189ab137ddcd370fee3c54d666b696d85505eb43
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java
@@ -0,0 +1,101 @@
+// 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.cards;
+
+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.SnippetHeaderListItem;
+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 List<NewTabPageListItem> mNewTabPageListItems;
+
+ /**
+ * Constructor to create the manager for all the cards to display on the NTP
+ *
+ * @param manager the NewTabPageManager to use to interact with the snippets service and the
+ * rest of the system.
+ * @param newTabPageLayout the layout encapsulating all the above-the-fold elements
+ * (logo, search box, most visited tiles)
+ */
+ public NewTabPageAdapter(NewTabPageManager manager, NewTabPageLayout newTabPageLayout) {
+ mNewTabPageManager = manager;
+ mNewTabPageLayout = newTabPageLayout;
+ mAboveTheFoldListItem = new AboveTheFoldListItem();
+ mNewTabPageListItems = new ArrayList<NewTabPageListItem>();
+ mNewTabPageListItems.add(mAboveTheFoldListItem);
+
+ mNewTabPageManager.setSnippetsObserver(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 SnippetHeaderListItem());
+ 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(SnippetHeaderListItem.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();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698