| Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| index 7b25f6814d025d243768e504350e9c4fd5727157..913e9c296123fbe5adb79fa84e4437b147e65a65 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| @@ -43,6 +43,7 @@
|
|
|
| import java.net.URI;
|
| import java.net.URISyntaxException;
|
| +import java.util.List;
|
| import java.util.concurrent.TimeUnit;
|
|
|
| /**
|
| @@ -56,6 +57,8 @@
|
| private static final String FAVICON_SERVICE_FORMAT =
|
| "https://s2.googleusercontent.com/s2/favicons?domain=%s&src=chrome_newtab_mobile&sz=%d&alt=404";
|
|
|
| + public static final int PARTIAL_UPDATE_OFFLINE_ID = 1;
|
| +
|
| private final NewTabPageManager mNewTabPageManager;
|
| private final TextView mHeadlineTextView;
|
| private final TextView mPublisherTextView;
|
| @@ -220,11 +223,14 @@ private static String getAttributionString(SnippetArticle article) {
|
| BidiFormatter.getInstance().unicodeWrap(article.mPublisher), relativeTimeSpan);
|
| }
|
|
|
| - public void onBindViewHolder(SnippetArticle article, SuggestionsCategoryInfo categoryInfo) {
|
| - super.onBindViewHolder();
|
| + public void onBindViewHolder(
|
| + SnippetArticle article, SuggestionsCategoryInfo categoryInfo, List<Object> payloads) {
|
| + if (!payloads.isEmpty() && article.equals(mArticle)) {
|
| + performPartialBind(payloads);
|
| + return;
|
| + }
|
|
|
| - // No longer listen for offline status changes to the old article.
|
| - if (mArticle != null) mArticle.setOfflineStatusChangeRunnable(null);
|
| + super.onBindViewHolder();
|
|
|
| mArticle = article;
|
| mCategoryInfo = categoryInfo;
|
| @@ -265,22 +271,24 @@ public void onBindViewHolder(SnippetArticle article, SuggestionsCategoryInfo cat
|
| }
|
|
|
| mOfflineBadge.setVisibility(View.GONE);
|
| - if (SnippetsConfig.isOfflineBadgeEnabled()) {
|
| - Runnable offlineChecker = new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - if (mArticle.getOfflinePageOfflineId() != null || mArticle.mIsAssetDownload) {
|
| - mOfflineBadge.setVisibility(View.VISIBLE);
|
| - }
|
| - }
|
| - };
|
| - mArticle.setOfflineStatusChangeRunnable(offlineChecker);
|
| - offlineChecker.run();
|
| - }
|
| + refreshOfflineBadgeVisibility();
|
|
|
| mRecyclerView.onSnippetBound(itemView);
|
| }
|
|
|
| + private void refreshOfflineBadgeVisibility() {
|
| + if (!SnippetsConfig.isOfflineBadgeEnabled()) return;
|
| + boolean visible = mArticle.getOfflinePageOfflineId() != null || mArticle.mIsAssetDownload;
|
| + if (visible == (mOfflineBadge.getVisibility() == View.VISIBLE)) return;
|
| + mOfflineBadge.setVisibility(visible ? View.VISIBLE : View.GONE);
|
| + }
|
| +
|
| + private void performPartialBind(List<Object> payload) {
|
| + if (payload.contains(PARTIAL_UPDATE_OFFLINE_ID)) {
|
| + refreshOfflineBadgeVisibility();
|
| + }
|
| + }
|
| +
|
| private static class FetchImageCallback extends Callback<Bitmap> {
|
| private SnippetArticleViewHolder mViewHolder;
|
| private final SnippetArticle mSnippet;
|
|
|