OLD | NEW |
---|---|
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 Loading... | |
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()); | 238 const BookmarkNode* bookmark_bar_node = |
239 bookmark_model_->bookmark_bar_node(); | |
240 for (int i = 0; i < bookmark_bar_node->child_count(); ++i) { | |
241 const BookmarkNode* node = bookmark_bar_node->GetChild(i); | |
242 if (node->is_folder()) { | |
243 top_level_folders.push_back(node); | |
244 } | |
245 } | |
245 | 246 |
246 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); | 247 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); |
247 for (int i = 0; i < mobile_node->child_count(); ++i) { | 248 for (int i = 0; i < mobile_node->child_count(); ++i) { |
248 const BookmarkNode* node = mobile_node->GetChild(i); | 249 const BookmarkNode* node = mobile_node->GetChild(i); |
249 if (node->is_folder()) { | 250 if (node->is_folder()) { |
250 top_level_folders.push_back(node); | 251 top_level_folders.push_back(node); |
251 } | 252 } |
252 } | 253 } |
253 | 254 |
254 const BookmarkNode* other_node = bookmark_model_->other_node(); | 255 const BookmarkNode* other_node = bookmark_model_->other_node(); |
(...skipping 12 matching lines...) Expand all Loading... | |
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_->bookmark_bar_node()); |
Ian Wen
2015/01/28 19:57:08
I wouldn't add them among other second-tier folder
Kibeom Kim (inactive)
2015/01/28 20:01:57
Only these three nodes will be the top level. Seco
| |
322 const BookmarkNode* child = mobile->GetChild(i); | 294 bookmarkList.push_back(bookmark_model_->mobile_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 Loading... | |
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 } |
OLD | NEW |