| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.ntp.cards; | 5 package org.chromium.chrome.browser.ntp.cards; |
| 6 | 6 |
| 7 import android.support.annotation.Nullable; | 7 import android.support.annotation.Nullable; |
| 8 import android.support.v7.widget.RecyclerView; | 8 import android.support.v7.widget.RecyclerView; |
| 9 import android.support.v7.widget.RecyclerView.Adapter; | 9 import android.support.v7.widget.RecyclerView.Adapter; |
| 10 import android.support.v7.widget.RecyclerView.ViewHolder; | 10 import android.support.v7.widget.RecyclerView.ViewHolder; |
| 11 import android.view.View; | 11 import android.view.View; |
| 12 import android.view.ViewGroup; | 12 import android.view.ViewGroup; |
| 13 | 13 |
| 14 import org.chromium.base.Callback; | 14 import org.chromium.base.Callback; |
| 15 import org.chromium.base.VisibleForTesting; | 15 import org.chromium.base.VisibleForTesting; |
| 16 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; | 16 import org.chromium.chrome.browser.ntp.ContextMenuManager; |
| 17 import org.chromium.chrome.browser.ntp.UiConfig; | 17 import org.chromium.chrome.browser.ntp.UiConfig; |
| 18 import org.chromium.chrome.browser.ntp.snippets.SectionHeaderViewHolder; | 18 import org.chromium.chrome.browser.ntp.snippets.SectionHeaderViewHolder; |
| 19 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; | 19 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; |
| 20 import org.chromium.chrome.browser.ntp.snippets.SnippetArticleViewHolder; | 20 import org.chromium.chrome.browser.ntp.snippets.SnippetArticleViewHolder; |
| 21 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; | 21 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; |
| 22 import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegate; |
| 22 | 23 |
| 23 import java.util.Collections; | 24 import java.util.Collections; |
| 24 import java.util.List; | 25 import java.util.List; |
| 25 | 26 |
| 26 /** | 27 /** |
| 27 * A class that handles merging above the fold elements and below the fold cards
into an adapter | 28 * A class that handles merging above the fold elements and below the fold cards
into an adapter |
| 28 * that will be used to back the NTP RecyclerView. The first element in the adap
ter should always be | 29 * that will be used to back the NTP RecyclerView. The first element in the adap
ter should always be |
| 29 * the above-the-fold view (containing the logo, search box, and most visited ti
les) and subsequent | 30 * the above-the-fold view (containing the logo, search box, and most visited ti
les) and subsequent |
| 30 * elements will be the cards shown to the user | 31 * elements will be the cards shown to the user |
| 31 */ | 32 */ |
| 32 public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> implements
NodeParent { | 33 public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> implements
NodeParent { |
| 33 private final NewTabPageManager mNewTabPageManager; | 34 private final SuggestionsUiDelegate mUiDelegate; |
| 35 private final ContextMenuManager mContextMenuManager; |
| 36 |
| 34 @Nullable | 37 @Nullable |
| 35 private final View mAboveTheFoldView; | 38 private final View mAboveTheFoldView; |
| 36 private final UiConfig mUiConfig; | 39 private final UiConfig mUiConfig; |
| 37 private NewTabPageRecyclerView mRecyclerView; | 40 private NewTabPageRecyclerView mRecyclerView; |
| 38 | 41 |
| 39 private final InnerNode mRoot; | 42 private final InnerNode mRoot; |
| 40 | 43 |
| 41 @Nullable | 44 @Nullable |
| 42 private final AboveTheFoldItem mAboveTheFold; | 45 private final AboveTheFoldItem mAboveTheFold; |
| 43 private final SectionList mSections; | 46 private final SectionList mSections; |
| 44 private final SignInPromo mSigninPromo; | 47 private final SignInPromo mSigninPromo; |
| 45 private final AllDismissedItem mAllDismissed; | 48 private final AllDismissedItem mAllDismissed; |
| 46 private final Footer mFooter; | 49 private final Footer mFooter; |
| 47 private final SpacingItem mBottomSpacer; | 50 private final SpacingItem mBottomSpacer; |
| 48 | 51 |
| 49 /** | 52 /** |
| 50 * Creates the adapter that will manage all the cards to display on the NTP. | 53 * Creates the adapter that will manage all the cards to display on the NTP. |
| 51 * | 54 * @param uiDelegate used to interact with the rest of the system. |
| 52 * @param manager the NewTabPageManager to use to interact with the rest of
the system. | |
| 53 * @param aboveTheFoldView the layout encapsulating all the above-the-fold e
lements | 55 * @param aboveTheFoldView the layout encapsulating all the above-the-fold e
lements |
| 54 * (logo, search box, most visited tiles), or null if only suggestio
ns should | 56 * (logo, search box, most visited tiles), or null if only suggestio
ns should |
| 55 * be displayed. | 57 * be displayed. |
| 56 * @param uiConfig the NTP UI configuration, to be passed to created views. | 58 * @param uiConfig the NTP UI configuration, to be passed to created views. |
| 57 * @param offlinePageBridge the OfflinePageBridge used to determine if artic
les are available | 59 * @param offlinePageBridge used to determine if articles are available. |
| 58 * offline. | 60 * @param contextMenuManager used to build context menus. |
| 59 */ | 61 */ |
| 60 public NewTabPageAdapter(NewTabPageManager manager, @Nullable View aboveTheF
oldView, | 62 public NewTabPageAdapter(SuggestionsUiDelegate uiDelegate, @Nullable View ab
oveTheFoldView, |
| 61 UiConfig uiConfig, OfflinePageBridge offlinePageBridge) { | 63 UiConfig uiConfig, OfflinePageBridge offlinePageBridge, |
| 62 mNewTabPageManager = manager; | 64 ContextMenuManager contextMenuManager) { |
| 65 mUiDelegate = uiDelegate; |
| 66 mContextMenuManager = contextMenuManager; |
| 67 |
| 63 mAboveTheFoldView = aboveTheFoldView; | 68 mAboveTheFoldView = aboveTheFoldView; |
| 64 mUiConfig = uiConfig; | 69 mUiConfig = uiConfig; |
| 65 mRoot = new InnerNode(); | 70 mRoot = new InnerNode(); |
| 66 | 71 |
| 67 mSections = new SectionList(mNewTabPageManager, offlinePageBridge); | 72 mSections = new SectionList(mUiDelegate, offlinePageBridge); |
| 68 mSigninPromo = new SignInPromo(mNewTabPageManager); | 73 mSigninPromo = new SignInPromo(mUiDelegate); |
| 69 mAllDismissed = new AllDismissedItem(); | 74 mAllDismissed = new AllDismissedItem(); |
| 70 mFooter = new Footer(); | 75 mFooter = new Footer(); |
| 71 | 76 |
| 72 if (mAboveTheFoldView == null) { | 77 if (mAboveTheFoldView == null) { |
| 73 mAboveTheFold = null; | 78 mAboveTheFold = null; |
| 74 } else { | 79 } else { |
| 75 mAboveTheFold = new AboveTheFoldItem(); | 80 mAboveTheFold = new AboveTheFoldItem(); |
| 76 mRoot.addChild(mAboveTheFold); | 81 mRoot.addChild(mAboveTheFold); |
| 77 } | 82 } |
| 78 mRoot.addChildren(mSections, mSigninPromo, mAllDismissed, mFooter); | 83 mRoot.addChildren(mSections, mSigninPromo, mAllDismissed, mFooter); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 98 assert parent == mRecyclerView; | 103 assert parent == mRecyclerView; |
| 99 | 104 |
| 100 switch (viewType) { | 105 switch (viewType) { |
| 101 case ItemViewType.ABOVE_THE_FOLD: | 106 case ItemViewType.ABOVE_THE_FOLD: |
| 102 return new NewTabPageViewHolder(mAboveTheFoldView); | 107 return new NewTabPageViewHolder(mAboveTheFoldView); |
| 103 | 108 |
| 104 case ItemViewType.HEADER: | 109 case ItemViewType.HEADER: |
| 105 return new SectionHeaderViewHolder(mRecyclerView, mUiConfig); | 110 return new SectionHeaderViewHolder(mRecyclerView, mUiConfig); |
| 106 | 111 |
| 107 case ItemViewType.SNIPPET: | 112 case ItemViewType.SNIPPET: |
| 108 return new SnippetArticleViewHolder(mRecyclerView, mNewTabPageMa
nager, mUiConfig); | 113 return new SnippetArticleViewHolder( |
| 114 mRecyclerView, mContextMenuManager, mUiDelegate, mUiConf
ig); |
| 109 | 115 |
| 110 case ItemViewType.SPACING: | 116 case ItemViewType.SPACING: |
| 111 return new NewTabPageViewHolder(SpacingItem.createView(parent)); | 117 return new NewTabPageViewHolder(SpacingItem.createView(parent)); |
| 112 | 118 |
| 113 case ItemViewType.STATUS: | 119 case ItemViewType.STATUS: |
| 114 return new StatusCardViewHolder(mRecyclerView, mNewTabPageManage
r, mUiConfig); | 120 return new StatusCardViewHolder(mRecyclerView, mContextMenuManag
er, mUiConfig); |
| 115 | 121 |
| 116 case ItemViewType.PROGRESS: | 122 case ItemViewType.PROGRESS: |
| 117 return new ProgressViewHolder(mRecyclerView); | 123 return new ProgressViewHolder(mRecyclerView); |
| 118 | 124 |
| 119 case ItemViewType.ACTION: | 125 case ItemViewType.ACTION: |
| 120 return new ActionItem.ViewHolder(mRecyclerView, mNewTabPageManag
er, mUiConfig); | 126 return new ActionItem.ViewHolder( |
| 127 mRecyclerView, mContextMenuManager, mUiDelegate, mUiConf
ig); |
| 121 | 128 |
| 122 case ItemViewType.PROMO: | 129 case ItemViewType.PROMO: |
| 123 return new SignInPromo.ViewHolder(mRecyclerView, mNewTabPageMana
ger, mUiConfig); | 130 return new SignInPromo.ViewHolder(mRecyclerView, mContextMenuMan
ager, mUiConfig); |
| 124 | 131 |
| 125 case ItemViewType.FOOTER: | 132 case ItemViewType.FOOTER: |
| 126 return new Footer.ViewHolder(mRecyclerView, mNewTabPageManager); | 133 return new Footer.ViewHolder(mRecyclerView, mUiDelegate.getNavig
ationDelegate()); |
| 127 | 134 |
| 128 case ItemViewType.ALL_DISMISSED: | 135 case ItemViewType.ALL_DISMISSED: |
| 129 return new AllDismissedItem.ViewHolder(mRecyclerView, mSections)
; | 136 return new AllDismissedItem.ViewHolder(mRecyclerView, mSections)
; |
| 130 } | 137 } |
| 131 | 138 |
| 132 assert false : viewType; | 139 assert false : viewType; |
| 133 return null; | 140 return null; |
| 134 } | 141 } |
| 135 | 142 |
| 136 @Override | 143 @Override |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 } | 270 } |
| 264 | 271 |
| 265 SectionList getSectionListForTesting() { | 272 SectionList getSectionListForTesting() { |
| 266 return mSections; | 273 return mSections; |
| 267 } | 274 } |
| 268 | 275 |
| 269 InnerNode getRootForTesting() { | 276 InnerNode getRootForTesting() { |
| 270 return mRoot; | 277 return mRoot; |
| 271 } | 278 } |
| 272 } | 279 } |
| OLD | NEW |