#479 Fix duplicate results
This commit is contained in:
@@ -4,30 +4,29 @@ Subject: Add menu item to bookmark all tabs
|
||||
|
||||
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
|
||||
---
|
||||
chrome/android/java/res/menu/main_menu.xml | 7 +++
|
||||
.../chrome/browser/ChromeTabbedActivity.java | 24 ++++++++
|
||||
.../browser/bookmarks/BookmarkBridge.java | 61 +++++++++++++++++++
|
||||
.../browser/bookmarks/BookmarkUtils.java | 4 ++
|
||||
.../bookmarks/android/bookmark_bridge.cc | 16 +++++
|
||||
.../bookmarks/android/bookmark_bridge.h | 4 ++
|
||||
chrome/android/java/res/menu/main_menu.xml | 7 ++
|
||||
.../chrome/browser/ChromeTabbedActivity.java | 24 +++++++
|
||||
.../browser/bookmarks/BookmarkBridge.java | 64 +++++++++++++++++++
|
||||
.../bookmarks/android/bookmark_bridge.cc | 43 +++++++++++++
|
||||
.../bookmarks/android/bookmark_bridge.h | 8 +++
|
||||
.../browser/bookmarks/bookmark_html_writer.cc | 8 ++-
|
||||
.../bookmarks/chrome_bookmark_client.cc | 2 +
|
||||
.../dialogs/DownloadLocationCustomView.java | 4 +-
|
||||
.../strings/android_chrome_strings.grd | 3 +
|
||||
components/bookmark_bar_strings.grdp | 6 ++
|
||||
.../bookmarks/browser/bookmark_codec.cc | 22 +++++--
|
||||
components/bookmarks/browser/bookmark_codec.h | 7 ++-
|
||||
components/bookmarks/browser/bookmark_codec.h | 7 +-
|
||||
.../browser/bookmark_load_details.cc | 4 ++
|
||||
.../bookmarks/browser/bookmark_load_details.h | 3 +
|
||||
.../bookmarks/browser/bookmark_model.cc | 3 +-
|
||||
components/bookmarks/browser/bookmark_model.h | 7 +++
|
||||
components/bookmarks/browser/bookmark_model.h | 7 ++
|
||||
components/bookmarks/browser/bookmark_node.cc | 11 ++++
|
||||
components/bookmarks/browser/bookmark_node.h | 4 ++
|
||||
.../bookmarks/browser/bookmark_uuids.cc | 3 +
|
||||
components/bookmarks/browser/bookmark_uuids.h | 1 +
|
||||
components/bookmarks/browser/model_loader.cc | 3 +-
|
||||
.../bookmark_specifics_conversions.cc | 1 +
|
||||
23 files changed, 198 insertions(+), 10 deletions(-)
|
||||
22 files changed, 228 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
|
||||
--- a/chrome/android/java/res/menu/main_menu.xml
|
||||
@@ -149,14 +148,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
|
||||
/**
|
||||
* @return Id representing the special "other" folder from bookmark model.
|
||||
*/
|
||||
@@ -1008,6 +1025,49 @@ class BookmarkBridge {
|
||||
@@ -1008,6 +1025,50 @@ class BookmarkBridge {
|
||||
return BookmarkBridgeJni.get().addToReadingList(mNativeBookmarkBridge, title, url);
|
||||
}
|
||||
|
||||
+ // Used to bookmark all tabs in a specific folder, created if not existing
|
||||
+ public BookmarkId addToTabsCollection(Context context, Tab tab) {
|
||||
+ BookmarkId parent = getTabsCollectionFolderId();
|
||||
+ BookmarkId existingId = getUserBookmarkIdForTab(tab);
|
||||
+ BookmarkId existingId = BookmarkBridgeJni.get().getBookmarkIdForTabsCollection(
|
||||
+ mNativeBookmarkBridge, tab.getOriginalUrl());
|
||||
+ if (existingId != null && existingId.getId() != BookmarkId.INVALID_ID) {
|
||||
+ BookmarkId existingBookmarkId = new BookmarkId(existingId.getId(), BookmarkType.NORMAL);
|
||||
+ BookmarkItem existingBookmark = getBookmarkById(existingBookmarkId);
|
||||
@@ -199,7 +199,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
|
||||
/**
|
||||
* @param url The URL of the reading list item.
|
||||
* @return The reading list item with the URL, or null if no such reading list item.
|
||||
@@ -1227,6 +1287,7 @@ class BookmarkBridge {
|
||||
@@ -1221,12 +1282,15 @@ class BookmarkBridge {
|
||||
void getImageUrlForBookmark(long nativeBookmarkBridge, GURL url, Callback<GURL> callback);
|
||||
BookmarkId getBookmarkIdForWebContents(
|
||||
long nativeBookmarkBridge, WebContents webContents, boolean onlyEditable);
|
||||
+ BookmarkId getBookmarkIdForTabsCollection(
|
||||
+ long nativeBookmarkBridge, GURL url);
|
||||
BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type);
|
||||
void getTopLevelFolderIds(long nativeBookmarkBridge, List<BookmarkId> bookmarksList);
|
||||
BookmarkId getReadingListFolder(long nativeBookmarkBridge);
|
||||
void getAllFoldersWithDepths(
|
||||
long nativeBookmarkBridge, List<BookmarkId> folderList, List<Integer> depthList);
|
||||
BookmarkId getRootFolderId(long nativeBookmarkBridge);
|
||||
@@ -207,31 +215,44 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm
|
||||
BookmarkId getMobileFolderId(long nativeBookmarkBridge);
|
||||
BookmarkId getOtherFolderId(long nativeBookmarkBridge);
|
||||
BookmarkId getDesktopFolderId(long nativeBookmarkBridge);
|
||||
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
||||
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
||||
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
|
||||
@@ -782,6 +782,7 @@ public class BookmarkUtils {
|
||||
BookmarkId rootNodeId = bookmarkModel.getRootFolderId();
|
||||
BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId();
|
||||
BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId();
|
||||
+ BookmarkId tabsCollectionNodeId = bookmarkModel.getTabsCollectionFolderId();
|
||||
BookmarkId othersNodeId = bookmarkModel.getOtherFolderId();
|
||||
|
||||
List<BookmarkId> specialFoldersIds = bookmarkModel.getTopLevelFolderIds();
|
||||
@@ -798,6 +799,9 @@ public class BookmarkUtils {
|
||||
/** Return the background color for the given {@link BookmarkType}. */
|
||||
public static @ColorInt int getIconBackground(
|
||||
Context context, BookmarkModel bookmarkModel, BookmarkItem item) {
|
||||
+ if (bookmarkModel.isFolderVisible(tabsCollectionNodeId)) {
|
||||
+ topLevelFolders.add(tabsCollectionNodeId);
|
||||
+ }
|
||||
if (isSpecialFolder(bookmarkModel, item)) {
|
||||
return SemanticColorUtils.getColorPrimaryContainer(context);
|
||||
} else {
|
||||
diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc
|
||||
--- a/chrome/browser/bookmarks/android/bookmark_bridge.cc
|
||||
+++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc
|
||||
@@ -436,6 +436,10 @@ void BookmarkBridge::GetTopLevelFolderIds(
|
||||
@@ -330,6 +330,33 @@ void BookmarkBridge::GetImageUrlForBookmark(
|
||||
base::BindOnce(&HandleImageUrlResponse, callback));
|
||||
}
|
||||
|
||||
+base::android::ScopedJavaLocalRef<jobject>
|
||||
+BookmarkBridge::GetBookmarkIdForTabsCollection(
|
||||
+ JNIEnv* env,
|
||||
+ const JavaParamRef<jobject>& url) {
|
||||
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||
+
|
||||
+ GURL gurl = *url::GURLAndroid::ToNativeGURL(env, url);
|
||||
+
|
||||
+ bookmarks::BookmarkModel* model =
|
||||
+ BookmarkModelFactory::GetForBrowserContext(profile_);
|
||||
+
|
||||
+ std::vector<const bookmarks::BookmarkNode*> nodes =
|
||||
+ model->GetNodesByURL(gurl);
|
||||
+ std::sort(nodes.begin(), nodes.end(), &bookmarks::MoreRecentlyAdded);
|
||||
+
|
||||
+ for (const auto* node : nodes) {
|
||||
+ for (const auto& child : model->tabs_collection_node()->children()) {
|
||||
+ if (node->id() == child->id()) {
|
||||
+ return JavaBookmarkIdCreateBookmarkId(env, node->id(),
|
||||
+ GetBookmarkType(node));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return nullptr;
|
||||
+}
|
||||
+
|
||||
base::android::ScopedJavaLocalRef<jobject>
|
||||
BookmarkBridge::GetBookmarkIdForWebContents(
|
||||
JNIEnv* env,
|
||||
@@ -436,6 +463,10 @@ void BookmarkBridge::GetTopLevelFolderIds(
|
||||
}
|
||||
top_level_folders.push_back(root_child.get());
|
||||
}
|
||||
@@ -242,7 +263,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
|
||||
|
||||
if (managed_bookmark_service_->managed_node() &&
|
||||
!managed_bookmark_service_->managed_node()->children().empty()) {
|
||||
@@ -479,6 +483,7 @@ void BookmarkBridge::GetAllFoldersWithDepths(
|
||||
@@ -479,6 +510,7 @@ void BookmarkBridge::GetAllFoldersWithDepths(
|
||||
// Vector to temporarily contain all child bookmarks at same level for sorting
|
||||
std::vector<const BookmarkNode*> bookmarks = {
|
||||
bookmark_model_->mobile_node(),
|
||||
@@ -250,7 +271,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
|
||||
bookmark_model_->bookmark_bar_node(),
|
||||
bookmark_model_->other_node(),
|
||||
};
|
||||
@@ -1051,6 +1056,17 @@ void BookmarkBridge::GetBookmarksOfType(
|
||||
@@ -1051,6 +1083,17 @@ void BookmarkBridge::GetBookmarksOfType(
|
||||
}
|
||||
}
|
||||
|
||||
@@ -271,7 +292,18 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse
|
||||
diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h
|
||||
--- a/chrome/browser/bookmarks/android/bookmark_bridge.h
|
||||
+++ b/chrome/browser/bookmarks/android/bookmark_bridge.h
|
||||
@@ -205,6 +205,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
|
||||
@@ -69,6 +69,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
|
||||
const base::android::JavaParamRef<jobject>& j_url,
|
||||
const base::android::JavaParamRef<jobject>& j_callback);
|
||||
|
||||
+ base::android::ScopedJavaLocalRef<jobject> GetBookmarkIdForTabsCollection(
|
||||
+ JNIEnv* env,
|
||||
+ const base::android::JavaParamRef<jobject>& url);
|
||||
+
|
||||
base::android::ScopedJavaLocalRef<jobject> GetBookmarkIdForWebContents(
|
||||
JNIEnv* env,
|
||||
|
||||
@@ -205,6 +209,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver,
|
||||
const base::android::JavaParamRef<jobject>& j_list,
|
||||
jint type);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user