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); |
} |