#479 Fix duplicate results

This commit is contained in:
Carmelo Messina
2023-10-29 18:01:49 +01:00
parent 433b244558
commit 1eb5e65b79
@@ -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);