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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
index 15a18f5ee2bbc377643ff60ec0eacb5a9ceb4e2c..2e1b490c37af073bd88a8bb30e76d6600d2d4345 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
@@ -18,6 +18,7 @@ import java.util.List;
*/
public class BookmarksBridge {
private final Profile mProfile;
+ private boolean mExtensiveBookmarkChangesHappening;
private long mNativeBookmarksBridge;
private boolean mIsNativeBookmarkModelLoaded;
private final List<DelayedBookmarkCallback> mDelayedBookmarkCallbacks =
@@ -48,71 +49,95 @@ public class BookmarksBridge {
}
/**
- * Interface that provides listeners to be notified of changes to the bookmark model.
+ * Base empty implementation observer class that provides listeners to be notified of changes
+ * 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.
+ * bookmarkModelChangedNotDuringExtensiveChange. Other methods are optional and if they aren't
+ * overridden, the default implementation of them will eventually call
+ * bookmarkModelChangedNotDuringExtensiveChange.
*/
- public interface BookmarkModelObserver {
+ public abstract static class BookmarkModelObserver {
/**
- * Invoked when a node has moved.
+ * Invoked when a node has been removed, the item may still be starred though.
+ * @param parent The parent of the node that was removed.
+ * @param oldIndex The index of the removed node in the parent before it was removed.
+ * @param node The node that was removed.
+ * @param isExtensiveBookmarkChangesHappening whether extensive changes are happening.
+ */
+ public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node,
+ boolean isExtensiveBookmarkChangesHappening) {
+ if (!isExtensiveBookmarkChangesHappening) {
+ bookmarkNodeRemovedNotDuringExtensiveChange(parent, oldIndex, node);
+ }
+ }
+
+ /**
+ * Invoked when a node has moved. But only when it's not during extensive 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.
* @param oldParent The parent before the move.
* @param oldIndex The index of the node in the old parent.
* @param newParent The parent after the move.
* @param newIndex The index of the node in the new parent.
*/
- void bookmarkNodeMoved(
- BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex);
+ 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
+ BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex) {
+ bookmarkModelChangedNotDuringExtensiveChange();
+ }
/**
- * Invoked when a node has been added.
+ * Invoked when a node has been added. But only when it's not during extensive change.
* @param parent The parent of the node being added.
* @param index The index of the added node.
*/
- void bookmarkNodeAdded(BookmarkItem parent, int index);
+ public void bookmarkNodeAddedNotDuringExtensiveChange(BookmarkItem parent, int index) {
+ bookmarkModelChangedNotDuringExtensiveChange();
+ }
/**
* Invoked when a node has been removed, the item may still be starred though.
+ * But only when it's not during extensive change.
* @param parent The parent of the node that was removed.
* @param oldIndex The index of the removed node in the parent before it was removed.
* @param node The node that was removed.
*/
- void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node);
+ public void bookmarkNodeRemovedNotDuringExtensiveChange(BookmarkItem parent, int oldIndex,
+ BookmarkItem node) {
+ bookmarkModelChangedNotDuringExtensiveChange();
+ }
/**
- * Invoked when the title or url of a node changes.
+ * Invoked when the title or url of a node changes. But only when it's not during extensive
+ * change.
* @param node The node being changed.
*/
- void bookmarkNodeChanged(BookmarkItem node);
+ public void bookmarkNodeChangedNotDuringExtensiveChange(BookmarkItem node) {
+ bookmarkModelChangedNotDuringExtensiveChange();
+ }
/**
* Invoked when the children (just direct children, not descendants) of a node have been
- * reordered in some way, such as sorted.
+ * reordered in some way, such as sorted. But only when it's not during extensive change.
* @param node The node whose children are being reordered.
*/
- void bookmarkNodeChildrenReordered(BookmarkItem node);
-
- /**
- * Invoked before an extensive set of model changes is about to begin. This tells UI
- * intensive observers to wait until the updates finish to update themselves. These methods
- * should only be used for imports and sync. Observers should still respond to
- * BookmarkNodeRemoved immediately, to avoid holding onto stale node references.
- */
- void extensiveBookmarkChangesBeginning();
+ public void bookmarkNodeChildrenReorderedNotDuringExtensiveChange(BookmarkItem node) {
+ bookmarkModelChangedNotDuringExtensiveChange();
+ }
/**
- * Invoked after an extensive set of model changes has ended. This tells observers to
- * update themselves if they were waiting for the update to finish.
+ * Called when the native side of bookmark is loaded and now in usable state.
*/
- void extensiveBookmarkChangesEnded();
+ public void bookmarkModelLoaded() {
+ bookmarkModelChangedNotDuringExtensiveChange();
+ }
/**
* Called when there are changes to the bookmark model that don't trigger any of the other
- * callback methods. For example, this is called when partner bookmarks change.
+ * callback methods or it wasn't handled by other callback methods. Also 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
+ * isn't called during extensive change.
+ * Examples:
+ * - On partner bookmarks change.
+ * - On extensive change finished.
+ * - Falling back from other methods that are not overridden in this class.
*/
- void bookmarkModelChanged();
-
- /**
- * Called when the native side of bookmark is loaded and now in usable state.
- */
- void bookmarkModelLoaded();
+ public abstract void bookmarkModelChangedNotDuringExtensiveChange();
}
/**
@@ -372,57 +397,66 @@ public class BookmarksBridge {
@CalledByNative
private void bookmarkNodeMoved(
BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, int newIndex) {
- for (BookmarkModelObserver observer : mObservers) {
- observer.bookmarkNodeMoved(oldParent, oldIndex, newParent, newIndex);
+ 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.
+ for (BookmarkModelObserver observer : mObservers) {
+ observer.bookmarkNodeMovedNotDuringExtensiveChange(oldParent, oldIndex, newParent,
+ newIndex);
+ }
}
}
@CalledByNative
private void bookmarkNodeAdded(BookmarkItem parent, int index) {
- for (BookmarkModelObserver observer : mObservers) {
- observer.bookmarkNodeAdded(parent, index);
+ if (!mExtensiveBookmarkChangesHappening) {
+ for (BookmarkModelObserver observer : mObservers) {
+ observer.bookmarkNodeAddedNotDuringExtensiveChange(parent, index);
+ }
}
}
@CalledByNative
private void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node) {
for (BookmarkModelObserver observer : mObservers) {
- observer.bookmarkNodeRemoved(parent, oldIndex, node);
+ observer.bookmarkNodeRemoved(parent, oldIndex, node,
+ mExtensiveBookmarkChangesHappening);
}
}
@CalledByNative
private void bookmarkNodeChanged(BookmarkItem node) {
- for (BookmarkModelObserver observer : mObservers) {
- observer.bookmarkNodeChanged(node);
+ if (!mExtensiveBookmarkChangesHappening) {
+ for (BookmarkModelObserver observer : mObservers) {
+ observer.bookmarkNodeChangedNotDuringExtensiveChange(node);
+ }
}
}
@CalledByNative
private void bookmarkNodeChildrenReordered(BookmarkItem node) {
- for (BookmarkModelObserver observer : mObservers) {
- observer.bookmarkNodeChildrenReordered(node);
+ if (!mExtensiveBookmarkChangesHappening) {
+ for (BookmarkModelObserver observer : mObservers) {
+ observer.bookmarkNodeChildrenReorderedNotDuringExtensiveChange(node);
+ }
}
}
@CalledByNative
private void extensiveBookmarkChangesBeginning() {
- for (BookmarkModelObserver observer : mObservers) {
- observer.extensiveBookmarkChangesBeginning();
- }
+ mExtensiveBookmarkChangesHappening = true;
}
@CalledByNative
private void extensiveBookmarkChangesEnded() {
- for (BookmarkModelObserver observer : mObservers) {
- observer.extensiveBookmarkChangesEnded();
- }
+ mExtensiveBookmarkChangesHappening = false;
+ bookmarkModelChanged();
}
@CalledByNative
private void bookmarkModelChanged() {
- for (BookmarkModelObserver observer : mObservers) {
- observer.bookmarkModelChanged();
+ if (!mExtensiveBookmarkChangesHappening) {
+ for (BookmarkModelObserver observer : mObservers) {
+ observer.bookmarkModelChangedNotDuringExtensiveChange();
+ }
}
}
« 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