| 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 b1d4b7147d97d61eddb932c477082d809041bc78..de7aeeefe90c611aa3b2fd9dc82756b9b79616d2 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
|
| @@ -17,6 +17,8 @@
|
| 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 org.chromium.chrome.browser.tab.EmptyTabObserver;
|
| +import org.chromium.chrome.browser.tab.Tab;
|
|
|
| import java.util.ArrayList;
|
| import java.util.List;
|
| @@ -79,6 +81,14 @@ public NewTabPageAdapter(NewTabPageManager manager, NewTabPageLayout newTabPageL
|
| mNewTabPageListItems.add(mAboveTheFoldListItem);
|
|
|
| mNewTabPageManager.setSnippetsObserver(this);
|
| +
|
| + // Fetch new snippets when switching back to the NTP, from another tab or another app.
|
| + mNewTabPageManager.addTabObserver(new EmptyTabObserver() {
|
| + @Override
|
| + public void onShown(Tab tab) {
|
| + mNewTabPageManager.setSnippetsObserver(NewTabPageAdapter.this);
|
| + }
|
| + });
|
| }
|
|
|
| /** Returns callbacks to configure the interactions with the RecyclerView's items. */
|
| @@ -90,15 +100,29 @@ public NewTabPageAdapter(NewTabPageManager manager, NewTabPageLayout newTabPageL
|
| 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);
|
| + // At first, there might be no snippets available, we wait until they have been fetched.
|
| + if (newSnippetCount == 0) return;
|
| +
|
| + // Copy thumbnails over
|
| + for (SnippetArticle newSnippet : listSnippets) {
|
| + int existingSnippetIdx = mNewTabPageListItems.indexOf(newSnippet);
|
| + if (existingSnippetIdx == -1) continue;
|
| +
|
| + newSnippet.setThumbnailBitmap(
|
| + ((SnippetArticle) mNewTabPageListItems.get(existingSnippetIdx))
|
| + .getThumbnailBitmap());
|
| }
|
|
|
| + mNewTabPageListItems.clear();
|
| + mNewTabPageListItems.add(mAboveTheFoldListItem);
|
| + mNewTabPageListItems.add(new SnippetHeaderListItem());
|
| + mNewTabPageListItems.addAll(listSnippets);
|
| +
|
| notifyDataSetChanged();
|
| +
|
| + // We don't want to get notified of other changes.
|
| + mNewTabPageManager.setSnippetsObserver(null);
|
| }
|
|
|
| @Override
|
| @@ -150,4 +174,8 @@ private void dismissItem(int position) {
|
|
|
| notifyItemRangeRemoved(position, numRemovedItems);
|
| }
|
| +
|
| + List<NewTabPageListItem> getItemsForTesting() {
|
| + return mNewTabPageListItems;
|
| + }
|
| }
|
|
|