Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SuggestionsSection.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SuggestionsSection.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SuggestionsSection.java |
index 5263e29a98d095ce7f3354b0107adde1369a1c67..31e695dae97b62ff54281cb2ee162594e586654e 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SuggestionsSection.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SuggestionsSection.java |
@@ -5,6 +5,7 @@ |
package org.chromium.chrome.browser.ntp.cards; |
import org.chromium.base.VisibleForTesting; |
+import org.chromium.chrome.browser.ntp.cards.StatusItem.ActionDelegate; |
import org.chromium.chrome.browser.ntp.snippets.CategoryInt; |
import org.chromium.chrome.browser.ntp.snippets.CategoryStatus.CategoryStatusEnum; |
import org.chromium.chrome.browser.ntp.snippets.SectionHeader; |
@@ -21,18 +22,39 @@ |
public class SuggestionsSection implements ItemGroup { |
private final List<SnippetArticle> mSuggestions = new ArrayList<>(); |
private final SectionHeader mHeader; |
- private final StatusItem mStatus; |
+ private StatusItem mStatus; |
private final ProgressItem mProgressIndicator = new ProgressItem(); |
+ private final ActionDelegate mActionDelegate; |
private final ActionItem mMoreButton; |
+ @CategoryInt |
+ private final int mCategory; |
private final Observer mObserver; |
- private final SuggestionsCategoryInfo mCategoryInfo; |
- public SuggestionsSection(SuggestionsCategoryInfo info, Observer observer) { |
+ public SuggestionsSection(@CategoryInt int category, SuggestionsCategoryInfo info, |
+ final NewTabPageAdapter adapter) { |
+ this(category, info, adapter, new ActionDelegate() { |
+ @Override |
+ public void onButtonTapped() { |
+ adapter.reloadSnippets(); |
+ } |
+ }); |
+ } |
+ |
+ @VisibleForTesting |
+ SuggestionsSection(@CategoryInt int category, SuggestionsCategoryInfo info, Observer observer, |
+ ActionDelegate actionDelegate) { |
mHeader = new SectionHeader(info.getTitle()); |
- mCategoryInfo = info; |
+ mCategory = category; |
mObserver = observer; |
- mMoreButton = new ActionItem(info); |
- mStatus = StatusItem.createNoSuggestionsItem(info); |
+ |
+ // TODO(dgn): Properly define strings, actions, etc. for each section and category type. |
+ if (info.hasMoreButton()) { |
+ mMoreButton = new ActionItem(category); |
+ mActionDelegate = null; |
+ } else { |
+ mMoreButton = null; |
+ mActionDelegate = actionDelegate; |
+ } |
} |
@Override |
@@ -43,7 +65,7 @@ |
items.addAll(mSuggestions); |
if (mSuggestions.isEmpty()) items.add(mStatus); |
- if (mCategoryInfo.hasMoreButton() || mSuggestions.isEmpty()) items.add(mMoreButton); |
+ if (mMoreButton != null) items.add(mMoreButton); |
if (mSuggestions.isEmpty()) items.add(mProgressIndicator); |
return Collections.unmodifiableList(items); |
@@ -60,14 +82,12 @@ |
int globalRemovedIndex = removedIndex + 1; // Header has index 0 in the section. |
mObserver.notifyItemRemoved(this, globalRemovedIndex); |
- // If we still have some suggestions, we are done. Otherwise, we'll have to notify about the |
- // status-related items that are now present. |
- if (hasSuggestions()) return; |
- mObserver.notifyItemInserted(this, globalRemovedIndex); // Status card. |
- if (!mCategoryInfo.hasMoreButton()) { |
- mObserver.notifyItemInserted(this, globalRemovedIndex + 1); // Action card. |
+ if (!hasSuggestions()) { |
+ // When the last suggestion is removed, we insert other items to display the status, |
+ // notify about them too. |
+ mObserver.notifyItemInserted(this, globalRemovedIndex); |
+ mObserver.notifyItemInserted(this, globalRemovedIndex + (mMoreButton == null ? 1 : 2)); |
} |
- mObserver.notifyItemInserted(this, globalRemovedIndex + 2); // Progress indicator. |
} |
public void removeSuggestionById(String idWithinCategory) { |
@@ -98,7 +118,6 @@ |
if (mMoreButton != null) { |
mMoreButton.setPosition(mSuggestions.size()); |
- mMoreButton.setDismissable(mSuggestions.isEmpty()); |
} |
mObserver.notifyGroupChanged(this, itemCountBefore, getItems().size()); |
} |
@@ -111,14 +130,15 @@ |
} |
private void setStatusInternal(@CategoryStatusEnum int status) { |
+ mStatus = StatusItem.create(status, mActionDelegate); |
+ |
if (!SnippetsBridge.isCategoryStatusAvailable(status)) mSuggestions.clear(); |
mProgressIndicator.setVisible(SnippetsBridge.isCategoryLoading(status)); |
} |
- @CategoryInt |
public int getCategory() { |
- return mCategoryInfo.getCategory(); |
+ return mCategory; |
} |
private void copyThumbnails(List<SnippetArticle> suggestions) { |