Notes: add profile pref storing the sort order for notes ui in side panel.
Bug: 1394044
Change-Id: Ia7dda2c5deb193a894b4e579640c32e226c25335
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4246680
Commit-Queue: Caroline Rising <[email protected]>
Reviewed-by: Yuheng Huang <[email protected]>
Reviewed-by: Ken Buchanan <[email protected]>
Reviewed-by: Gabriel Charette <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1108316}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index ab1c802..e0d02c7 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4435,6 +4435,7 @@
"//components/soda:constants",
"//components/ukm/content",
"//components/user_notes:features",
+ "//components/user_notes:user_notes_prefs",
"//components/user_notes/browser",
"//components/user_notes/interfaces",
"//components/user_notes/storage",
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 91c260e..f13774f 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -283,6 +283,7 @@
#include "components/live_caption/live_caption_controller.h"
#include "components/live_caption/live_translate_controller.h"
#include "components/ntp_tiles/custom_links_manager_impl.h"
+#include "components/user_notes/user_notes_prefs.h"
#endif // BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS)
@@ -1486,6 +1487,7 @@
UnifiedAutoplayConfig::RegisterProfilePrefs(registry);
CartService::RegisterProfilePrefs(registry);
commerce::ShoppingListUiTabHelper::RegisterProfilePrefs(registry);
+ user_notes::RegisterProfilePrefs(registry);
#if !BUILDFLAG(IS_CHROMEOS_LACROS)
captions::LiveCaptionController::RegisterProfilePrefs(registry);
#endif // !BUILDFLAG(IS_CHROMEOS_LACROS)
diff --git a/chrome/browser/resources/side_panel/user_notes/user_notes_api_proxy.ts b/chrome/browser/resources/side_panel/user_notes/user_notes_api_proxy.ts
index 2477804..da91ab83 100644
--- a/chrome/browser/resources/side_panel/user_notes/user_notes_api_proxy.ts
+++ b/chrome/browser/resources/side_panel/user_notes/user_notes_api_proxy.ts
@@ -17,6 +17,7 @@
updateNote(guid: string, text: string): Promise<{success: boolean}>;
deleteNote(guid: string): Promise<{success: boolean}>;
noteOverviewSelected(url: Url, clickModifiers: ClickModifiers): void;
+ setSortOrder(sortByNewest: boolean): void;
getCallbackRouter(): UserNotesPageCallbackRouter;
}
@@ -61,6 +62,10 @@
this.handler.noteOverviewSelected(url, clickModifiers);
}
+ setSortOrder(sortByNewest: boolean) {
+ this.handler.setSortOrder(sortByNewest);
+ }
+
getCallbackRouter() {
return this.callbackRouter;
}
diff --git a/chrome/browser/resources/side_panel/user_notes/user_notes_list.ts b/chrome/browser/resources/side_panel/user_notes/user_notes_list.ts
index 11b58ea..efef10a9 100644
--- a/chrome/browser/resources/side_panel/user_notes/user_notes_list.ts
+++ b/chrome/browser/resources/side_panel/user_notes/user_notes_list.ts
@@ -12,6 +12,7 @@
import {CrActionMenuElement} from '//resources/cr_elements/cr_action_menu/cr_action_menu.js';
import {loadTimeData} from '//resources/js/load_time_data.js';
+import {assert} from 'chrome://resources/js/assert_ts.js';
import {DomRepeat, DomRepeatEvent, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {Note} from './user_notes.mojom-webui.js';
@@ -44,7 +45,9 @@
activeSortIndex_: {
type: Number,
observer: 'onActiveSortIndexChanged_',
- value: 1,
+ value: function() {
+ return loadTimeData.getBoolean('sortByNewest') ? 0 : 1;
+ },
},
sortTypes_: {
@@ -61,7 +64,28 @@
private sortTypes_: string[];
private userNotesApi_: UserNotesApiProxy =
UserNotesApiProxyImpl.getInstance();
- private listenerIds_: number[] = [];
+ private listenerId_: number|null = null;
+
+ override connectedCallback() {
+ super.connectedCallback();
+
+ const callbackRouter = this.userNotesApi_.getCallbackRouter();
+ this.listenerId_ = callbackRouter.sortByNewestPrefChanged.addListener(
+ (sortByNewest: boolean) => {
+ const sortIndex = sortByNewest ? 0 : 1;
+ if (this.activeSortIndex_ !== sortIndex) {
+ this.activeSortIndex_ = sortIndex;
+ }
+ });
+ }
+
+ override disconnectedCallback() {
+ super.disconnectedCallback();
+
+ assert(this.listenerId_);
+ this.userNotesApi_.getCallbackRouter().removeListener(this.listenerId_);
+ this.listenerId_ = null;
+ }
private onAllNotesClick_(event: MouseEvent) {
event.preventDefault();
@@ -94,7 +118,8 @@
event.preventDefault();
event.stopPropagation();
this.$.sortMenu.close();
- this.activeSortIndex_ = event.model.index;
+ const sortByNewest = event.model.index === 0;
+ this.userNotesApi_.setSortOrder(sortByNewest);
}
private onActiveSortIndexChanged_() {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 5b25ed8..4f26009 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -1854,6 +1854,7 @@
"//components/user_education/common",
"//components/user_education/webui",
"//components/user_notes:features",
+ "//components/user_notes:user_notes_prefs",
"//components/vector_icons",
"//components/web_modal",
"//components/webauthn/content/browser",
diff --git a/chrome/browser/ui/webui/side_panel/user_notes/user_notes.mojom b/chrome/browser/ui/webui/side_panel/user_notes/user_notes.mojom
index 86ea1b1d..0ce461a8 100644
--- a/chrome/browser/ui/webui/side_panel/user_notes/user_notes.mojom
+++ b/chrome/browser/ui/webui/side_panel/user_notes/user_notes.mojom
@@ -83,6 +83,10 @@
// should be shown.
NoteOverviewSelected(url.mojom.Url url,
ui.mojom.ClickModifiers click_modifiers);
+
+ // Called when the sort option has been updated and the profile pref should be
+ // updated.
+ SetSortOrder(bool sort_by_newest);
};
// WebUI-side handler for requests from the browser.
@@ -98,4 +102,8 @@
// This could be triggered by either switching tab or navigating to
// a new URL.
CurrentTabUrlChanged();
+
+ // Called when the kUserNotesSortByNewest pref has changed so that the UI can
+ // match this sort order if it doesn't already.
+ SortByNewestPrefChanged(bool sort_by_newest);
};
diff --git a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.cc b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.cc
index 88706cf2..f2629dc0 100644
--- a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.cc
+++ b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.cc
@@ -17,7 +17,9 @@
#include "components/power_bookmarks/common/power.h"
#include "components/power_bookmarks/common/power_overview.h"
#include "components/power_bookmarks/core/power_bookmark_service.h"
+#include "components/prefs/pref_service.h"
#include "components/sync/protocol/power_bookmark_specifics.pb.h"
+#include "components/user_notes/user_notes_prefs.h"
#include "ui/base/l10n/time_format.h"
#include "ui/base/mojom/window_open_disposition.mojom.h"
#include "ui/base/window_open_disposition.h"
@@ -105,6 +107,11 @@
service_(PowerBookmarkServiceFactory::GetForBrowserContext(profile_)),
browser_(browser),
user_notes_ui_(user_notes_ui) {
+ pref_change_registrar_.Init(profile_->GetPrefs());
+ pref_change_registrar_.Add(
+ prefs::kUserNotesSortByNewest,
+ base::BindRepeating(&UserNotesPageHandler::OnSortByNewestPrefChanged,
+ base::Unretained(this)));
service_->AddObserver(this);
DCHECK(browser_);
browser_->tab_strip_model()->AddObserver(this);
@@ -222,6 +229,22 @@
browser_->OpenURL(params);
}
+void UserNotesPageHandler::SetSortOrder(bool sort_by_newest) {
+ PrefService* pref_service = profile_->GetPrefs();
+ if (pref_service && pref_service->GetBoolean(prefs::kUserNotesSortByNewest) !=
+ sort_by_newest) {
+ pref_service->SetBoolean(prefs::kUserNotesSortByNewest, sort_by_newest);
+ }
+}
+
+void UserNotesPageHandler::OnSortByNewestPrefChanged() {
+ PrefService* pref_service = profile_->GetPrefs();
+ if (pref_service) {
+ page_->SortByNewestPrefChanged(
+ pref_service->GetBoolean(prefs::kUserNotesSortByNewest));
+ }
+}
+
void UserNotesPageHandler::OnPowersChanged() {
page_->NotesChanged();
}
diff --git a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.h b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.h
index d39b0c2..13c38f2 100644
--- a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.h
+++ b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler.h
@@ -10,6 +10,7 @@
#include "chrome/browser/ui/webui/side_panel/user_notes/user_notes.mojom.h"
#include "components/power_bookmarks/common/power_bookmark_observer.h"
#include "components/power_bookmarks/core/power_bookmark_service.h"
+#include "components/prefs/pref_change_registrar.h"
#include "content/public/browser/web_contents_observer.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
@@ -55,6 +56,9 @@
void NoteOverviewSelected(
const ::GURL& url,
ui::mojom::ClickModifiersPtr click_modifiers) override;
+ void SetSortOrder(bool sort_by_newest) override;
+
+ void OnSortByNewestPrefChanged();
void SetCurrentTabUrlForTesting(GURL url) { current_tab_url_ = url; }
@@ -78,6 +82,7 @@
mojo::Receiver<side_panel::mojom::UserNotesPageHandler> receiver_;
mojo::Remote<side_panel::mojom::UserNotesPage> page_;
const raw_ptr<Profile> profile_;
+ PrefChangeRegistrar pref_change_registrar_;
const raw_ptr<power_bookmarks::PowerBookmarkService> service_;
const raw_ptr<Browser> browser_;
raw_ptr<UserNotesSidePanelUI> user_notes_ui_ = nullptr;
diff --git a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler_unittest.cc b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler_unittest.cc
index c33905839..465b21a3 100644
--- a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler_unittest.cc
+++ b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_page_handler_unittest.cc
@@ -44,6 +44,7 @@
MOCK_METHOD0(NotesChanged, void());
MOCK_METHOD0(CurrentTabUrlChanged, void());
+ MOCK_METHOD1(SortByNewestPrefChanged, void(bool));
};
struct Note {
diff --git a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_side_panel_ui.cc b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_side_panel_ui.cc
index 6b8a4405..099d232 100644
--- a/chrome/browser/ui/webui/side_panel/user_notes/user_notes_side_panel_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/user_notes/user_notes_side_panel_ui.cc
@@ -17,7 +17,9 @@
#include "chrome/grit/side_panel_shared_resources_map.h"
#include "chrome/grit/side_panel_user_notes_resources.h"
#include "chrome/grit/side_panel_user_notes_resources_map.h"
+#include "components/prefs/pref_service.h"
#include "components/strings/grit/components_strings.h"
+#include "components/user_notes/user_notes_prefs.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui_data_source.h"
#include "ui/base/ui_base_features.h"
@@ -45,6 +47,13 @@
webui::AddLocalizedString(source, str.name, str.id);
}
+ Profile* const profile = Profile::FromWebUI(web_ui);
+ PrefService* pref_service = profile->GetPrefs();
+ if (pref_service) {
+ source->AddBoolean("sortByNewest",
+ pref_service->GetBoolean(prefs::kUserNotesSortByNewest));
+ }
+
source->AddString(
"chromeRefresh2023Attribute",
features::IsChromeRefresh2023() ? "chrome-refresh-2023" : "");