Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java |
index 16d74ade3a6fa20d24fc1f42f006bc3241f95486..99ad652b5b2e7dd8771ff74aac1e4e73c48368bb 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java |
@@ -6,11 +6,13 @@ package org.chromium.chrome.browser.ntp.snippets; |
import android.graphics.drawable.Drawable; |
import android.os.AsyncTask; |
-import android.support.v7.widget.RecyclerView; |
+import android.view.View; |
import android.widget.ImageView; |
import org.chromium.base.Log; |
import org.chromium.base.StreamUtil; |
+import org.chromium.chrome.browser.ntp.NewTabPageCardsManager; |
+import org.chromium.chrome.browser.ntp.NewTabPageCardsManager.NewTabPageListItem; |
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; |
import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge.SnippetsObserver; |
import org.chromium.chrome.browser.profiles.Profile; |
@@ -21,22 +23,14 @@ import java.net.MalformedURLException; |
import java.net.URL; |
import java.util.ArrayList; |
import java.util.List; |
+import java.util.Observable; |
+import java.util.Observer; |
/** |
* A class that stores and manages the article snippets that will be shown on the NTP. |
*/ |
-public class SnippetsManager { |
+public class SnippetsManager extends Observable { |
newt (away)
2016/03/23 05:29:39
Observable/Observer aren't commonly used in our co
May
2016/03/23 19:22:57
Changed to a custom implementation.
|
private static final String TAG = "SnippetsManager"; |
- |
- /** |
- * Describes the header of a group of similar card snippets |
- */ |
- public static final int SNIPPET_ITEM_TYPE_HEADER = 1; |
- /** |
- * Describes a single card snippet |
- */ |
- public static final int SNIPPET_ITEM_TYPE_SNIPPET = 2; |
- |
/** |
* Enum values for recording {@code SNIPPETS_STATE_HISTOGRAM} histogram. |
* Stored here as it is recorded in multiple places. |
@@ -48,46 +42,30 @@ public class SnippetsManager { |
public static final String SNIPPETS_STATE_HISTOGRAM = "NewTabPage.Snippets.Interactions"; |
private NewTabPageManager mNewTabPageManager; |
- private SnippetsAdapter mDataAdapter; |
+ private List<NewTabPageListItem> mListSnippetItems = new ArrayList<NewTabPageListItem>(); |
newt (away)
2016/03/23 05:29:39
nit: s/<NewTabPageListItem>/<>/
May
2016/03/23 19:22:58
Done.
|
private SnippetsBridge mSnippetsBridge; |
- /** Base type for anything to add to the snippets view |
- */ |
- public interface SnippetListItem { |
- /** |
- * Returns the type of this snippet item (SNIPPET_ITEM_TYPE_HEADER or |
- * SNIPPET_ITEM_TYPE_SNIPPET). This is so we can distinguish between different elements |
- * that are held in a single RecyclerView holder. |
- * |
- * @return the type of this list item. |
- */ |
- public int getType(); |
- } |
- |
/** Represents the data for a header of a group of snippets |
*/ |
- public static class SnippetHeader implements SnippetListItem { |
- public final String mRecommendationBasis; |
- |
- public SnippetHeader(String recommendationBasis) { |
- mRecommendationBasis = recommendationBasis; |
- } |
+ public static class SnippetHeader implements NewTabPageListItem { |
+ public SnippetHeader() {} |
@Override |
public int getType() { |
- return SNIPPET_ITEM_TYPE_HEADER; |
+ return NewTabPageCardsManager.SNIPPET_ITEM_TYPE_HEADER; |
} |
} |
/** |
* Represents the data for a card snippet. |
*/ |
- public static class SnippetArticle implements SnippetListItem { |
+ public static class SnippetArticle implements NewTabPageListItem { |
newt (away)
2016/03/23 05:29:39
SnippetArticle contains more code than SnippetsMan
May
2016/03/23 19:22:57
Moved SnippetArticle into its own file. We still n
|
public final String mTitle; |
public final String mPublisher; |
public final String mPreviewText; |
public final String mUrl; |
public final String mThumbnailPath; |
+ public final long mTimestamp; |
public final int mPosition; |
private ThumbnailRenderingTask mThumbnailRenderingTask; |
@@ -122,23 +100,29 @@ public class SnippetsManager { |
@Override |
protected void onPostExecute(Drawable thumbnail) { |
- mThumbnailView.setImageDrawable(thumbnail); |
+ if (thumbnail == null) { |
+ mThumbnailView.setVisibility(View.GONE); |
+ } else { |
+ mThumbnailView.setVisibility(View.VISIBLE); |
newt (away)
2016/03/23 05:29:39
We could fade in the images:
mThumbnailView.s
May
2016/03/23 19:22:58
Fancy! :-D Added.
|
+ mThumbnailView.setImageDrawable(thumbnail); |
+ } |
} |
} |
public SnippetArticle(String title, String publisher, String previewText, String url, |
- String thumbnailPath, int position) { |
+ String thumbnailPath, long timestamp, int position) { |
mTitle = title; |
mPublisher = publisher; |
mPreviewText = previewText; |
mUrl = url; |
mThumbnailPath = thumbnailPath; |
+ mTimestamp = timestamp; |
mPosition = position; |
} |
@Override |
public int getType() { |
- return SNIPPET_ITEM_TYPE_SNIPPET; |
+ return NewTabPageCardsManager.SNIPPET_ITEM_TYPE_SNIPPET; |
} |
/** |
@@ -158,24 +142,27 @@ public class SnippetsManager { |
public SnippetsManager(NewTabPageManager tabManager, Profile profile) { |
mNewTabPageManager = tabManager; |
- mDataAdapter = new SnippetsAdapter(this); |
mSnippetsBridge = new SnippetsBridge(profile, new SnippetsObserver() { |
@Override |
- public void onSnippetsAvailable( |
- String[] titles, String[] urls, String[] thumbnailUrls, String[] previewText) { |
- List<SnippetListItem> listItems = new ArrayList<SnippetListItem>(); |
+ public void onSnippetsAvailable(String[] titles, String[] urls, String[] thumbnailUrls, |
+ String[] previewText, long[] timestamps) { |
+ mListSnippetItems = new ArrayList<NewTabPageListItem>(); |
newt (away)
2016/03/23 05:29:39
Do you need to create a new ArrayList here? Seems
May
2016/03/23 19:22:58
Done.
|
+ if (titles.length > 0) { |
+ mListSnippetItems.add(new SnippetHeader()); |
+ } |
for (int i = 0; i < titles.length; ++i) { |
- SnippetArticle article = new SnippetArticle( |
- titles[i], "", previewText[i], urls[i], thumbnailUrls[i], i); |
- listItems.add(article); |
+ SnippetArticle article = new SnippetArticle(titles[i], "", previewText[i], |
+ urls[i], thumbnailUrls[i], timestamps[i], i); |
+ mListSnippetItems.add(article); |
} |
- mDataAdapter.setSnippetListItems(listItems); |
+ setChanged(); |
+ notifyObservers(mListSnippetItems); |
} |
}); |
} |
- public void setSnippetsView(RecyclerView mSnippetsView) { |
- mSnippetsView.setAdapter(mDataAdapter); |
+ public List<NewTabPageListItem> getSnippetItems() { |
+ return mListSnippetItems; |
} |
public void loadUrl(String url) { |
@@ -185,4 +172,10 @@ public class SnippetsManager { |
public void destroy() { |
mSnippetsBridge.destroy(); |
} |
+ |
+ @Override |
+ public void addObserver(Observer observer) { |
+ super.addObserver(observer); |
+ observer.update(this, mListSnippetItems); |
+ } |
} |