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

Side by Side Diff: chrome/browser/android/bookmarks/bookmarks_bridge.cc

Issue 869193008: [Android] Change enhanced bookmark top level definitions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updated tests Created 5 years, 10 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 | « chrome/browser/android/bookmarks/bookmarks_bridge.h ('k') | 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 #include "chrome/browser/android/bookmarks/bookmarks_bridge.h" 5 #include "chrome/browser/android/bookmarks/bookmarks_bridge.h"
6 6
7 #include "base/android/jni_array.h" 7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/containers/stack_container.h" 9 #include "base/containers/stack_container.h"
10 #include "base/i18n/string_compare.h" 10 #include "base/i18n/string_compare.h"
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 } 203 }
204 } 204 }
205 } 205 }
206 206
207 void BookmarksBridge::GetTopLevelFolderParentIDs(JNIEnv* env, 207 void BookmarksBridge::GetTopLevelFolderParentIDs(JNIEnv* env,
208 jobject obj, 208 jobject obj,
209 jobject j_result_obj) { 209 jobject j_result_obj) {
210 Java_BookmarksBridge_addToBookmarkIdList( 210 Java_BookmarksBridge_addToBookmarkIdList(
211 env, j_result_obj, bookmark_model_->root_node()->id(), 211 env, j_result_obj, bookmark_model_->root_node()->id(),
212 GetBookmarkType(bookmark_model_->root_node())); 212 GetBookmarkType(bookmark_model_->root_node()));
213 Java_BookmarksBridge_addToBookmarkIdList(
214 env, j_result_obj, bookmark_model_->mobile_node()->id(),
215 GetBookmarkType(bookmark_model_->mobile_node()));
216 Java_BookmarksBridge_addToBookmarkIdList(
217 env, j_result_obj, bookmark_model_->other_node()->id(),
218 GetBookmarkType(bookmark_model_->other_node()));
219 } 213 }
220 214
221 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env, 215 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env,
222 jobject obj, 216 jobject obj,
223 jboolean get_special, 217 jboolean get_special,
224 jboolean get_normal, 218 jboolean get_normal,
225 jobject j_result_obj) { 219 jobject j_result_obj) {
226 DCHECK(IsLoaded()); 220 DCHECK(IsLoaded());
227 std::vector<const BookmarkNode*> top_level_folders; 221 std::vector<const BookmarkNode*> top_level_folders;
228 222
229 if (get_special) { 223 if (get_special) {
230 if (client_->managed_node() && 224 if (client_->managed_node() &&
231 client_->managed_node()->child_count() > 0) { 225 client_->managed_node()->child_count() > 0) {
232 top_level_folders.push_back(client_->managed_node()); 226 top_level_folders.push_back(client_->managed_node());
233 } 227 }
234 if (partner_bookmarks_shim_->HasPartnerBookmarks()) { 228 if (partner_bookmarks_shim_->HasPartnerBookmarks()) {
235 top_level_folders.push_back( 229 top_level_folders.push_back(
236 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); 230 partner_bookmarks_shim_->GetPartnerBookmarksRoot());
237 } 231 }
238 } 232 }
239 std::size_t special_count = top_level_folders.size(); 233 std::size_t special_count = top_level_folders.size();
240 234
241 if (get_normal) { 235 if (get_normal) {
242 DCHECK_EQ(bookmark_model_->root_node()->child_count(), 4); 236 DCHECK_EQ(bookmark_model_->root_node()->child_count(), 4);
243 237
244 top_level_folders.push_back(bookmark_model_->bookmark_bar_node());
245
246 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); 238 const BookmarkNode* mobile_node = bookmark_model_->mobile_node();
247 for (int i = 0; i < mobile_node->child_count(); ++i) { 239 for (int i = 0; i < mobile_node->child_count(); ++i) {
248 const BookmarkNode* node = mobile_node->GetChild(i); 240 const BookmarkNode* node = mobile_node->GetChild(i);
249 if (node->is_folder()) { 241 if (node->is_folder()) {
250 top_level_folders.push_back(node); 242 top_level_folders.push_back(node);
251 } 243 }
252 } 244 }
253 245
246 const BookmarkNode* bookmark_bar_node =
247 bookmark_model_->bookmark_bar_node();
248 for (int i = 0; i < bookmark_bar_node->child_count(); ++i) {
249 const BookmarkNode* node = bookmark_bar_node->GetChild(i);
250 if (node->is_folder()) {
251 top_level_folders.push_back(node);
252 }
253 }
254
254 const BookmarkNode* other_node = bookmark_model_->other_node(); 255 const BookmarkNode* other_node = bookmark_model_->other_node();
255 for (int i = 0; i < other_node->child_count(); ++i) { 256 for (int i = 0; i < other_node->child_count(); ++i) {
256 const BookmarkNode* node = other_node->GetChild(i); 257 const BookmarkNode* node = other_node->GetChild(i);
257 if (node->is_folder()) { 258 if (node->is_folder()) {
258 top_level_folders.push_back(node); 259 top_level_folders.push_back(node);
259 } 260 }
260 } 261 }
261 262
262 scoped_ptr<icu::Collator> collator = GetICUCollator(); 263 scoped_ptr<icu::Collator> collator = GetICUCollator();
263 std::stable_sort(top_level_folders.begin() + special_count, 264 std::stable_sort(top_level_folders.begin() + special_count,
264 top_level_folders.end(), 265 top_level_folders.end(),
265 BookmarkTitleComparer(this, collator.get())); 266 BookmarkTitleComparer(this, collator.get()));
266 } 267 }
267 268
268 for (std::vector<const BookmarkNode*>::const_iterator it = 269 for (std::vector<const BookmarkNode*>::const_iterator it =
269 top_level_folders.begin(); it != top_level_folders.end(); ++it) { 270 top_level_folders.begin(); it != top_level_folders.end(); ++it) {
270 Java_BookmarksBridge_addToBookmarkIdList(env, 271 Java_BookmarksBridge_addToBookmarkIdList(env,
271 j_result_obj, 272 j_result_obj,
272 (*it)->id(), 273 (*it)->id(),
273 GetBookmarkType(*it)); 274 GetBookmarkType(*it));
274 } 275 }
275 } 276 }
276 277
277 void BookmarksBridge::GetUncategorizedBookmarkIDs(JNIEnv* env,
278 jobject obj,
279 jobject j_result_obj) {
280 const BookmarkNode* mobile_node = bookmark_model_->mobile_node();
281 for (int i = 0; i < mobile_node->child_count(); ++i) {
282 const BookmarkNode* node = mobile_node->GetChild(i);
283 if (!node->is_folder()) {
284 Java_BookmarksBridge_addToBookmarkIdList(env,
285 j_result_obj,
286 node->id(),
287 GetBookmarkType(node));
288 }
289 }
290
291 const BookmarkNode* other_node = bookmark_model_->other_node();
292 for (int i = 0; i < other_node->child_count(); ++i) {
293 const BookmarkNode* node = other_node->GetChild(i);
294 if (!node->is_folder()) {
295 Java_BookmarksBridge_addToBookmarkIdList(env,
296 j_result_obj,
297 node->id(),
298 GetBookmarkType(node));
299 }
300 }
301 }
302
303 void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env, 278 void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env,
304 jobject obj, 279 jobject obj,
305 jobject j_folders_obj, 280 jobject j_folders_obj,
306 jobject j_depths_obj) { 281 jobject j_depths_obj) {
307 DCHECK(IsLoaded()); 282 DCHECK(IsLoaded());
308 283
309 const BookmarkNode* desktop = bookmark_model_->bookmark_bar_node();
310 const BookmarkNode* mobile = bookmark_model_->mobile_node();
311 const BookmarkNode* other = bookmark_model_->other_node();
312
313 scoped_ptr<icu::Collator> collator = GetICUCollator(); 284 scoped_ptr<icu::Collator> collator = GetICUCollator();
314 285
315 // Vector to temporarily contain all child bookmarks at same level for sorting 286 // Vector to temporarily contain all child bookmarks at same level for sorting
316 std::vector<const BookmarkNode*> bookmarkList; 287 std::vector<const BookmarkNode*> bookmarkList;
288
317 // Stack for Depth-First Search of bookmark model. It stores nodes and their 289 // Stack for Depth-First Search of bookmark model. It stores nodes and their
318 // heights. 290 // heights.
319 std::stack<std::pair<const BookmarkNode*, int> > stk; 291 std::stack<std::pair<const BookmarkNode*, int> > stk;
320 292
321 for (int i = 0; i < mobile->child_count(); ++i) { 293 bookmarkList.push_back(bookmark_model_->mobile_node());
322 const BookmarkNode* child = mobile->GetChild(i); 294 bookmarkList.push_back(bookmark_model_->bookmark_bar_node());
323 if (child->is_folder() && client_->CanBeEditedByUser(child)) 295 bookmarkList.push_back(bookmark_model_->other_node());
324 bookmarkList.push_back(child);
325 }
326 for (int i = 0; i < other->child_count(); ++i) {
327 const BookmarkNode* child = other->GetChild(i);
328 if (child->is_folder() && client_->CanBeEditedByUser(child))
329 bookmarkList.push_back(child);
330 }
331 bookmarkList.push_back(desktop);
332 std::stable_sort(bookmarkList.begin(),
333 bookmarkList.end(),
334 BookmarkTitleComparer(this, collator.get()));
335 296
336 // Push all sorted top folders in stack and give them depth of 0. 297 // Push all sorted top folders in stack and give them depth of 0.
337 // Note the order to push folders to stack should be opposite to the order in 298 // Note the order to push folders to stack should be opposite to the order in
338 // output. 299 // output.
339 for (std::vector<const BookmarkNode*>::reverse_iterator it = 300 for (std::vector<const BookmarkNode*>::reverse_iterator it =
340 bookmarkList.rbegin(); 301 bookmarkList.rbegin();
341 it != bookmarkList.rend(); 302 it != bookmarkList.rend();
342 ++it) { 303 ++it) {
343 stk.push(std::make_pair(*it, 0)); 304 stk.push(std::make_pair(*it, 0));
344 } 305 }
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 BookmarkModelChanged(); 1011 BookmarkModelChanged();
1051 } 1012 }
1052 1013
1053 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { 1014 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) {
1054 NotifyIfDoneLoading(); 1015 NotifyIfDoneLoading();
1055 } 1016 }
1056 1017
1057 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { 1018 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) {
1058 partner_bookmarks_shim_ = NULL; 1019 partner_bookmarks_shim_ = NULL;
1059 } 1020 }
OLDNEW
« no previous file with comments | « chrome/browser/android/bookmarks/bookmarks_bridge.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698