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

Unified Diff: chrome/browser/android/bookmarks/bookmarks_bridge.cc

Issue 506353003: [Enhanced Bookmark] Add GetAllFoldersWithDepth in bookmark bridge (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: changed some details. added more comments. 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
Index: chrome/browser/android/bookmarks/bookmarks_bridge.cc
diff --git a/chrome/browser/android/bookmarks/bookmarks_bridge.cc b/chrome/browser/android/bookmarks/bookmarks_bridge.cc
index 71f1c2795801484c3de8722062d2f81855786407..9646aa1fdcdd7063b1d66a7b125a12a8ab5769a6 100644
--- a/chrome/browser/android/bookmarks/bookmarks_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmarks_bridge.cc
@@ -245,6 +245,76 @@ void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env,
}
}
+void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env,
+ jobject obj,
+ jobject j_folder_obj,
+ jobject j_depth_obj) {
+ DCHECK(IsLoaded());
+
+ const BookmarkNode* desktop = bookmark_model_->bookmark_bar_node();
+ const BookmarkNode* mobile = bookmark_model_->mobile_node();
+ const BookmarkNode* other = bookmark_model_->other_node();
+
+ scoped_ptr<icu::Collator> collator = GetICUCollator();
+
+ // Vector to temporarily contain all child bookmarks at same level for sorting
+ std::vector<const BookmarkNode*> vct;
Yaron 2014/09/05 03:30:58 nit: prefer meaningful names over abbreviated name
Ian Wen 2014/09/05 21:17:32 Done.
+ // Stack for Depth-First Search of bookmark model. It stores nodes and their
+ // heights.
+ std::stack<std::pair<const BookmarkNode*, int> > stk;
Yaron 2014/09/05 03:30:59 stack/bookmarkDepth?
Ian Wen 2014/09/05 21:17:32 Stack is the symbolic sign of depth first traversa
+
+ for (int i = 0; i < mobile->child_count(); ++i) {
+ vct.push_back(mobile->GetChild(i));
+ }
+ for (int i = 0; i < other->child_count(); ++i) {
+ vct.push_back(other->GetChild(i));
Yaron 2014/09/05 03:30:59 as new bookmarks by default are added to "other" a
Ian Wen 2014/09/05 21:17:32 Done.
+ }
+ vct.push_back(desktop);
+ std::stable_sort(
+ vct.begin(), vct.end(), BookmarkTitleComparer(collator.get()));
+
+ // Push all sorted top folders in stack and give them depth of 0.
+ for (std::vector<const BookmarkNode*>::reverse_iterator it = vct.rbegin();
Yaron 2014/09/05 03:30:58 why reverse_iterator? also, why not use const_iter
Ian Wen 2014/09/05 21:17:32 Changed to const_reverse_iterator. In vector, fol
+ it != vct.rend();
+ ++it) {
+ stk.push(std::make_pair(*it, 0));
+ }
+
+ while (!stk.empty()) {
+ const BookmarkNode* node = stk.top().first;
+ int depth = stk.top().second;
+ stk.pop();
+ if (!node->is_folder() || !client_->CanBeEditedByUser(node))
+ continue;
+ Java_BookmarksBridge_addToBookmarkIdListWithDepth(env,
+ j_folder_obj,
+ node->id(),
+ GetBookmarkType(node),
+ j_depth_obj,
+ depth);
+ vct.clear();
+ for (int i = 0; i < node->child_count(); ++i) {
+ vct.push_back(node->GetChild(i));
Yaron 2014/09/05 03:30:59 same comment about effeciency
Ian Wen 2014/09/05 21:17:32 Done.
+ }
+ std::stable_sort(
+ vct.begin(), vct.end(), BookmarkTitleComparer(collator.get()));
+ for (std::vector<const BookmarkNode*>::reverse_iterator it = vct.rbegin();
+ it != vct.rend();
+ ++it) {
+ stk.push(std::make_pair(*it, depth + 1));
+ }
+ }
+}
+
+ScopedJavaLocalRef<jobject> BookmarksBridge::GetMobileFolderId(JNIEnv* env,
+ jobject obj) {
+ const BookmarkNode* mobileNode = bookmark_model_->mobile_node();
+ ScopedJavaLocalRef<jobject> folder_id_obj =
+ Java_BookmarksBridge_createBookmarkId(
+ env, mobileNode->id(), GetBookmarkType(mobileNode));
+ return folder_id_obj;
+}
+
void BookmarksBridge::GetChildIDs(JNIEnv* env,
jobject obj,
jlong id,

Powered by Google App Engine
This is Rietveld 408576698