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

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

Issue 1677073002: Fetch snippets from ChromeReader and show them on the NTP (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 4 years, 10 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 eb90180839873da60625549873706b33ae9d38c4..7faf17a08a657ffa80ac0a569163222b62c7bc4c 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,21 +6,19 @@ package org.chromium.chrome.browser.ntp.snippets;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
-import android.os.Environment;
import android.support.v7.widget.RecyclerView;
-import android.util.JsonReader;
import android.widget.ImageView;
import org.chromium.base.Log;
import org.chromium.base.StreamUtil;
-import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
+import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge.SnippetsObserver;
+import org.chromium.chrome.browser.profiles.Profile;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@@ -51,6 +49,7 @@ public class SnippetsManager {
private NewTabPageManager mNewTabPageManager;
private SnippetsAdapter mDataAdapter;
+ private SnippetsBridge mSnippetsBridge;
/** Base type for anything to add to the snippets view
*/
@@ -86,15 +85,15 @@ public class SnippetsManager {
public static class SnippetArticle implements SnippetListItem {
public final String mTitle;
public final String mPublisher;
- public final String mSnippet;
+ public final String mPreviewText;
public final String mUrl;
public final String mThumbnailPath;
public final int mPosition;
private ThumbnailRenderingTask mThumbnailRenderingTask;
- // Async task to create the thumbnail from a local file
- // TODO(maybelle): This task to retrieve the thumbnail from local disk is temporary while
+ // Async task to create the thumbnail from a URL
+ // TODO(maybelle): This task to retrieve the thumbnail from the web is temporary while
// we are prototyping this feature for clank. For the real production feature, we
// will likely have to download/decode the thumbnail on the native side.
private static class ThumbnailRenderingTask extends AsyncTask<String, Void, Drawable> {
@@ -106,8 +105,18 @@ public class SnippetsManager {
@Override
protected Drawable doInBackground(String... params) {
- String thumbnailPath = params[0];
- return Drawable.createFromPath(thumbnailPath);
+ InputStream is = null;
+ try {
+ is = (InputStream) new URL(params[0]).getContent();
+ return Drawable.createFromStream(is, "thumbnail");
+ } catch (MalformedURLException e) {
+ Log.e(TAG, "Could not get image thumbnail due to malformed URL", e);
+ } catch (IOException e) {
+ Log.e(TAG, "Could not get image thumbnail", e);
+ } finally {
+ StreamUtil.closeQuietly(is);
+ }
+ return null;
}
@Override
@@ -116,11 +125,11 @@ public class SnippetsManager {
}
}
- public SnippetArticle(String title, String publisher, String snippet, String url,
+ public SnippetArticle(String title, String publisher, String previewText, String url,
String thumbnailPath, int position) {
mTitle = title;
mPublisher = publisher;
- mSnippet = snippet;
+ mPreviewText = previewText;
mUrl = url;
mThumbnailPath = thumbnailPath;
mPosition = position;
@@ -146,117 +155,33 @@ public class SnippetsManager {
}
}
- private class ReadFileTask extends AsyncTask<Void, Void, List<SnippetListItem>> {
- private int mNumArticles;
-
- @Override
- protected List<SnippetListItem> doInBackground(Void... params) {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(
- new File(Environment.getExternalStorageDirectory().getPath()
- + "/chrome/reading_list.json"));
- List<SnippetListItem> listSnippetsGroups = readJsonStream(fis);
- return listSnippetsGroups;
- } catch (IOException ex) {
- Log.e(TAG, "Exception reading file: %s ", ex);
- } finally {
- StreamUtil.closeQuietly(fis);
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(List<SnippetListItem> listSnippetsGroups) {
- if (listSnippetsGroups == null) return;
-
- mDataAdapter.setSnippetListItems(listSnippetsGroups);
- }
-
- private List<SnippetListItem> readJsonStream(InputStream in) throws IOException {
- JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
- try {
- return readRecommendationsArray(reader);
- } finally {
- reader.close();
- }
- }
-
- private List<SnippetListItem> readRecommendationsArray(JsonReader reader)
- throws IOException {
- List<SnippetListItem> listSnippetItems = new ArrayList<SnippetListItem>();
- mNumArticles = 0;
- reader.beginArray();
- while (reader.hasNext()) {
- readSnippetGroup(listSnippetItems, reader);
- }
- reader.endArray();
- RecordHistogram.recordSparseSlowlyHistogram(
- "NewTabPage.Snippets.NumArticles", mNumArticles);
- return listSnippetItems;
- }
-
- private void readSnippetGroup(List<SnippetListItem> listSnippetItems, JsonReader reader)
- throws IOException {
- reader.beginObject();
- while (reader.hasNext()) {
- String name = reader.nextName();
- if (name.equals("recommendation_basis")) {
- listSnippetItems.add(new SnippetHeader(reader.nextString()));
- } else if (name.equals("articles")) {
- readArticlesArray(listSnippetItems, reader);
- }
- }
- reader.endObject();
- }
-
- private void readArticlesArray(List<SnippetListItem> listSnippetItems, JsonReader reader)
- throws IOException {
- reader.beginArray();
- while (reader.hasNext()) {
- listSnippetItems.add(readArticleDetails(reader));
- }
- reader.endArray();
- }
-
- private SnippetArticle readArticleDetails(JsonReader reader) throws IOException {
- String headline = "";
- String publisher = "";
- String snippets = "";
- String url = "";
- String thumbnail = "";
-
- reader.beginObject();
- while (reader.hasNext()) {
- String name = reader.nextName();
- if (name.equals("headline")) {
- headline = reader.nextString();
- } else if (name.equals("publisher")) {
- publisher = reader.nextString();
- } else if (name.equals("snippet")) {
- snippets = reader.nextString();
- } else if (name.equals("url")) {
- url = reader.nextString();
- } else if (name.equals("thumbnail")) {
- thumbnail = reader.nextString();
- } else {
- reader.skipValue();
+ 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>();
+ for (int i = 0; i < titles.length; ++i) {
+ SnippetArticle article = new SnippetArticle(
+ titles[i], "", previewText[i], urls[i], thumbnailUrls[i], i);
+ listItems.add(article);
}
+ mDataAdapter.setSnippetListItems(listItems);
}
- reader.endObject();
- return new SnippetsManager.SnippetArticle(
- headline, publisher, snippets, url, thumbnail, mNumArticles++);
- }
+ });
}
- public SnippetsManager(NewTabPageManager tabManager, RecyclerView mSnippetsView) {
- mNewTabPageManager = tabManager;
- mDataAdapter = new SnippetsAdapter(this);
+ public void setSnippetsView(RecyclerView mSnippetsView) {
mSnippetsView.setAdapter(mDataAdapter);
- new ReadFileTask().execute();
}
public void loadUrl(String url) {
mNewTabPageManager.open(url);
}
+
+ public void destroy() {
+ mSnippetsBridge.destroy();
+ }
}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsController.java ('k') | chrome/browser/android/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698