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

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

Issue 552743002: [Android] Make BookmarkModelObserver more convenient. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Replaced BookmarkModelObserver Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser; 5 package org.chromium.chrome.browser;
6 6
7 import org.chromium.base.CalledByNative; 7 import org.chromium.base.CalledByNative;
8 import org.chromium.base.ObserverList; 8 import org.chromium.base.ObserverList;
9 import org.chromium.chrome.browser.profiles.Profile; 9 import org.chromium.chrome.browser.profiles.Profile;
10 import org.chromium.components.bookmarks.BookmarkId; 10 import org.chromium.components.bookmarks.BookmarkId;
11 11
12 import java.util.ArrayList; 12 import java.util.ArrayList;
13 import java.util.List; 13 import java.util.List;
14 14
15 /** 15 /**
16 * Provides the communication channel for Android to fetch and manipulate the 16 * Provides the communication channel for Android to fetch and manipulate the
17 * bookmark model stored in native. 17 * bookmark model stored in native.
18 */ 18 */
19 public class BookmarksBridge { 19 public class BookmarksBridge {
20 private final Profile mProfile; 20 private final Profile mProfile;
21 private boolean mExtensiveBookmarkChangesHappening;
21 private long mNativeBookmarksBridge; 22 private long mNativeBookmarksBridge;
22 private boolean mIsNativeBookmarkModelLoaded; 23 private boolean mIsNativeBookmarkModelLoaded;
23 private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks = 24 private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks =
24 new ArrayList<DelayedBookmarkCallback>(); 25 new ArrayList<DelayedBookmarkCallback>();
25 private final ObserverList<BookmarkModelObserver> mObservers = 26 private final ObserverList<BookmarkModelObserver> mObservers =
26 new ObserverList<BookmarkModelObserver>(); 27 new ObserverList<BookmarkModelObserver>();
27 28
28 /** 29 /**
29 * Interface for callback object for fetching bookmarks and folder hierarchy . 30 * Interface for callback object for fetching bookmarks and folder hierarchy .
30 */ 31 */
(...skipping 10 matching lines...) Expand all
41 * Callback method for fetching the folder hierarchy. 42 * Callback method for fetching the folder hierarchy.
42 * @param folderId The folder id to which the bookmarks belong. 43 * @param folderId The folder id to which the bookmarks belong.
43 * @param bookmarksList List holding the fetched folder details. 44 * @param bookmarksList List holding the fetched folder details.
44 */ 45 */
45 @CalledByNative("BookmarksCallback") 46 @CalledByNative("BookmarksCallback")
46 void onBookmarksFolderHierarchyAvailable(BookmarkId folderId, 47 void onBookmarksFolderHierarchyAvailable(BookmarkId folderId,
47 List<BookmarkItem> bookmarksList); 48 List<BookmarkItem> bookmarksList);
48 } 49 }
49 50
50 /** 51 /**
51 * Interface that provides listeners to be notified of changes to the bookma rk model. 52 * Base empty implementation observer class that provides listeners to be no tified of changes
53 * to the bookmark model. It's a mandatory to implement one method,
Ian Wen 2014/09/10 21:48:51 s It's a mandatory/It's mandatory
Kibeom Kim (inactive) 2014/09/10 22:39:16 Done.
54 * bookmarkModelChangedNotDuringExtensiveChange. Other methods are optional and if they aren't
55 * overridden, the default implementation of them will eventually call
56 * bookmarkModelChangedNotDuringExtensiveChange.
52 */ 57 */
53 public interface BookmarkModelObserver { 58 public abstract static class BookmarkModelObserver {
54 /** 59 /**
55 * Invoked when a node has moved. 60 * Invoked when a node has been removed, the item may still be starred t hough.
61 * @param parent The parent of the node that was removed.
62 * @param oldIndex The index of the removed node in the parent before it was removed.
63 * @param node The node that was removed.
64 * @param isExtensiveBookmarkChangesHappening whether extensive changes are happening.
65 */
66 public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, Bookm arkItem node,
67 boolean isExtensiveBookmarkChangesHappening) {
68 if (!isExtensiveBookmarkChangesHappening) {
69 bookmarkNodeRemovedNotDuringExtensiveChange(parent, oldIndex, no de);
70 }
71 }
72
73 /**
74 * Invoked when a node has moved. But only when it's not during extensiv e change.
Ted C 2014/09/10 21:57:40 I wouldn't include "But only when it's not during
Kibeom Kim (inactive) 2014/09/10 22:39:16 Done.
56 * @param oldParent The parent before the move. 75 * @param oldParent The parent before the move.
57 * @param oldIndex The index of the node in the old parent. 76 * @param oldIndex The index of the node in the old parent.
58 * @param newParent The parent after the move. 77 * @param newParent The parent after the move.
59 * @param newIndex The index of the node in the new parent. 78 * @param newIndex The index of the node in the new parent.
60 */ 79 */
61 void bookmarkNodeMoved( 80 public void bookmarkNodeMovedNotDuringExtensiveChange(
Ian Wen 2014/09/10 21:48:51 I wonder if we could rename these functions to be
Ted C 2014/09/10 21:57:39 I don't think we need these NotDuringExtensiveChan
62 BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, in t newIndex); 81 BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, in t newIndex) {
82 bookmarkModelChangedNotDuringExtensiveChange();
83 }
63 84
64 /** 85 /**
65 * Invoked when a node has been added. 86 * Invoked when a node has been added. But only when it's not during ext ensive change.
66 * @param parent The parent of the node being added. 87 * @param parent The parent of the node being added.
67 * @param index The index of the added node. 88 * @param index The index of the added node.
68 */ 89 */
69 void bookmarkNodeAdded(BookmarkItem parent, int index); 90 public void bookmarkNodeAddedNotDuringExtensiveChange(BookmarkItem paren t, int index) {
91 bookmarkModelChangedNotDuringExtensiveChange();
92 }
70 93
71 /** 94 /**
72 * Invoked when a node has been removed, the item may still be starred t hough. 95 * Invoked when a node has been removed, the item may still be starred t hough.
96 * But only when it's not during extensive change.
73 * @param parent The parent of the node that was removed. 97 * @param parent The parent of the node that was removed.
74 * @param oldIndex The index of the removed node in the parent before it was removed. 98 * @param oldIndex The index of the removed node in the parent before it was removed.
75 * @param node The node that was removed. 99 * @param node The node that was removed.
76 */ 100 */
77 void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node); 101 public void bookmarkNodeRemovedNotDuringExtensiveChange(BookmarkItem par ent, int oldIndex,
102 BookmarkItem node) {
103 bookmarkModelChangedNotDuringExtensiveChange();
104 }
78 105
79 /** 106 /**
80 * Invoked when the title or url of a node changes. 107 * Invoked when the title or url of a node changes. But only when it's n ot during extensive
108 * change.
81 * @param node The node being changed. 109 * @param node The node being changed.
82 */ 110 */
83 void bookmarkNodeChanged(BookmarkItem node); 111 public void bookmarkNodeChangedNotDuringExtensiveChange(BookmarkItem nod e) {
112 bookmarkModelChangedNotDuringExtensiveChange();
113 }
84 114
85 /** 115 /**
86 * Invoked when the children (just direct children, not descendants) of a node have been 116 * Invoked when the children (just direct children, not descendants) of a node have been
87 * reordered in some way, such as sorted. 117 * reordered in some way, such as sorted. But only when it's not during extensive change.
88 * @param node The node whose children are being reordered. 118 * @param node The node whose children are being reordered.
89 */ 119 */
90 void bookmarkNodeChildrenReordered(BookmarkItem node); 120 public void bookmarkNodeChildrenReorderedNotDuringExtensiveChange(Bookma rkItem node) {
91 121 bookmarkModelChangedNotDuringExtensiveChange();
92 /** 122 }
93 * Invoked before an extensive set of model changes is about to begin. This tells UI
94 * intensive observers to wait until the updates finish to update themse lves. These methods
95 * should only be used for imports and sync. Observers should still resp ond to
96 * BookmarkNodeRemoved immediately, to avoid holding onto stale node ref erences.
97 */
98 void extensiveBookmarkChangesBeginning();
99
100 /**
101 * Invoked after an extensive set of model changes has ended. This tell s observers to
102 * update themselves if they were waiting for the update to finish.
103 */
104 void extensiveBookmarkChangesEnded();
105
106 /**
107 * Called when there are changes to the bookmark model that don't trigg er any of the other
108 * callback methods. For example, this is called when partner bookmarks change.
109 */
110 void bookmarkModelChanged();
111 123
112 /** 124 /**
113 * Called when the native side of bookmark is loaded and now in usable s tate. 125 * Called when the native side of bookmark is loaded and now in usable s tate.
114 */ 126 */
115 void bookmarkModelLoaded(); 127 public void bookmarkModelLoaded() {
128 bookmarkModelChangedNotDuringExtensiveChange();
129 }
130
131 /**
132 * Called when there are changes to the bookmark model that don't trigg er any of the other
133 * callback methods or it wasn't handled by other callback methods. Als o note that this
Ted C 2014/09/10 21:57:39 This behavior is odd to me. I fear that this will
Kibeom Kim (inactive) 2014/09/10 22:39:16 I think it should be a common pattern. First, we c
134 * isn't called during extensive change.
135 * Examples:
136 * - On partner bookmarks change.
137 * - On extensive change finished.
138 * - Falling back from other methods that are not overridden in this cl ass.
139 */
140 public abstract void bookmarkModelChangedNotDuringExtensiveChange();
116 } 141 }
117 142
118 /** 143 /**
119 * Handler to fetch the bookmarks, titles, urls and folder hierarchy. 144 * Handler to fetch the bookmarks, titles, urls and folder hierarchy.
120 * @param profile Profile instance corresponding to the active profile. 145 * @param profile Profile instance corresponding to the active profile.
121 */ 146 */
122 public BookmarksBridge(Profile profile) { 147 public BookmarksBridge(Profile profile) {
123 mProfile = profile; 148 mProfile = profile;
124 mNativeBookmarksBridge = nativeInit(profile); 149 mNativeBookmarksBridge = nativeInit(profile);
Ted C 2014/09/10 21:57:39 I think you should expose a private native call to
Kibeom Kim (inactive) 2014/09/10 22:39:16 Done. (good point!)
125 } 150 }
126 151
127 /** 152 /**
128 * Destroys this instance so no further calls can be executed. 153 * Destroys this instance so no further calls can be executed.
129 */ 154 */
130 public void destroy() { 155 public void destroy() {
131 if (mNativeBookmarksBridge != 0) { 156 if (mNativeBookmarksBridge != 0) {
132 nativeDestroy(mNativeBookmarksBridge); 157 nativeDestroy(mNativeBookmarksBridge);
133 mNativeBookmarksBridge = 0; 158 mNativeBookmarksBridge = 0;
134 mIsNativeBookmarkModelLoaded = false; 159 mIsNativeBookmarkModelLoaded = false;
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 } 390 }
366 391
367 @CalledByNative 392 @CalledByNative
368 private void bookmarkModelDeleted() { 393 private void bookmarkModelDeleted() {
369 destroy(); 394 destroy();
370 } 395 }
371 396
372 @CalledByNative 397 @CalledByNative
373 private void bookmarkNodeMoved( 398 private void bookmarkNodeMoved(
374 BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int ne wIndex) { 399 BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int ne wIndex) {
375 for (BookmarkModelObserver observer : mObservers) { 400 if (!mExtensiveBookmarkChangesHappening) {
Ted C 2014/09/10 21:57:40 for all these i would early exit if (mExtensiveBo
Kibeom Kim (inactive) 2014/09/10 22:39:16 Done.
376 observer.bookmarkNodeMoved(oldParent, oldIndex, newParent, newIndex) ; 401 for (BookmarkModelObserver observer : mObservers) {
402 observer.bookmarkNodeMovedNotDuringExtensiveChange(oldParent, ol dIndex, newParent,
403 newIndex);
404 }
377 } 405 }
378 } 406 }
379 407
380 @CalledByNative 408 @CalledByNative
381 private void bookmarkNodeAdded(BookmarkItem parent, int index) { 409 private void bookmarkNodeAdded(BookmarkItem parent, int index) {
382 for (BookmarkModelObserver observer : mObservers) { 410 if (!mExtensiveBookmarkChangesHappening) {
383 observer.bookmarkNodeAdded(parent, index); 411 for (BookmarkModelObserver observer : mObservers) {
412 observer.bookmarkNodeAddedNotDuringExtensiveChange(parent, index );
413 }
384 } 414 }
385 } 415 }
386 416
387 @CalledByNative 417 @CalledByNative
388 private void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, Bookmark Item node) { 418 private void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, Bookmark Item node) {
389 for (BookmarkModelObserver observer : mObservers) { 419 for (BookmarkModelObserver observer : mObservers) {
390 observer.bookmarkNodeRemoved(parent, oldIndex, node); 420 observer.bookmarkNodeRemoved(parent, oldIndex, node,
421 mExtensiveBookmarkChangesHappening);
391 } 422 }
392 } 423 }
393 424
394 @CalledByNative 425 @CalledByNative
395 private void bookmarkNodeChanged(BookmarkItem node) { 426 private void bookmarkNodeChanged(BookmarkItem node) {
396 for (BookmarkModelObserver observer : mObservers) { 427 if (!mExtensiveBookmarkChangesHappening) {
397 observer.bookmarkNodeChanged(node); 428 for (BookmarkModelObserver observer : mObservers) {
429 observer.bookmarkNodeChangedNotDuringExtensiveChange(node);
430 }
398 } 431 }
399 } 432 }
400 433
401 @CalledByNative 434 @CalledByNative
402 private void bookmarkNodeChildrenReordered(BookmarkItem node) { 435 private void bookmarkNodeChildrenReordered(BookmarkItem node) {
403 for (BookmarkModelObserver observer : mObservers) { 436 if (!mExtensiveBookmarkChangesHappening) {
404 observer.bookmarkNodeChildrenReordered(node); 437 for (BookmarkModelObserver observer : mObservers) {
438 observer.bookmarkNodeChildrenReorderedNotDuringExtensiveChange(n ode);
439 }
405 } 440 }
406 } 441 }
407 442
408 @CalledByNative 443 @CalledByNative
409 private void extensiveBookmarkChangesBeginning() { 444 private void extensiveBookmarkChangesBeginning() {
410 for (BookmarkModelObserver observer : mObservers) { 445 mExtensiveBookmarkChangesHappening = true;
411 observer.extensiveBookmarkChangesBeginning();
412 }
413 } 446 }
414 447
415 @CalledByNative 448 @CalledByNative
416 private void extensiveBookmarkChangesEnded() { 449 private void extensiveBookmarkChangesEnded() {
417 for (BookmarkModelObserver observer : mObservers) { 450 mExtensiveBookmarkChangesHappening = false;
418 observer.extensiveBookmarkChangesEnded(); 451 bookmarkModelChanged();
419 }
420 } 452 }
421 453
422 @CalledByNative 454 @CalledByNative
423 private void bookmarkModelChanged() { 455 private void bookmarkModelChanged() {
424 for (BookmarkModelObserver observer : mObservers) { 456 if (!mExtensiveBookmarkChangesHappening) {
425 observer.bookmarkModelChanged(); 457 for (BookmarkModelObserver observer : mObservers) {
458 observer.bookmarkModelChangedNotDuringExtensiveChange();
459 }
426 } 460 }
427 } 461 }
428 462
429 @CalledByNative 463 @CalledByNative
430 private static BookmarkItem createBookmarkItem(long id, int type, String tit le, String url, 464 private static BookmarkItem createBookmarkItem(long id, int type, String tit le, String url,
431 boolean isFolder, long parentId, int parentIdType, boolean isEditabl e, 465 boolean isFolder, long parentId, int parentIdType, boolean isEditabl e,
432 boolean isManaged) { 466 boolean isManaged) {
433 return new BookmarkItem(new BookmarkId(id, type), title, url, isFolder, 467 return new BookmarkItem(new BookmarkId(id, type), title, url, isFolder,
434 new BookmarkId(parentId, parentIdType), isEditable, isManaged); 468 new BookmarkId(parentId, parentIdType), isEditable, isManaged);
435 } 469 }
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 case GET_CURRENT_FOLDER_HIERARCHY: 609 case GET_CURRENT_FOLDER_HIERARCHY:
576 mHandler.getCurrentFolderHierarchy(mFolderId, mCallback); 610 mHandler.getCurrentFolderHierarchy(mFolderId, mCallback);
577 break; 611 break;
578 default: 612 default:
579 assert false; 613 assert false;
580 break; 614 break;
581 } 615 }
582 } 616 }
583 } 617 }
584 } 618 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698