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

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

Issue 459973004: [Android] EnhancedBookmarksBridge for bookmark description read&write. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed patchset 3 comments Created 6 years, 4 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 | « no previous file | chrome/browser/DEPS » ('j') | components/bookmarks/common/android/OWNERS » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser; 5 package org.chromium.chrome.browser;
6 6
7 import android.text.TextUtils;
8 import android.util.Log;
9
10 import org.chromium.base.CalledByNative; 7 import org.chromium.base.CalledByNative;
11 import org.chromium.base.ObserverList; 8 import org.chromium.base.ObserverList;
12 import org.chromium.chrome.browser.profiles.Profile; 9 import org.chromium.chrome.browser.profiles.Profile;
10 import org.chromium.components.bookmarks.BookmarkId;
13 11
14 import java.util.ArrayList; 12 import java.util.ArrayList;
15 import java.util.List; 13 import java.util.List;
16 14
17 /** 15 /**
18 * Provides the communication channel for Android to fetch and manipulate the 16 * Provides the communication channel for Android to fetch and manipulate the
19 * bookmark model stored in native. 17 * bookmark model stored in native.
20 */ 18 */
21 public class BookmarksBridge { 19 public class BookmarksBridge {
22
23 // Should mirror constants in chrome/browser/android/bookmarks/bookmarks_bri dge.cc
24 public static final int BOOKMARK_TYPE_NORMAL = 0;
25 public static final int BOOKMARK_TYPE_PARTNER = 1;
26
27 public static final int INVALID_FOLDER_ID = -2;
28 public static final int ROOT_FOLDER_ID = -1;
29
30 private final Profile mProfile; 20 private final Profile mProfile;
31 private long mNativeBookmarksBridge; 21 private long mNativeBookmarksBridge;
32 private boolean mIsNativeBookmarkModelLoaded; 22 private boolean mIsNativeBookmarkModelLoaded;
33 private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks = 23 private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks =
34 new ArrayList<DelayedBookmarkCallback>(); 24 new ArrayList<DelayedBookmarkCallback>();
35 private final ObserverList<BookmarkModelObserver> mObservers = 25 private final ObserverList<BookmarkModelObserver> mObservers =
36 new ObserverList<BookmarkModelObserver>(); 26 new ObserverList<BookmarkModelObserver>();
37 27
38 /** 28 /**
39 * Interface for callback object for fetching bookmarks and folder hierarchy . 29 * Interface for callback object for fetching bookmarks and folder hierarchy .
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 * Reads sub-folder IDs, sub-bookmark IDs, or both of the given folder. 182 * Reads sub-folder IDs, sub-bookmark IDs, or both of the given folder.
193 * 183 *
194 * @param getFolders Whether sub-folders should be returned. 184 * @param getFolders Whether sub-folders should be returned.
195 * @param getBookmarks Whether sub-bookmarks should be returned. 185 * @param getBookmarks Whether sub-bookmarks should be returned.
196 * @return Child IDs of the given folder, with the specified type. 186 * @return Child IDs of the given folder, with the specified type.
197 */ 187 */
198 public List<BookmarkId> getChildIDs(BookmarkId id, boolean getFolders, boole an getBookmarks) { 188 public List<BookmarkId> getChildIDs(BookmarkId id, boolean getFolders, boole an getBookmarks) {
199 assert mIsNativeBookmarkModelLoaded; 189 assert mIsNativeBookmarkModelLoaded;
200 List<BookmarkId> result = new ArrayList<BookmarkId>(); 190 List<BookmarkId> result = new ArrayList<BookmarkId>();
201 nativeGetChildIDs(mNativeBookmarksBridge, 191 nativeGetChildIDs(mNativeBookmarksBridge,
202 id.mId, 192 id.getId(),
203 id.mType, 193 id.getType(),
204 getFolders, 194 getFolders,
205 getBookmarks, 195 getBookmarks,
206 result); 196 result);
207 return result; 197 return result;
208 } 198 }
209 199
210 /** 200 /**
211 * @return All bookmark IDs ordered by descending creation date. 201 * @return All bookmark IDs ordered by descending creation date.
212 */ 202 */
213 public List<BookmarkId> getAllBookmarkIDsOrderedByCreationDate() { 203 public List<BookmarkId> getAllBookmarkIDsOrderedByCreationDate() {
214 assert mIsNativeBookmarkModelLoaded; 204 assert mIsNativeBookmarkModelLoaded;
215 List<BookmarkId> result = new ArrayList<BookmarkId>(); 205 List<BookmarkId> result = new ArrayList<BookmarkId>();
216 nativeGetAllBookmarkIDsOrderedByCreationDate(mNativeBookmarksBridge, res ult); 206 nativeGetAllBookmarkIDsOrderedByCreationDate(mNativeBookmarksBridge, res ult);
217 return result; 207 return result;
218 } 208 }
219 209
220 /** 210 /**
221 * Set title of the given bookmark. 211 * Set title of the given bookmark.
222 */ 212 */
223 public void setBookmarkTitle(BookmarkId id, String title) { 213 public void setBookmarkTitle(BookmarkId id, String title) {
224 assert mIsNativeBookmarkModelLoaded; 214 assert mIsNativeBookmarkModelLoaded;
225 nativeSetBookmarkTitle(mNativeBookmarksBridge, id.mId, id.mType, title); 215 nativeSetBookmarkTitle(mNativeBookmarksBridge, id.getId(), id.getType(), title);
226 } 216 }
227 217
228 /** 218 /**
229 * Set URL of the given bookmark. 219 * Set URL of the given bookmark.
230 */ 220 */
231 public void setBookmarkUrl(BookmarkId id, String url) { 221 public void setBookmarkUrl(BookmarkId id, String url) {
232 assert mIsNativeBookmarkModelLoaded; 222 assert mIsNativeBookmarkModelLoaded;
233 nativeSetBookmarkUrl(mNativeBookmarksBridge, id.mId, id.mType, url); 223 nativeSetBookmarkUrl(mNativeBookmarksBridge, id.getId(), id.getType(), u rl);
234 } 224 }
235 225
236 /** 226 /**
237 * @return Whether the given bookmark exist in the current bookmark model, e .g., not deleted. 227 * @return Whether the given bookmark exist in the current bookmark model, e .g., not deleted.
238 */ 228 */
239 public boolean doesBookmarkExist(BookmarkId id) { 229 public boolean doesBookmarkExist(BookmarkId id) {
240 assert mIsNativeBookmarkModelLoaded; 230 assert mIsNativeBookmarkModelLoaded;
241 return nativeDoesBookmarkExist(mNativeBookmarksBridge, id.mId, id.mType) ; 231 return nativeDoesBookmarkExist(mNativeBookmarksBridge, id.getId(), id.ge tType());
242 } 232 }
243 233
244 /** 234 /**
245 * Fetches the bookmarks of the given folder. This is an always-synchronous version of another 235 * Fetches the bookmarks of the given folder. This is an always-synchronous version of another
246 * getBookmarksForForder function. 236 * getBookmarksForForder function.
247 * 237 *
248 * @param folderId The parent folder id. 238 * @param folderId The parent folder id.
249 * @return Bookmarks of the given folder. 239 * @return Bookmarks of the given folder.
250 */ 240 */
251 public List<BookmarkItem> getBookmarksForFolder(BookmarkId folderId) { 241 public List<BookmarkItem> getBookmarksForFolder(BookmarkId folderId) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 /** 290 /**
301 * Move the bookmark to the new index within same folder or to a different f older. 291 * Move the bookmark to the new index within same folder or to a different f older.
302 * @param bookmarkId The id of the bookmark that is being moved. 292 * @param bookmarkId The id of the bookmark that is being moved.
303 * @param newParentId The parent folder id. 293 * @param newParentId The parent folder id.
304 * @param index The new index for the bookmark. 294 * @param index The new index for the bookmark.
305 */ 295 */
306 public void moveBookmark(BookmarkId bookmarkId, BookmarkId newParentId, int index) { 296 public void moveBookmark(BookmarkId bookmarkId, BookmarkId newParentId, int index) {
307 nativeMoveBookmark(mNativeBookmarksBridge, bookmarkId, newParentId, inde x); 297 nativeMoveBookmark(mNativeBookmarksBridge, bookmarkId, newParentId, inde x);
308 } 298 }
309 299
300 /**
301 * A bridge function to BookmarkModelFactory::GetForProfile.
302 */
303 public static long getNativeBookmarkModel(Profile profile) {
304 return nativeGetNativeBookmarkModel(profile);
305 }
306
310 public static boolean isEditBookmarksEnabled() { 307 public static boolean isEditBookmarksEnabled() {
311 return nativeIsEditBookmarksEnabled(); 308 return nativeIsEditBookmarksEnabled();
312 } 309 }
313 310
314 @CalledByNative 311 @CalledByNative
315 private void bookmarkModelLoaded() { 312 private void bookmarkModelLoaded() {
316 mIsNativeBookmarkModelLoaded = true; 313 mIsNativeBookmarkModelLoaded = true;
317 314
318 for (BookmarkModelObserver observer : mObservers) { 315 for (BookmarkModelObserver observer : mObservers) {
319 observer.bookmarkModelLoaded(); 316 observer.bookmarkModelLoaded();
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 private native boolean nativeDoesBookmarkExist(long nativeBookmarksBridge, l ong id, int type); 424 private native boolean nativeDoesBookmarkExist(long nativeBookmarksBridge, l ong id, int type);
428 private native void nativeGetBookmarksForFolder(long nativeBookmarksBridge, 425 private native void nativeGetBookmarksForFolder(long nativeBookmarksBridge,
429 BookmarkId folderId, BookmarksCallback callback, 426 BookmarkId folderId, BookmarksCallback callback,
430 List<BookmarkItem> bookmarksList); 427 List<BookmarkItem> bookmarksList);
431 private native void nativeGetCurrentFolderHierarchy(long nativeBookmarksBrid ge, 428 private native void nativeGetCurrentFolderHierarchy(long nativeBookmarksBrid ge,
432 BookmarkId folderId, BookmarksCallback callback, 429 BookmarkId folderId, BookmarksCallback callback,
433 List<BookmarkItem> bookmarksList); 430 List<BookmarkItem> bookmarksList);
434 private native void nativeDeleteBookmark(long nativeBookmarksBridge, Bookmar kId bookmarkId); 431 private native void nativeDeleteBookmark(long nativeBookmarksBridge, Bookmar kId bookmarkId);
435 private native void nativeMoveBookmark(long nativeBookmarksBridge, BookmarkI d bookmarkId, 432 private native void nativeMoveBookmark(long nativeBookmarksBridge, BookmarkI d bookmarkId,
436 BookmarkId newParentId, int index); 433 BookmarkId newParentId, int index);
434 private static native long nativeGetNativeBookmarkModel(Profile profile);
437 private native long nativeInit(Profile profile); 435 private native long nativeInit(Profile profile);
438 private native void nativeDestroy(long nativeBookmarksBridge); 436 private native void nativeDestroy(long nativeBookmarksBridge);
439 private static native boolean nativeIsEditBookmarksEnabled(); 437 private static native boolean nativeIsEditBookmarksEnabled();
440 438
441 /** 439 /**
442 * Simple object representing the bookmark id.
443 */
444 public static class BookmarkId {
445 private static final String LOG_TAG = "BookmarkId";
446 private static final char TYPE_PARTNER = 'p';
447
448 private final long mId;
449 private final int mType;
450
451 public BookmarkId(long id, int type) {
452 mId = id;
453 mType = type;
454 }
455
456 /**
457 * @param c The char representing the type.
458 * @return The Bookmark type from a char representing the type.
459 */
460 private static int getBookmarkTypeFromChar(char c) {
461 switch (c) {
462 case TYPE_PARTNER:
463 return BOOKMARK_TYPE_PARTNER;
464 default:
465 return BOOKMARK_TYPE_NORMAL;
466 }
467 }
468
469 /**
470 * @param c The char representing the bookmark type.
471 * @return Whether the char representing the bookmark type is a valid ty pe.
472 */
473 private static boolean isValidBookmarkTypeFromChar(char c) {
474 return c == TYPE_PARTNER;
475 }
476
477 /**
478 * @param s The bookmark id string (Eg: p1 for partner bookmark id 1).
479 * @return the Bookmark id from the string which is a concatenation of b ookmark type and
480 * the bookmark id.
481 */
482 public static BookmarkId getBookmarkIdFromString(String s) {
483 long id = ROOT_FOLDER_ID;
484 int type = BOOKMARK_TYPE_NORMAL;
485 if (TextUtils.isEmpty(s)) return new BookmarkId(id, type);
486 char folderTypeChar = s.charAt(0);
487 if (isValidBookmarkTypeFromChar(folderTypeChar)) {
488 type = getBookmarkTypeFromChar(folderTypeChar);
489 s = s.substring(1);
490 }
491 try {
492 id = Long.parseLong(s);
493 } catch (NumberFormatException exception) {
494 Log.e(LOG_TAG, "Error parsing url to extract the bookmark folder id.", exception);
495 }
496 return new BookmarkId(id, type);
497 }
498
499 /**
500 * @return The id of the bookmark.
501 */
502 @CalledByNative("BookmarkId")
503 public long getId() {
504 return mId;
505 }
506
507 /**
508 * @return The bookmark type.
509 */
510 @CalledByNative("BookmarkId")
511 public int getType() {
512 return mType;
513 }
514
515 private String getBookmarkTypeString() {
516 switch (mType) {
517 case BOOKMARK_TYPE_PARTNER:
518 return String.valueOf(TYPE_PARTNER);
519 case BOOKMARK_TYPE_NORMAL:
520 default:
521 return "";
522 }
523 }
524
525 @Override
526 public String toString() {
527 return getBookmarkTypeString() + mId;
528 }
529
530 @Override
531 public boolean equals(Object o) {
532 if (!(o instanceof BookmarkId)) return false;
533 BookmarkId item = (BookmarkId) o;
534 return (item.mId == mId && item.mType == mType);
535 }
536
537 @Override
538 public int hashCode() {
539 return toString().hashCode();
540 }
541 }
542
543 /**
544 * Simple object representing the bookmark item. 440 * Simple object representing the bookmark item.
545 */ 441 */
546 public static class BookmarkItem { 442 public static class BookmarkItem {
547 443
548 private final String mTitle; 444 private final String mTitle;
549 private final String mUrl; 445 private final String mUrl;
550 private final BookmarkId mId; 446 private final BookmarkId mId;
551 private final boolean mIsFolder; 447 private final boolean mIsFolder;
552 private final BookmarkId mParentId; 448 private final BookmarkId mParentId;
553 private final boolean mIsEditable; 449 private final boolean mIsEditable;
554 private final boolean mIsManaged; 450 private final boolean mIsManaged;
555 451
556
557 private BookmarkItem(BookmarkId id, String title, String url, boolean is Folder, 452 private BookmarkItem(BookmarkId id, String title, String url, boolean is Folder,
558 BookmarkId parentId, boolean isEditable, boolean isManaged) { 453 BookmarkId parentId, boolean isEditable, boolean isManaged) {
559 mId = id; 454 mId = id;
560 mTitle = title; 455 mTitle = title;
561 mUrl = url; 456 mUrl = url;
562 mIsFolder = isFolder; 457 mIsFolder = isFolder;
563 mParentId = parentId; 458 mParentId = parentId;
564 mIsEditable = isEditable; 459 mIsEditable = isEditable;
565 mIsManaged = isManaged; 460 mIsManaged = isManaged;
566 } 461 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 case GET_CURRENT_FOLDER_HIERARCHY: 528 case GET_CURRENT_FOLDER_HIERARCHY:
634 mHandler.getCurrentFolderHierarchy(mFolderId, mCallback); 529 mHandler.getCurrentFolderHierarchy(mFolderId, mCallback);
635 break; 530 break;
636 default: 531 default:
637 assert false; 532 assert false;
638 break; 533 break;
639 } 534 }
640 } 535 }
641 } 536 }
642 } 537 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/DEPS » ('j') | components/bookmarks/common/android/OWNERS » ('J')

Powered by Google App Engine
This is Rietveld 408576698