Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4908)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java

Issue 1812293002: Add new NTP layout with snippet cards and hide it behind a flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698