Chromium Code Reviews| 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..95d249796135d42dfb64c66481ac9adb34094a22 |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/v2/NewTabPageAdapter.java |
| @@ -0,0 +1,104 @@ |
| +// 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.NewTabPageViewHolder; |
| +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 snippetsManager the NewTabPageManager to use to start navigations |
|
newt (away)
2016/03/30 19:03:51
update params in javadoc
dgn
2016/03/31 00:46:45
Done.
|
| + * @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); |
|
newt (away)
2016/03/30 19:03:51
Shouldn't we remove this observer? Or are you coun
dgn
2016/03/31 00:46:45
Added methods to do it at NTP#destroy() time.
|
| + } |
| + |
| + @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 AboveTheFoldListItem.ViewHolder(mNewTabPageLayout); |
| + } |
| + |
| + if (viewType == NewTabPageListItem.VIEW_TYPE_HEADER) { |
| + return new HeaderListItem.ViewHolder(HeaderListItem.ViewHolder.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(); |
| + } |
| +} |