BookmarksBridge.java revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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; 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import org.chromium.chrome.browser.profiles.Profile; 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.ArrayList; 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.List; 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)/** 15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Provides the communication channel for Android to fetch and manipulate the 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * bookmark model stored in native. 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)public class BookmarksBridge { 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final Profile mProfile; 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private int mNativeBookmarksBridge; 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private boolean mIsNativeBookmarkModelLoaded; 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) = new ArrayList<DelayedBookmarkCallback>(); 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private final ObserverList<BookmarkModelObserver> mObservers 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) = new ObserverList<BookmarkModelObserver>(); 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Interface for callback object for fetching bookmarks and folder hierarchy. 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public interface BookmarksCallback { 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Callback method for fetching bookmarks for a folder and the folder hierarchy. 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The folder id to which the bookmarks belong. 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param bookmarksList List holding the fetched bookmarks and details. 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative("BookmarksCallback") 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void onBookmarksAvailable(long folderId, List<BookmarkItem> bookmarksList); 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Callback method for fetching the folder hierarchy. 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The folder id to which the bookmarks belong. 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param bookmarksList List holding the fetched folder details. 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative("BookmarksCallback") 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void onBookmarksFolderHierarchyAvailable(long folderId, 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) List<BookmarkItem> bookmarksList); 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Interface that provides listeners to be notified of changes to the bookmark model. 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public interface BookmarkModelObserver { 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when a node has moved. 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param oldParent The parent before the move. 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param oldIndex The index of the node in the old parent. 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param newParent The parent after the move. 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param newIndex The index of the node in the new parent. 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void bookmarkNodeMoved( 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex); 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when a node has been added. 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param parent The parent of the node being added. 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param index The index of the added node. 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void bookmarkNodeAdded(BookmarkItem parent, int index); 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when a node has been removed, the item may still be starred though. 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param parent The parent of the node that was removed. 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param oldIndex The index of the removed node in the parent before it was removed. 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param node The node that was removed. 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node); 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when the title or url of a node changes. 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param node The node being changed. 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void bookmarkNodeChanged(BookmarkItem node); 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked when the children (just direct children, not descendants) of a node have been 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * reordered in some way, such as sorted. 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param node The node whose children are being reordered. 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void bookmarkNodeChildrenReordered(BookmarkItem node); 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked before an extensive set of model changes is about to begin. This tells UI 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * intensive observers to wait until the updates finish to update themselves. These methods 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * should only be used for imports and sync. Observers should still respond to 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * BookmarkNodeRemoved immediately, to avoid holding onto stale node references. 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void extensiveBookmarkChangesBeginning(); 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Invoked after an extensive set of model changes has ended. This tells observers to 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * update themselves if they were waiting for the update to finish. 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void extensiveBookmarkChangesEnded(); 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Handler to fetch the bookmarks, titles, urls and folder hierarchy. 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param profile Profile instance corresponding to the active profile. 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public BookmarksBridge(Profile profile) { 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mProfile = profile; 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mNativeBookmarksBridge = nativeInit(profile); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Destroys this instance so no further calls can be executed. 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public void destroy() { 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (mNativeBookmarksBridge != 0) { 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) nativeDestroy(mNativeBookmarksBridge); 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mNativeBookmarksBridge = 0; 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mIsNativeBookmarkModelLoaded = false; 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mObservers.clear(); 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Add an observer to bookmark model changes. 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param observer The observer to be added. 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public void addObserver(BookmarkModelObserver observer) { 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mObservers.addObserver(observer); 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) /** 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Remove an observer of bookmark model changes. 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param observer The observer to be removed. 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */ 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public void removeObserver(BookmarkModelObserver observer) { 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mObservers.removeObserver(observer); 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Fetches the bookmarks of the current folder. Callback will be 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * synchronous if the bookmark model is already loaded and async if it is loaded in the 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * background. 1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The current folder id. 1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param callback Instance of a callback object. 1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public void getBookmarksForFolder(long folderId, BookmarksCallback callback) { 1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (mIsNativeBookmarkModelLoaded) { 1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) nativeGetBookmarksForFolder(mNativeBookmarksBridge, folderId, callback, 1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new ArrayList<BookmarkItem>()); 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else { 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.add(new DelayedBookmarkCallback(folderId, callback, 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DelayedBookmarkCallback.GET_BOOKMARKS_FOR_FOLDER, this)); 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Fetches the folder hierarchy of the given folder. Callback will be 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * synchronous if the bookmark model is already loaded and async if it is loaded in the 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * background. 1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param folderId The current folder id. 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * @param callback Instance of a callback object. 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public void getCurrentFolderHierarchy(long folderId, BookmarksCallback callback) { 1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (mIsNativeBookmarkModelLoaded) { 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) nativeGetCurrentFolderHierarchy(mNativeBookmarksBridge, folderId, callback, 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new ArrayList<BookmarkItem>()); 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } else { 1733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.add(new DelayedBookmarkCallback(folderId, callback, 1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DelayedBookmarkCallback.GET_CURRENT_FOLDER_HIERARCHY, this)); 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** 179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * Deletes a specified bookmark node. 180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) * @param bookmarkId The ID of the bookmark to be deleted. 181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) */ 182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public void deleteBookmark(long bookmarkId) { 183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) nativeDeleteBookmark(mNativeBookmarksBridge, bookmarkId); 184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public static boolean isEditBookmarksEnabled() { 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return nativeIsEditBookmarksEnabled(); 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative 191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private void bookmarkModelLoaded() { 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mIsNativeBookmarkModelLoaded = true; 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!mDelayedBookmarkCallbacks.isEmpty()) { 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (int i = 0; i < mDelayedBookmarkCallbacks.size(); i++) { 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.get(i).callCallbackMethod(); 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mDelayedBookmarkCallbacks.clear(); 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkModelDeleted() { 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) destroy(); 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @CalledByNative 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeMoved( 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex) { 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeMoved(oldParent, oldIndex, newParent, newIndex); 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeAdded(BookmarkItem parent, int index) { 21658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeAdded(parent, index); 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 22258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node) { 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeRemoved(parent, oldIndex, node); 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeChanged(BookmarkItem node) { 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeChanged(node); 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void bookmarkNodeChildrenReordered(BookmarkItem node) { 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.bookmarkNodeChildrenReordered(node); 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void extensiveBookmarkChangesBeginning() { 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 24558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.extensiveBookmarkChangesBeginning(); 24658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 24758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private void extensiveBookmarkChangesEnded() { 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (BookmarkModelObserver observer : mObservers) { 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.extensiveBookmarkChangesEnded(); 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private static BookmarkItem create(long id, String title, String url, 258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) boolean isFolder, long parentId, boolean isEditable) { 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return new BookmarkItem(id, title, url, isFolder, parentId, isEditable); 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @CalledByNative 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private static void addToList(List<BookmarkItem> bookmarksList, BookmarkItem bookmark) { 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bookmarksList.add(bookmark); 2653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private native void nativeGetBookmarksForFolder(int nativeBookmarksBridge, 2683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) long folderId, BookmarksCallback callback, 2693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) List<BookmarkItem> bookmarksList); 2703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private native void nativeGetCurrentFolderHierarchy(int nativeBookmarksBridge, 2713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) long folderId, BookmarksCallback callback, 2723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) List<BookmarkItem> bookmarksList); 273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private native void nativeDeleteBookmark(int nativeBookmarksBridge, long bookmarkId); 2743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private native int nativeInit(Profile profile); 2753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private native void nativeDestroy(int nativeBookmarksBridge); 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private static native boolean nativeIsEditBookmarksEnabled(); 2773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 2793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Simple object representing the bookmark item. 2803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 2813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public static class BookmarkItem { 2823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final String mTitle; 2843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final String mUrl; 2853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final long mId; 2863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final boolean mIsFolder; 2873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final long mParentId; 288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private final boolean mIsEditable; 2893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private BookmarkItem(long id, String title, String url, boolean isFolder, long parentId, 291424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) boolean isEditable) { 2923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mId = id; 2933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mTitle = title; 2943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mUrl = url; 2953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mIsFolder = isFolder; 2963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mParentId = parentId; 297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) mIsEditable = isEditable; 2983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 300424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Title of the bookmark item. */ 3013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public String getTitle() { 3023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mTitle; 3033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Url of the bookmark item. */ 3063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public String getUrl() { 3073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mUrl; 3083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Id of the bookmark item. */ 3113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public long getId() { 3123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mId; 3133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Whether item is a folder or a bookmark. */ 3163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public boolean isFolder() { 3173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mIsFolder; 3183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 320424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Parent id of the bookmark item. */ 3213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public long getParentId() { 3223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return mParentId; 3233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 324424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 325424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) /** @return Whether this bookmark can be edited. */ 326424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public boolean isEditable() { 327424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return mIsEditable; 328424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 3293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 3323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Details about callbacks that need to be called once the bookmark model has loaded. 3333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 3343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private static class DelayedBookmarkCallback { 3353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private static final int GET_BOOKMARKS_FOR_FOLDER = 0; 3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private static final int GET_CURRENT_FOLDER_HIERARCHY = 1; 3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final BookmarksCallback mCallback; 3403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final long mFolderId; 3413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final int mCallbackMethod; 3423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private final BookmarksBridge mHandler; 3433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private DelayedBookmarkCallback(long folderId, BookmarksCallback callback, int method, 3453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BookmarksBridge handler) { 3463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mFolderId = folderId; 3473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mCallback = callback; 3483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mCallbackMethod = method; 3493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mHandler = handler; 3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) /** 3533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Invoke the callback method. 3543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 3553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private void callCallbackMethod() { 3563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) switch(mCallbackMethod) { 3573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case GET_BOOKMARKS_FOR_FOLDER: 3583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mHandler.getBookmarksForFolder(mFolderId, mCallback); 3593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 3603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case GET_CURRENT_FOLDER_HIERARCHY: 3613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mHandler.getCurrentFolderHierarchy(mFolderId, mCallback); 3623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 3633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) default: 3643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 3653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 3683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 3703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 371