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

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

Issue 899403002: Upstream Enhanced Bookmark Model (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits 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 unified diff | Download patch
« no previous file with comments | « build/get_landmines.py ('k') | chrome/android/java/src/org/chromium/chrome/browser/OWNERS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser;
6
7 import android.graphics.Bitmap;
8 import android.util.LruCache;
9 import android.util.Pair;
10
11 import org.chromium.base.CalledByNative;
12 import org.chromium.base.JNINamespace;
13 import org.chromium.base.ObserverList;
14 import org.chromium.chrome.browser.profiles.Profile;
15 import org.chromium.components.bookmarks.BookmarkId;
16 import org.chromium.content_public.browser.WebContents;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21 import java.util.Map;
22
23 /**
24 * Access gate to C++ side enhanced bookmarks functionalities.
25 */
26 @JNINamespace("enhanced_bookmarks::android")
27 public final class EnhancedBookmarksBridge {
28 private long mNativeEnhancedBookmarksBridge;
29 private final ObserverList<FiltersObserver> mFilterObservers =
30 new ObserverList<FiltersObserver>();
31 private final ObserverList<SearchServiceObserver> mSearchObservers =
32 new ObserverList<SearchServiceObserver>();
33
34 private LruCache<String, Pair<String, Bitmap>> mSalientImageCache;
35
36 /**
37 * Interface for getting result back from SalientImageForUrl function.
38 */
39 public interface SalientImageCallback {
40 /**
41 * Callback method for fetching salient image.
42 * @param image Salient image. This can be null if the image cannot be f ound.
43 * @param imageUrl Url of the image. Note this is not the same as the ur l of the website
44 * containing the image.
45 */
46 @CalledByNative("SalientImageCallback")
47 void onSalientImageReady(Bitmap image, String imageUrl);
48 }
49
50 /**
51 * Interface to provide consumers notifications to changes in clusters
52 */
53 public interface FiltersObserver {
54 /**
55 * Invoked when client detects that filters have been added/removed from the server.
56 */
57 void onFiltersChanged();
58 }
59
60 /**
61 * Interface to provide consumers notifications to changes in search service results.
62 */
63 public interface SearchServiceObserver {
64 /**
65 * Invoked when client detects that search results have been updated. Th is callback is
66 * guaranteed to be called only once and only for the most recent query.
67 */
68 void onSearchResultsReturned();
69 }
70
71 public EnhancedBookmarksBridge(Profile profile, int maxCacheSize) {
72 this(profile);
73 // Do not initialize LruCache if cache size is set to 0.
74 if (maxCacheSize != 0) {
75 mSalientImageCache = new LruCache<String, Pair<String, Bitmap>>(maxC acheSize) {
76 @Override
77 protected int sizeOf(String key, Pair<String, Bitmap> urlImage) {
78 return urlImage.first.length() + urlImage.second.getByteCoun t();
79 }
80 };
81 }
82 }
83
84 public EnhancedBookmarksBridge(Profile profile) {
85 mNativeEnhancedBookmarksBridge = nativeInit(profile);
86 }
87
88 public void destroy() {
89 assert mNativeEnhancedBookmarksBridge != 0;
90 nativeDestroy(mNativeEnhancedBookmarksBridge);
91 mNativeEnhancedBookmarksBridge = 0;
92
93 if (mSalientImageCache != null) {
94 for (Map.Entry<String, Pair<String, Bitmap>> entry :
95 mSalientImageCache.snapshot().entrySet()) {
96 entry.getValue().second.recycle();
97 }
98 mSalientImageCache.evictAll();
99 }
100 }
101
102 /**
103 * Adds a folder to the EnhancedBookmarkModel
104 * @param parent The parent of this folder
105 * @param index The position this folder should appear within the parent
106 * @param title The title of the bookmark
107 * @return The ID of the newly created folder.
108 */
109 public BookmarkId addFolder(BookmarkId parent, int index, String title) {
110 return nativeAddFolder(mNativeEnhancedBookmarksBridge, parent, index, ti tle);
111 }
112
113 /**
114 * Adds a Bookmark to the EnhancedBookmarkModel
115 * @param parent The parent of this bookmark
116 * @param index The position this bookmark should appear within the parent
117 * @param title The title of the bookmark
118 * @param url URL of the bookmark
119 * @return The ID of the newly created bookmark
120 */
121 public BookmarkId addBookmark(BookmarkId parent, int index, String title, St ring url) {
122 return nativeAddBookmark(mNativeEnhancedBookmarksBridge, parent, index, title, url);
123 }
124
125 /**
126 * Moves a bookmark to another folder, and append it at the end of the list of all children.
127 * @param bookmarkId The item to be be moved
128 * @param newParentId The new parent of the item
129 */
130 public void moveBookmark(BookmarkId bookmarkId, BookmarkId newParentId) {
131 nativeMoveBookmark(mNativeEnhancedBookmarksBridge, bookmarkId, newParent Id);
132 }
133
134 /**
135 * Get descriptions of a given bookmark.
136 * @param id The id of the bookmark to look at.
137 * @return Description of the bookmark. If given a partner bookmark, this me thod will return an
138 * empty list.
139 */
140 public String getBookmarkDescription(BookmarkId id) {
141 return nativeGetBookmarkDescription(mNativeEnhancedBookmarksBridge, id.g etId(),
142 id.getType());
143 }
144
145 /**
146 * Sets the description of the given bookmark.
147 */
148 public void setBookmarkDescription(BookmarkId id, String description) {
149 nativeSetBookmarkDescription(mNativeEnhancedBookmarksBridge, id.getId(), id.getType(),
150 description);
151 }
152
153 /**
154 * Registers a FiltersObserver to listen for filter change notifications.
155 * @param observer Observer to add
156 */
157 public void addFiltersObserver(FiltersObserver observer) {
158 mFilterObservers.addObserver(observer);
159 }
160
161 /**
162 * Unregisters a FiltersObserver from listening to filter change notificatio ns.
163 * @param observer Observer to remove
164 */
165 public void removeFiltersObserver(FiltersObserver observer) {
166 mFilterObservers.removeObserver(observer);
167 }
168
169 /**
170 * Gets all the bookmark ids associated with a filter string.
171 * @param filter The filter string
172 * @return List of bookmark ids
173 */
174 public List<BookmarkId> getBookmarksForFilter(String filter) {
175 List<BookmarkId> list = new ArrayList<BookmarkId>();
176 nativeGetBookmarksForFilter(mNativeEnhancedBookmarksBridge, filter, list );
177 return list;
178 }
179
180 /**
181 * Sends request to search server for querying related bookmarks.
182 * @param query Keyword used to find related bookmarks.
183 */
184 public void sendSearchRequest(String query) {
185 nativeSendSearchRequest(mNativeEnhancedBookmarksBridge, query);
186 }
187
188 /**
189 * Get list of bookmarks as result of a search request that was sent before in
190 * {@link EnhancedBookmarksBridge#sendSearchRequest(String)}. Normally this function should be
191 * called after {@link SearchServiceObserver#onSearchResultsReturned()}
192 * @param query Keyword used to find related bookmarks.
193 * @return List of BookmarkIds that are related to query. It will be null if the request is
194 * still on the fly, or empty list if there are no results for the q uery.
195 */
196 public List<BookmarkId> getSearchResultsForQuery(String query) {
197 return nativeGetSearchResults(mNativeEnhancedBookmarksBridge, query);
198 }
199
200 /**
201 * Registers a SearchObserver that listens to search request updates.
202 * @param observer Observer to add
203 */
204 public void addSearchObserver(SearchServiceObserver observer) {
205 mSearchObservers.addObserver(observer);
206 }
207
208 /**
209 * Unregisters a SearchObserver that listens to search request updates.
210 * @param observer Observer to remove
211 */
212 public void removeSearchObserver(SearchServiceObserver observer) {
213 mSearchObservers.removeObserver(observer);
214 }
215
216 /**
217 * Request bookmark salient image for the given URL. Please refer to
218 * |BookmarkImageService::SalientImageForUrl|.
219 * @return True if this method is executed synchronously. False if
220 * {@link SalientImageCallback#onSalientImageReady(Bitmap, String)} is called later
221 * (asynchronously).
222 */
223 public boolean salientImageForUrl(final String url, final SalientImageCallba ck callback) {
224 assert callback != null;
225 SalientImageCallback callbackWrapper = callback;
226
227 if (mSalientImageCache != null) {
228 Pair<String, Bitmap> cached = mSalientImageCache.get(url);
229 if (cached != null) {
230 callback.onSalientImageReady(cached.second, cached.first);
231 return true;
232 }
233
234 callbackWrapper = new SalientImageCallback() {
235 @Override
236 public void onSalientImageReady(Bitmap image, String imageUrl) {
237 if (image != null) {
238 mSalientImageCache.put(url, new Pair<String, Bitmap>(ima geUrl, image));
239 }
240 callback.onSalientImageReady(image, imageUrl);
241 }
242 };
243 }
244
245 nativeSalientImageForUrl(mNativeEnhancedBookmarksBridge, url, callbackWr apper);
246 return false;
247 }
248
249 /**
250 * Parses the web content of a tab, and stores salient images to local datab ase.
251 * @param webContents Contents of the tab that the user is currently in.
252 */
253 public void fetchImageForTab(WebContents webContents) {
254 nativeFetchImageForTab(mNativeEnhancedBookmarksBridge, webContents);
255 }
256
257 /**
258 * Get all filters associated with the given bookmark.
259 *
260 * @param bookmark The bookmark to find filters for.
261 * @return Array of Strings, each representing a filter. If given a partner bookmark, this
262 * method will return an empty array.
263 */
264 public String[] getFiltersForBookmark(BookmarkId bookmark) {
265 return nativeGetFiltersForBookmark(mNativeEnhancedBookmarksBridge, bookm ark.getId(),
266 bookmark.getType());
267 }
268
269 /**
270 * @return Current set of known auto-filters for bookmarks.
271 */
272 public List<String> getFilters() {
273 List<String> list =
274 Arrays.asList(nativeGetFilters(mNativeEnhancedBookmarksBridge));
275 return list;
276 }
277
278 @CalledByNative
279 private void onFiltersChanged() {
280 for (FiltersObserver observer : mFilterObservers) {
281 observer.onFiltersChanged();
282 }
283 }
284
285 @CalledByNative
286 private void onSearchResultReturned() {
287 for (SearchServiceObserver observer : mSearchObservers) {
288 observer.onSearchResultsReturned();
289 }
290 }
291
292 @CalledByNative
293 private static List<BookmarkId> createBookmarkIdList() {
294 return new ArrayList<BookmarkId>();
295 }
296
297 @CalledByNative
298 private static void addToBookmarkIdList(List<BookmarkId> bookmarkIdList, lon g id, int type) {
299 bookmarkIdList.add(new BookmarkId(id, type));
300 }
301
302 private native long nativeInit(Profile profile);
303 private native void nativeDestroy(long nativeEnhancedBookmarksBridge);
304 private native String nativeGetBookmarkDescription(long nativeEnhancedBookma rksBridge, long id,
305 int type);
306 private native void nativeSetBookmarkDescription(long nativeEnhancedBookmark sBridge, long id,
307 int type, String description);
308 private native void nativeGetBookmarksForFilter(long nativeEnhancedBookmarks Bridge,
309 String filter, List<BookmarkId> list);
310 private native List<BookmarkId> nativeGetSearchResults(long nativeEnhancedBo okmarksBridge,
311 String query);
312 private native String[] nativeGetFilters(long nativeEnhancedBookmarksBridge) ;
313 private native String[] nativeGetFiltersForBookmark(long nativeEnhancedBookm arksBridge, long id,
314 int type);
315 private native BookmarkId nativeAddFolder(long nativeEnhancedBookmarksBridge , BookmarkId parent,
316 int index, String title);
317 private native void nativeMoveBookmark(long nativeEnhancedBookmarksBridge,
318 BookmarkId bookmarkId, BookmarkId newParentId);
319 private native BookmarkId nativeAddBookmark(long nativeEnhancedBookmarksBrid ge,
320 BookmarkId parent, int index, String title, String url);
321 private native void nativeSendSearchRequest(long nativeEnhancedBookmarksBrid ge, String query);
322 private native void nativeSalientImageForUrl(long nativeEnhancedBookmarksBri dge,
323 String url, SalientImageCallback callback);
324 private native void nativeFetchImageForTab(long nativeEnhancedBookmarksBridg e,
325 WebContents webContents);
326 }
OLDNEW
« no previous file with comments | « build/get_landmines.py ('k') | chrome/android/java/src/org/chromium/chrome/browser/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698