| 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();
|
| + }
|
| +}
|
|
|