| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |