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

Side by Side 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 unified diff | Download patch
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 #include "chrome/browser/android/bookmarks/bookmarks_bridge.h" 5 #include "chrome/browser/android/bookmarks/bookmarks_bridge.h"
6 6
7 #include "base/android/jni_string.h" 7 #include "base/android/jni_string.h"
8 #include "base/containers/stack_container.h" 8 #include "base/containers/stack_container.h"
9 #include "base/i18n/string_compare.h" 9 #include "base/i18n/string_compare.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 238
239 for (std::vector<const BookmarkNode*>::const_iterator it = 239 for (std::vector<const BookmarkNode*>::const_iterator it =
240 top_level_folders.begin(); it != top_level_folders.end(); ++it) { 240 top_level_folders.begin(); it != top_level_folders.end(); ++it) {
241 Java_BookmarksBridge_addToBookmarkIdList(env, 241 Java_BookmarksBridge_addToBookmarkIdList(env,
242 j_result_obj, 242 j_result_obj,
243 (*it)->id(), 243 (*it)->id(),
244 GetBookmarkType(*it)); 244 GetBookmarkType(*it));
245 } 245 }
246 } 246 }
247 247
248 void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env,
249 jobject obj,
250 jobject j_folder_obj,
251 jobject j_depth_obj) {
252 DCHECK(IsLoaded());
253
254 const BookmarkNode* desktop = bookmark_model_->bookmark_bar_node();
255 const BookmarkNode* mobile = bookmark_model_->mobile_node();
256 const BookmarkNode* other = bookmark_model_->other_node();
257
258 scoped_ptr<icu::Collator> collator = GetICUCollator();
259
260 // Vector to temporarily contain all child bookmarks at same level for sorting
261 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.
262 // Stack for Depth-First Search of bookmark model. It stores nodes and their
263 // heights.
264 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
265
266 for (int i = 0; i < mobile->child_count(); ++i) {
267 vct.push_back(mobile->GetChild(i));
268 }
269 for (int i = 0; i < other->child_count(); ++i) {
270 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.
271 }
272 vct.push_back(desktop);
273 std::stable_sort(
274 vct.begin(), vct.end(), BookmarkTitleComparer(collator.get()));
275
276 // Push all sorted top folders in stack and give them depth of 0.
277 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
278 it != vct.rend();
279 ++it) {
280 stk.push(std::make_pair(*it, 0));
281 }
282
283 while (!stk.empty()) {
284 const BookmarkNode* node = stk.top().first;
285 int depth = stk.top().second;
286 stk.pop();
287 if (!node->is_folder() || !client_->CanBeEditedByUser(node))
288 continue;
289 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env,
290 j_folder_obj,
291 node->id(),
292 GetBookmarkType(node),
293 j_depth_obj,
294 depth);
295 vct.clear();
296 for (int i = 0; i < node->child_count(); ++i) {
297 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.
298 }
299 std::stable_sort(
300 vct.begin(), vct.end(), BookmarkTitleComparer(collator.get()));
301 for (std::vector<const BookmarkNode*>::reverse_iterator it = vct.rbegin();
302 it != vct.rend();
303 ++it) {
304 stk.push(std::make_pair(*it, depth + 1));
305 }
306 }
307 }
308
309 ScopedJavaLocalRef<jobject> BookmarksBridge::GetMobileFolderId(JNIEnv* env,
310 jobject obj) {
311 const BookmarkNode* mobileNode = bookmark_model_->mobile_node();
312 ScopedJavaLocalRef<jobject> folder_id_obj =
313 Java_BookmarksBridge_createBookmarkId(
314 env, mobileNode->id(), GetBookmarkType(mobileNode));
315 return folder_id_obj;
316 }
317
248 void BookmarksBridge::GetChildIDs(JNIEnv* env, 318 void BookmarksBridge::GetChildIDs(JNIEnv* env,
249 jobject obj, 319 jobject obj,
250 jlong id, 320 jlong id,
251 jint type, 321 jint type,
252 jboolean get_folders, 322 jboolean get_folders,
253 jboolean get_bookmarks, 323 jboolean get_bookmarks,
254 jobject j_result_obj) { 324 jobject j_result_obj) {
255 DCHECK(IsLoaded()); 325 DCHECK(IsLoaded());
256 326
257 const BookmarkNode* parent = GetNodeByID(id, type); 327 const BookmarkNode* parent = GetNodeByID(id, type);
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 BookmarkModelChanged(); 823 BookmarkModelChanged();
754 } 824 }
755 825
756 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { 826 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) {
757 NotifyIfDoneLoading(); 827 NotifyIfDoneLoading();
758 } 828 }
759 829
760 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { 830 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) {
761 partner_bookmarks_shim_ = NULL; 831 partner_bookmarks_shim_ = NULL;
762 } 832 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698