| 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
|
| index 9cdb5e68efefda2b8a56a70af0724bceb3c2a3f4..cd1486194e05fe3792de486cfd64da133ca71c68 100644
|
| --- 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
|
| @@ -32,9 +32,9 @@
|
|
|
| import java.util.ArrayList;
|
| import java.util.Collections;
|
| +import java.util.LinkedHashMap;
|
| import java.util.List;
|
| import java.util.Map;
|
| -import java.util.TreeMap;
|
|
|
| /**
|
| * A class that handles merging above the fold elements and below the fold cards into an adapter
|
| @@ -62,7 +62,7 @@
|
| private final SpacingItem mBottomSpacer = new SpacingItem();
|
|
|
| /** Maps suggestion categories to sections, with stable iteration ordering. */
|
| - private final Map<Integer, SuggestionsSection> mSections = new TreeMap<>();
|
| + private final Map<Integer, SuggestionsSection> mSections = new LinkedHashMap<>();
|
|
|
| private class ItemTouchCallbacks extends ItemTouchHelper.Callback {
|
| @Override
|
| @@ -145,6 +145,13 @@ public NewTabPageAdapter(NewTabPageManager manager, View aboveTheFoldView,
|
| List<SnippetArticle> suggestions =
|
| suggestionsSource.getSuggestionsForCategory(category);
|
| suggestionsPerCategory[i++] = suggestions.size();
|
| +
|
| + // Create the new section.
|
| + SuggestionsCategoryInfo info = mSuggestionsSource.getCategoryInfo(category);
|
| + if (suggestions.isEmpty() && !info.showIfEmpty()) continue;
|
| + mSections.put(category, new SuggestionsSection(category, info, this));
|
| +
|
| + // Add the new suggestions.
|
| setSuggestions(category, suggestions, categoryStatus);
|
| }
|
| // |mNewTabPageManager| is null in some tests.
|
| @@ -162,8 +169,11 @@ public NewTabPageAdapter(NewTabPageManager manager, View aboveTheFoldView,
|
|
|
| @Override
|
| public void onNewSuggestions(@CategoryInt int category) {
|
| + // We never want to add suggestions from unknown categories.
|
| + if (!mSections.containsKey(category)) return;
|
| +
|
| // We never want to refresh the suggestions if we already have some content.
|
| - if (mSections.containsKey(category) && mSections.get(category).hasSuggestions()) return;
|
| + if (mSections.get(category).hasSuggestions()) return;
|
|
|
| // The status may have changed while the suggestions were loading, perhaps they should not
|
| // be displayed any more.
|
| @@ -316,13 +326,6 @@ private void setSuggestions(@CategoryInt int category, List<SnippetArticle> sugg
|
| for (SnippetArticle suggestion : suggestions) {
|
| suggestion.mGlobalPosition = globalPositionOffset + suggestion.mPosition;
|
| }
|
| - // Add the new suggestions.
|
| - if (!mSections.containsKey(category)) {
|
| - SuggestionsCategoryInfo info = mSuggestionsSource.getCategoryInfo(category);
|
| - if (suggestions.isEmpty() && !info.showIfEmpty()) return;
|
| -
|
| - mSections.put(category, new SuggestionsSection(category, info, this));
|
| - }
|
|
|
| mSections.get(category).setSuggestions(suggestions, status);
|
| }
|
| @@ -408,6 +411,11 @@ ItemGroup getGroup(int itemPosition) {
|
| return null;
|
| }
|
|
|
| + @VisibleForTesting
|
| + List<ItemGroup> getGroups() {
|
| + return Collections.unmodifiableList(mGroups);
|
| + }
|
| +
|
| private int getGroupPositionOffset(ItemGroup group) {
|
| int positionOffset = 0;
|
| for (ItemGroup candidateGroup : mGroups) {
|
|
|