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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/EnhancedBookmarksBridge.java

Issue 899653003: [Enhanced Bookmark]Upstream image fetching code in android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 5 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
« no previous file with comments | « no previous file | chrome/browser/android/chrome_jni_registrar.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/EnhancedBookmarksBridge.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/EnhancedBookmarksBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/EnhancedBookmarksBridge.java
index c04e75394caae91fe0eb60e86a97c2eedb550167..3ff5ecc0ca3f2ab4ef9cada36b302c29e572cba3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/EnhancedBookmarksBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/EnhancedBookmarksBridge.java
@@ -4,6 +4,10 @@
package org.chromium.chrome.browser;
+import android.graphics.Bitmap;
+import android.util.LruCache;
+import android.util.Pair;
+
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.base.ObserverList;
@@ -13,6 +17,7 @@ import org.chromium.components.bookmarks.BookmarkId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
/**
* Access gate to C++ side enhanced bookmarks functionalities.
@@ -25,6 +30,22 @@ public final class EnhancedBookmarksBridge {
private final ObserverList<SearchServiceObserver> mSearchObservers =
new ObserverList<SearchServiceObserver>();
+ private LruCache<String, Pair<String, Bitmap>> mSalientImageCache;
+
+ /**
+ * Interface for getting result back from SalientImageForUrl function.
+ */
+ public interface SalientImageCallback {
+ /**
+ * Callback method for fetching salient image.
+ * @param image Salient image. This can be null if the image cannot be found.
+ * @param imageUrl Url of the image. Note this is not the same as the url of the website
+ * containing the image.
+ */
+ @CalledByNative("SalientImageCallback")
+ void onSalientImageReady(Bitmap image, String imageUrl);
+ }
+
/**
* Interface to provide consumers notifications to changes in clusters
*/
@@ -46,6 +67,19 @@ public final class EnhancedBookmarksBridge {
void onSearchResultsReturned();
}
+ public EnhancedBookmarksBridge(Profile profile, int maxCacheSize) {
+ this(profile);
+ // Do not initialize LruCache if cache size is set to 0.
+ if (maxCacheSize != 0) {
+ mSalientImageCache = new LruCache<String, Pair<String, Bitmap>>(maxCacheSize) {
+ @Override
+ protected int sizeOf(String key, Pair<String, Bitmap> urlImage) {
+ return urlImage.first.length() + urlImage.second.getByteCount();
+ }
+ };
+ }
+ }
+
public EnhancedBookmarksBridge(Profile profile) {
mNativeEnhancedBookmarksBridge = nativeInit(profile);
}
@@ -54,6 +88,14 @@ public final class EnhancedBookmarksBridge {
assert mNativeEnhancedBookmarksBridge != 0;
nativeDestroy(mNativeEnhancedBookmarksBridge);
mNativeEnhancedBookmarksBridge = 0;
+
+ if (mSalientImageCache != null) {
+ for (Map.Entry<String, Pair<String, Bitmap>> entry :
+ mSalientImageCache.snapshot().entrySet()) {
+ entry.getValue().second.recycle();
+ }
+ mSalientImageCache.evictAll();
+ }
}
/**
@@ -171,6 +213,39 @@ public final class EnhancedBookmarksBridge {
}
/**
+ * Request bookmark salient image for the given URL. Please refer to
+ * |BookmarkImageService::SalientImageForUrl|.
+ * @return True if this method is executed synchronously. False if
+ * {@link SalientImageCallback#onSalientImageReady(Bitmap, String)} is called later
+ * (asynchronously).
+ */
+ public boolean salientImageForUrl(final String url, final SalientImageCallback callback) {
+ assert callback != null;
+ SalientImageCallback callbackWrapper = callback;
+
+ if (mSalientImageCache != null) {
+ Pair<String, Bitmap> cached = mSalientImageCache.get(url);
+ if (cached != null) {
+ callback.onSalientImageReady(cached.second, cached.first);
+ return true;
+ }
+
+ callbackWrapper = new SalientImageCallback() {
+ @Override
+ public void onSalientImageReady(Bitmap image, String imageUrl) {
+ if (image != null) {
+ mSalientImageCache.put(url, new Pair<String, Bitmap>(imageUrl, image));
+ }
+ callback.onSalientImageReady(image, imageUrl);
+ }
+ };
+ }
+
+ nativeSalientImageForUrl(mNativeEnhancedBookmarksBridge, url, callbackWrapper);
+ return false;
+ }
+
+ /**
* Get all filters associated with the given bookmark.
*
* @param bookmark The bookmark to find filters for.
@@ -235,4 +310,6 @@ public final class EnhancedBookmarksBridge {
private native BookmarkId nativeAddBookmark(long nativeEnhancedBookmarksBridge,
BookmarkId parent, int index, String title, String url);
private native void nativeSendSearchRequest(long nativeEnhancedBookmarksBridge, String query);
+ private static native void nativeSalientImageForUrl(long nativeEnhancedBookmarksBridge,
+ String url, SalientImageCallback callback);
}
« no previous file with comments | « no previous file | chrome/browser/android/chrome_jni_registrar.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698