13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)package org.chromium.chrome.browser; 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import org.chromium.base.CalledByNative; 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import org.chromium.base.ObserverList; 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.VisibleForTesting; 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import org.chromium.chrome.browser.profiles.Profile; 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import org.chromium.components.bookmarks.BookmarkId; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.components.bookmarks.BookmarkType; 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.ArrayList; 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.List; 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)/** 18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Provides the communication channel for Android to fetch and manipulate the 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * bookmark model stored in native. 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)public class BookmarksBridge { 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final Profile mProfile; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private boolean mIsDoingExtensiveChanges; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private long mNativeBookmarksBridge; 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private boolean mIsNativeBookmarkModelLoaded; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks = 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ArrayList<DelayedBookmarkCallback>(); 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private final ObserverList<BookmarkModelObserver> mObservers = 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ObserverList<BookmarkModelObserver>(); 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Interface for callback object for fetching bookmarks and folder hierarchy. 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public interface BookmarksCallback { 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Callback method for fetching bookmarks for a folder and the folder hierarchy. 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The folder id to which the bookmarks belong. 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param bookmarksList List holding the fetched bookmarks and details. 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative("BookmarksCallback") 410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) void onBookmarksAvailable(BookmarkId folderId, List<BookmarkItem> bookmarksList); 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Callback method for fetching the folder hierarchy. 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The folder id to which the bookmarks belong. 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param bookmarksList List holding the fetched folder details. 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative("BookmarksCallback") 490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) void onBookmarksFolderHierarchyAvailable(BookmarkId folderId, 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) List<BookmarkItem> bookmarksList); 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Base empty implementation observer class that provides listeners to be notified of changes 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * to the bookmark model. It's mandatory to implement one method, bookmarkModelChanged. Other 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * methods are optional and if they aren't overridden, the default implementation of them will 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * eventually call bookmarkModelChanged. Unless noted otherwise, all the functions won't be 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * called during extensive change. 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public abstract static class BookmarkModelObserver { 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when a node has moved. 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param oldParent The parent before the move. 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param oldIndex The index of the node in the old parent. 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param newParent The parent after the move. 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param newIndex The index of the node in the new parent. 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkNodeMoved( 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex) { 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when a node has been added. 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param parent The parent of the node being added. 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param index The index of the added node. 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkNodeAdded(BookmarkItem parent, int index) { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Invoked when a node has been removed, the item may still be starred though. This can 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * be called during extensive change, and have the flag argument indicating it. 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param parent The parent of the node that was removed. 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param oldIndex The index of the removed node in the parent before it was removed. 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param node The node that was removed. 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param isDoingExtensiveChanges whether extensive changes are happening. 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean isDoingExtensiveChanges) { 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (isDoingExtensiveChanges) return; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkNodeRemoved(parent, oldIndex, node); 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when a node has been removed, the item may still be starred though. 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param parent The parent of the node that was removed. 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param oldIndex The index of the removed node in the parent before it was removed. 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param node The node that was removed. 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node) { 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when the title or url of a node changes. 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param node The node being changed. 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkNodeChanged(BookmarkItem node) { 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when the children (just direct children, not descendants) of a node have been 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * reordered in some way, such as sorted. 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param node The node whose children are being reordered. 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkNodeChildrenReordered(BookmarkItem node) { 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Called when the native side of bookmark is loaded and now in usable state. 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void bookmarkModelLoaded() { 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) /** 1330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) * Called when there are changes to the bookmark model that don't trigger any of the other 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * callback methods or it wasn't handled by other callback methods. 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Examples: 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * - On partner bookmarks change. 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * - On extensive change finished. 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * - Falling back from other methods that are not overridden in this class. 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public abstract void bookmarkModelChanged(); 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Handler to fetch the bookmarks, titles, urls and folder hierarchy. 1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param profile Profile instance corresponding to the active profile. 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public BookmarksBridge(Profile profile) { 1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mProfile = profile; 1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mNativeBookmarksBridge = nativeInit(profile); 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mIsDoingExtensiveChanges = nativeIsDoingExtensiveChanges(mNativeBookmarksBridge); 1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Destroys this instance so no further calls can be executed. 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public void destroy() { 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (mNativeBookmarksBridge != 0) { 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) nativeDestroy(mNativeBookmarksBridge); 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mNativeBookmarksBridge = 0; 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mIsNativeBookmarkModelLoaded = false; 1610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) mDelayedBookmarkCallbacks.clear(); 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mObservers.clear(); 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Load an empty partner bookmark shim for testing. The root node for bookmark will be an 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * empty node. 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @VisibleForTesting 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void loadEmptyPartnerBookmarkShimForTesting() { 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeLoadEmptyPartnerBookmarkShimForTesting(mNativeBookmarksBridge); 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Add an observer to bookmark model changes. 17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param observer The observer to be added. 17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public void addObserver(BookmarkModelObserver observer) { 18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mObservers.addObserver(observer); 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Remove an observer of bookmark model changes. 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param observer The observer to be removed. 18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public void removeObserver(BookmarkModelObserver observer) { 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mObservers.removeObserver(observer); 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @return Whether or not the underlying bookmark model is loaded. 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public boolean isBookmarkModelLoaded() { 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return mIsNativeBookmarkModelLoaded; 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @return A BookmarkItem instance for the given BookmarkId. 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public BookmarkItem getBookmarkById(BookmarkId id) { 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return nativeGetBookmarkByID(mNativeBookmarksBridge, id.getId(), id.getType()); 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @return All the permanent nodes. 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public List<BookmarkId> getPermanentNodeIDs() { 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List<BookmarkId> result = new ArrayList<BookmarkId>(); 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nativeGetPermanentNodeIDs(mNativeBookmarksBridge, result); 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return result; 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return The top level folder's parents, which are root node, mobile node, and other node. 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public List<BookmarkId> getTopLevelFolderParentIDs() { 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<BookmarkId> result = new ArrayList<BookmarkId>(); 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeGetTopLevelFolderParentIDs(mNativeBookmarksBridge, result); 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return result; 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param getSpecial Whether special top folders should be returned. 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param getNormal Whether normal top folders should be returned. 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return The top level folders. Note that special folders come first and normal top folders 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * will be in the alphabetical order. Special top folders are managed bookmark and 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * partner bookmark. Normal top folders are desktop permanent folder, and the 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * sub-folders of mobile permanent folder and others permanent folder. 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public List<BookmarkId> getTopLevelFolderIDs(boolean getSpecial, boolean getNormal) { 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<BookmarkId> result = new ArrayList<BookmarkId>(); 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeGetTopLevelFolderIDs(mNativeBookmarksBridge, getSpecial, getNormal, result); 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return result; 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return The uncategorized bookmark IDs. They are direct descendant bookmarks of mobile and 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * other folders. 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public List<BookmarkId> getUncategorizedBookmarkIDs() { 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<BookmarkId> result = new ArrayList<BookmarkId>(); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeGetUncategorizedBookmarkIDs(mNativeBookmarksBridge, result); 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return result; 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Populates folderList with BookmarkIds of folders users can move bookmarks 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * to and all folders have corresponding depth value in depthList. Folders 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * having depths of 0 will be shown as top-layered folders. These include 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * "Desktop Folder" itself as well as all children of "mobile" and "other". 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Children of 0-depth folders have depth of 1, and so on. 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * The result list will be sorted alphabetically by title. "mobile", "other", 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * root node, managed folder, partner folder are NOT included as results. 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void getAllFoldersWithDepths(List<BookmarkId> folderList, 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<Integer> depthList) { 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeGetAllFoldersWithDepths(mNativeBookmarksBridge, folderList, depthList); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return The BookmarkId for Mobile folder node 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public BookmarkId getMobileFolderId() { 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return nativeGetMobileFolderId(mNativeBookmarksBridge); 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return Id representing the special "other" folder from bookmark model. 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @VisibleForTesting 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public BookmarkId getOtherFolderId() { 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return nativeGetOtherFolderId(mNativeBookmarksBridge); 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return BokmarkId representing special "desktop" folder, namely "bookmark bar". 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @VisibleForTesting 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public BookmarkId getDesktopFolderId() { 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert mIsNativeBookmarkModelLoaded; 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return nativeGetDesktopFolderId(mNativeBookmarksBridge); 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Reads sub-folder IDs, sub-bookmark IDs, or both of the given folder. 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param getFolders Whether sub-folders should be returned. 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param getBookmarks Whether sub-bookmarks should be returned. 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @return Child IDs of the given folder, with the specified type. 300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public List<BookmarkId> getChildIDs(BookmarkId id, boolean getFolders, boolean getBookmarks) { 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List<BookmarkId> result = new ArrayList<BookmarkId>(); 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nativeGetChildIDs(mNativeBookmarksBridge, 3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) id.getId(), 3066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) id.getType(), 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch getFolders, 308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch getBookmarks, 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result); 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return result; 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @return All bookmark IDs ordered by descending creation date. 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public List<BookmarkId> getAllBookmarkIDsOrderedByCreationDate() { 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List<BookmarkId> result = new ArrayList<BookmarkId>(); 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nativeGetAllBookmarkIDsOrderedByCreationDate(mNativeBookmarksBridge, result); 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return result; 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Set title of the given bookmark. 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void setBookmarkTitle(BookmarkId id, String title) { 327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 3286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) nativeSetBookmarkTitle(mNativeBookmarksBridge, id.getId(), id.getType(), title); 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Set URL of the given bookmark. 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void setBookmarkUrl(BookmarkId id, String url) { 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 3366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) nativeSetBookmarkUrl(mNativeBookmarksBridge, id.getId(), id.getType(), url); 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @return Whether the given bookmark exist in the current bookmark model, e.g., not deleted. 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public boolean doesBookmarkExist(BookmarkId id) { 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assert mIsNativeBookmarkModelLoaded; 3446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return nativeDoesBookmarkExist(mNativeBookmarksBridge, id.getId(), id.getType()); 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Fetches the bookmarks of the given folder. This is an always-synchronous version of another 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * getBookmarksForForder function. 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @param folderId The parent folder id. 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @return Bookmarks of the given folder. 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public List<BookmarkItem> getBookmarksForFolder(BookmarkId folderId) { 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assert mIsNativeBookmarkModelLoaded; 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List<BookmarkItem> result = new ArrayList<BookmarkItem>(); 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nativeGetBookmarksForFolder(mNativeBookmarksBridge, folderId, null, result); 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return result; 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 3623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Fetches the bookmarks of the current folder. Callback will be 3633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * synchronous if the bookmark model is already loaded and async if it is loaded in the 3643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * background. 3653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The current folder id. 3663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param callback Instance of a callback object. 3673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 3680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void getBookmarksForFolder(BookmarkId folderId, BookmarksCallback callback) { 3693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (mIsNativeBookmarkModelLoaded) { 3703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) nativeGetBookmarksForFolder(mNativeBookmarksBridge, folderId, callback, 3713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new ArrayList<BookmarkItem>()); 3723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else { 3733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.add(new DelayedBookmarkCallback(folderId, callback, 3743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DelayedBookmarkCallback.GET_BOOKMARKS_FOR_FOLDER, this)); 3753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 3793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Fetches the folder hierarchy of the given folder. Callback will be 3803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * synchronous if the bookmark model is already loaded and async if it is loaded in the 3813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * background. 3823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The current folder id. 3833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param callback Instance of a callback object. 3843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 3850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void getCurrentFolderHierarchy(BookmarkId folderId, BookmarksCallback callback) { 3863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (mIsNativeBookmarkModelLoaded) { 3873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) nativeGetCurrentFolderHierarchy(mNativeBookmarksBridge, folderId, callback, 3883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new ArrayList<BookmarkItem>()); 3893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else { 3903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.add(new DelayedBookmarkCallback(folderId, callback, 3913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DelayedBookmarkCallback.GET_CURRENT_FOLDER_HIERARCHY, this)); 3923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 395424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** 396424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Deletes a specified bookmark node. 397424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param bookmarkId The ID of the bookmark to be deleted. 398424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 3990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public void deleteBookmark(BookmarkId bookmarkId) { 400424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) nativeDeleteBookmark(mNativeBookmarksBridge, bookmarkId); 401424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 402424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /** 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Move the bookmark to the new index within same folder or to a different folder. 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param bookmarkId The id of the bookmark that is being moved. 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param newParentId The parent folder id. 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param index The new index for the bookmark. 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public void moveBookmark(BookmarkId bookmarkId, BookmarkId newParentId, int index) { 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) nativeMoveBookmark(mNativeBookmarksBridge, bookmarkId, newParentId, index); 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Add a new folder to the given parent folder 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param parent Folder where to add. Must be a normal editable folder, instead of a partner 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * bookmark folder or a managed bookomark folder or root node of the entire 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * bookmark model. 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param index The position to locate the new folder 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param title The title text of the new folder 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return Id of the added node. If adding failed (index is invalid, string is null, parent is 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * not editable), returns null. 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public BookmarkId addFolder(BookmarkId parent, int index, String title) { 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert parent.getType() == BookmarkType.BOOKMARK_TYPE_NORMAL; 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert index >= 0; 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert title != null; 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return nativeAddFolder(mNativeBookmarksBridge, parent, index, title); 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Add a new bookmark to a specific position below parent 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param parent Folder where to add. Must be a normal editable folder, instead of a partner 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * bookmark folder or a managed bookomark folder or root node of the entire 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * bookmark model. 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param index The position where the bookmark will be placed in parent folder 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param title Title of the new bookmark 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param url Url of the new bookmark 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return Id of the added node. If adding failed (index is invalid, string is null, parent is 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * not editable), returns null. 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public BookmarkId addBookmark(BookmarkId parent, int index, String title, String url) { 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert parent.getType() == BookmarkType.BOOKMARK_TYPE_NORMAL; 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert index >= 0; 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert title != null; 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert url != null; 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return nativeAddBookmark(mNativeBookmarksBridge, parent, index, title, url); 4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Undo the last undoable action on the top of the bookmark undo stack 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void undo() { 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeUndo(mNativeBookmarksBridge); 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Start grouping actions for a single undo operation 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Note: This only works with BookmarkModel, not partner bookmarks. 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void startGroupingUndos() { 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeStartGroupingUndos(mNativeBookmarksBridge); 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * End grouping actions for a single undo operation 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Note: This only works with BookmarkModel, not partner bookmarks. 4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void endGroupingUndos() { 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nativeEndGroupingUndos(mNativeBookmarksBridge); 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * A bridge function to BookmarkModelFactory::GetForProfile. 4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public static long getNativeBookmarkModel(Profile profile) { 4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return nativeGetNativeBookmarkModel(profile); 4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public static boolean isEditBookmarksEnabled() { 4844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return nativeIsEditBookmarksEnabled(); 4854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public static boolean isEnhancedBookmarksEnabled(Profile profile) { 4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return nativeIsEnhancedBookmarksFeatureEnabled(profile); 4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative 492424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private void bookmarkModelLoaded() { 4933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mIsNativeBookmarkModelLoaded = true; 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (BookmarkModelObserver observer : mObservers) { 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch observer.bookmarkModelLoaded(); 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!mDelayedBookmarkCallbacks.isEmpty()) { 5003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (int i = 0; i < mDelayedBookmarkCallbacks.size(); i++) { 5013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.get(i).callCallbackMethod(); 5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.clear(); 5043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative 50858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkModelDeleted() { 5093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) destroy(); 5103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative 51358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeMoved( 51458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex) { 5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mIsDoingExtensiveChanges) return; 5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 51858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeMoved(oldParent, oldIndex, newParent, newIndex); 51958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 52058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 52158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 52358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeAdded(BookmarkItem parent, int index) { 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mIsDoingExtensiveChanges) return; 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 52658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 52758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeAdded(parent, index); 52858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 52958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 53058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 53258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node) { 53358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci observer.bookmarkNodeRemoved(parent, oldIndex, node, 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mIsDoingExtensiveChanges); 53658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 53758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 53858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 54058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeChanged(BookmarkItem node) { 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mIsDoingExtensiveChanges) return; 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 54358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 54458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeChanged(node); 54558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 54658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 54758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 54958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeChildrenReordered(BookmarkItem node) { 5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mIsDoingExtensiveChanges) return; 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 55258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 55358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeChildrenReordered(node); 55458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 55558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 55658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 55758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 55858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void extensiveBookmarkChangesBeginning() { 5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mIsDoingExtensiveChanges = true; 56058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 56158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 56258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 56358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void extensiveBookmarkChangesEnded() { 5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mIsDoingExtensiveChanges = false; 5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bookmarkModelChanged(); 56658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 56758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 56858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 5690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private void bookmarkModelChanged() { 5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mIsDoingExtensiveChanges) return; 5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 5730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) observer.bookmarkModelChanged(); 5740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 5750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 5760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @CalledByNative 5780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private static BookmarkItem createBookmarkItem(long id, int type, String title, String url, 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch boolean isFolder, long parentId, int parentIdType, boolean isEditable, 580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch boolean isManaged) { 5810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return new BookmarkItem(new BookmarkId(id, type), title, url, isFolder, 582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new BookmarkId(parentId, parentIdType), isEditable, isManaged); 58358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 58458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 58558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 58658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private static void addToList(List<BookmarkItem> bookmarksList, BookmarkItem bookmark) { 58758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bookmarksList.add(bookmark); 5883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 5893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 590f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @CalledByNative 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private static void addToBookmarkIdList(List<BookmarkId> bookmarkIdList, long id, int type) { 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmarkIdList.add(new BookmarkId(id, type)); 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @CalledByNative 5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private static void addToBookmarkIdListWithDepth(List<BookmarkId> folderList, long id, 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int type, List<Integer> depthList, int depth) { 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci folderList.add(new BookmarkId(id, type)); 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci depthList.add(depth); 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @CalledByNative 603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private static BookmarkId createBookmarkId(long id, int type) { 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return new BookmarkId(id, type); 605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native BookmarkItem nativeGetBookmarkByID(long nativeBookmarksBridge, long id, 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int type); 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native void nativeGetPermanentNodeIDs(long nativeBookmarksBridge, 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List<BookmarkId> bookmarksList); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeGetTopLevelFolderParentIDs(long nativeBookmarksBridge, 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<BookmarkId> bookmarksList); 6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeGetTopLevelFolderIDs(long nativeBookmarksBridge, boolean getSpecial, 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci boolean getNormal, List<BookmarkId> bookmarksList); 6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeGetUncategorizedBookmarkIDs(long nativeBookmarksBridge, 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<BookmarkId> bookmarksList); 6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeGetAllFoldersWithDepths(long nativeBookmarksBridge, 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci List<BookmarkId> folderList, List<Integer> depthList); 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native BookmarkId nativeGetMobileFolderId(long nativeBookmarksBridge); 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native BookmarkId nativeGetOtherFolderId(long nativeBookmarksBridge); 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native BookmarkId nativeGetDesktopFolderId(long nativeBookmarksBridge); 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native void nativeGetChildIDs(long nativeBookmarksBridge, long id, int type, 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch boolean getFolders, boolean getBookmarks, List<BookmarkId> bookmarksList); 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native void nativeGetAllBookmarkIDsOrderedByCreationDate(long nativeBookmarksBridge, 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch List<BookmarkId> result); 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native void nativeSetBookmarkTitle(long nativeBookmarksBridge, long id, int type, 627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch String title); 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private native void nativeSetBookmarkUrl(long nativeBookmarksBridge, long id, int type, 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch String url); 6305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private native boolean nativeDoesBookmarkExist(long nativeBookmarksBridge, long id, int type); 631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private native void nativeGetBookmarksForFolder(long nativeBookmarksBridge, 6320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) BookmarkId folderId, BookmarksCallback callback, 6333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) List<BookmarkItem> bookmarksList); 634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private native void nativeGetCurrentFolderHierarchy(long nativeBookmarksBridge, 6350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) BookmarkId folderId, BookmarksCallback callback, 6363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) List<BookmarkItem> bookmarksList); 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native BookmarkId nativeAddFolder(long nativeBookmarksBridge, BookmarkId parent, 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int index, String title); 639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private native void nativeDeleteBookmark(long nativeBookmarksBridge, BookmarkId bookmarkId); 640a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private native void nativeMoveBookmark(long nativeBookmarksBridge, BookmarkId bookmarkId, 641a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BookmarkId newParentId, int index); 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native BookmarkId nativeAddBookmark(long nativeBookmarksBridge, BookmarkId parent, 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int index, String title, String url); 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeUndo(long nativeBookmarksBridge); 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeStartGroupingUndos(long nativeBookmarksBridge); 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeEndGroupingUndos(long nativeBookmarksBridge); 6476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private static native long nativeGetNativeBookmarkModel(Profile profile); 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private static native boolean nativeIsEnhancedBookmarksFeatureEnabled(Profile profile); 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native void nativeLoadEmptyPartnerBookmarkShimForTesting(long nativeBookmarksBridge); 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private native long nativeInit(Profile profile); 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private native boolean nativeIsDoingExtensiveChanges(long nativeBookmarksBridge); 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private native void nativeDestroy(long nativeBookmarksBridge); 6544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private static native boolean nativeIsEditBookmarksEnabled(); 6553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 6573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Simple object representing the bookmark item. 6583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 6593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public static class BookmarkItem { 6603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final String mTitle; 6623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final String mUrl; 6630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private final BookmarkId mId; 6643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final boolean mIsFolder; 6650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private final BookmarkId mParentId; 666424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private final boolean mIsEditable; 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private final boolean mIsManaged; 6683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private BookmarkItem(BookmarkId id, String title, String url, boolean isFolder, 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BookmarkId parentId, boolean isEditable, boolean isManaged) { 6713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mId = id; 6723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mTitle = title; 6733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mUrl = url; 6743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mIsFolder = isFolder; 6753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mParentId = parentId; 676424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mIsEditable = isEditable; 677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mIsManaged = isManaged; 6783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 6793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 680424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Title of the bookmark item. */ 6813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public String getTitle() { 6823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mTitle; 6833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 6843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 685424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Url of the bookmark item. */ 6863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public String getUrl() { 6873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mUrl; 6883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 6893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 690424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Id of the bookmark item. */ 6910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public BookmarkId getId() { 6923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mId; 6933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 6943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 695424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Whether item is a folder or a bookmark. */ 6963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public boolean isFolder() { 6973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mIsFolder; 6983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 6993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 700424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Parent id of the bookmark item. */ 7010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public BookmarkId getParentId() { 7023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mParentId; 7033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 704424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 705424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Whether this bookmark can be edited. */ 706424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public boolean isEditable() { 707424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return mIsEditable; 708424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** @return Whether this is a managed bookmark. */ 711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public boolean isManaged() { 712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return mIsManaged; 713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 7143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 7173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Details about callbacks that need to be called once the bookmark model has loaded. 7183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 7193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private static class DelayedBookmarkCallback { 7203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private static final int GET_BOOKMARKS_FOR_FOLDER = 0; 7223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private static final int GET_CURRENT_FOLDER_HIERARCHY = 1; 7233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final BookmarksCallback mCallback; 7250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private final BookmarkId mFolderId; 7263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final int mCallbackMethod; 7273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final BookmarksBridge mHandler; 7283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private DelayedBookmarkCallback(BookmarkId folderId, BookmarksCallback callback, 7300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) int method, BookmarksBridge handler) { 7313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mFolderId = folderId; 7323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mCallback = callback; 7333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mCallbackMethod = method; 7343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mHandler = handler; 7353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 7383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Invoke the callback method. 7393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 7403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private void callCallbackMethod() { 7410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) switch (mCallbackMethod) { 7423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case GET_BOOKMARKS_FOR_FOLDER: 7433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mHandler.getBookmarksForFolder(mFolderId, mCallback); 7443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 7453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case GET_CURRENT_FOLDER_HIERARCHY: 7463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mHandler.getCurrentFolderHierarchy(mFolderId, mCallback); 7473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 7483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) default: 7490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) assert false; 7503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 7513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 755