Commit e19103c7 authored by Kyle Horimoto's avatar Kyle Horimoto Committed by Commit Bot

[CrOS Search] Add new search directory with SettingsUserAction class.

This CL introduces Mojo enums for settings section names and page
visibility as well as a SettingsUserAction class and several derived
classes which encapsulate user actions in settings.

Bug: 1047062
Change-Id: I04d1648ade1f8b25dc83c2f32805a22bd4c23458
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2030000Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Commit-Queue: Kyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737458}
parent fa8ab985
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
cr.define('settings', function() { cr.define('settings', function() {
/** /**
* Creates Route objects for each path corresponding to CrOS settings content. * Creates Route objects for each path corresponding to CrOS settings content.
* Note that if any new routes are added here, they should also be added to
* //chrome/browser/ui/webui/settings/chromeos/search/search.mojom.
* @return {!SettingsRoutes} * @return {!SettingsRoutes}
*/ */
function createOSSettingsRoutes() { function createOSSettingsRoutes() {
......
...@@ -1981,6 +1981,8 @@ jumbo_static_library("ui") { ...@@ -1981,6 +1981,8 @@ jumbo_static_library("ui") {
"webui/settings/chromeos/plugin_vm_handler.h", "webui/settings/chromeos/plugin_vm_handler.h",
"webui/settings/chromeos/pref_names.cc", "webui/settings/chromeos/pref_names.cc",
"webui/settings/chromeos/pref_names.h", "webui/settings/chromeos/pref_names.h",
"webui/settings/chromeos/search/settings_user_action.cc",
"webui/settings/chromeos/search/settings_user_action.h",
"webui/settings/chromeos/wallpaper_handler.cc", "webui/settings/chromeos/wallpaper_handler.cc",
"webui/settings/chromeos/wallpaper_handler.h", "webui/settings/chromeos/wallpaper_handler.h",
"webui/settings/tts_handler.cc", "webui/settings/tts_handler.cc",
...@@ -2011,6 +2013,7 @@ jumbo_static_library("ui") { ...@@ -2011,6 +2013,7 @@ jumbo_static_library("ui") {
"//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings",
"//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings", "//chrome/browser/ui/webui/chromeos/crostini_upgrader:mojo_bindings",
"//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings", "//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings",
"//chrome/browser/ui/webui/settings/chromeos/search:mojo_bindings",
"//chrome/services/file_util/public/cpp", "//chrome/services/file_util/public/cpp",
"//chromeos", "//chromeos",
"//chromeos/assistant:buildflags", "//chromeos/assistant:buildflags",
......
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//mojo/public/tools/bindings/mojom.gni")
assert(is_chromeos)
mojom("mojo_bindings") {
sources = [ "search.mojom" ]
}
khorimoto@chromium.org
zentaro@chromium.org
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
# COMPONENT: OS>Systems>Settings
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module chromeos.settings.mojom;
// All routes in Chrome OS settings; most represent a page in the UI. This list
// should stay in sync with the entries in
// //chrome/browser/resources/settings/chromeos/os_route.js.
enum SettingsSectionName {
// kAbout is the About page, and kAboutAbout is the subpage embedded within
// the page.
kAbout,
kAboutAbout,
kAboutDetails,
kAccessibility,
kAccessibilityManage,
kAccessibilityManageCaptions,
kAccessibilityManageSwitchAccess,
kAccessibilityManageTts,
// Bottom portion of the settings page which includes less common features
// (i.e., not a distinct page to visit).
kAdvanced,
kAdvancedPrivacy,
kApps,
kAppsAndroidAppsDetails,
kAppsManagement,
kAppsManagementDetails,
kBluetooth,
kBluetoothDevices,
kCrostini,
kCrostiniAndroidAdb,
kCrostiniDetails,
kCrostiniDetailsExportImport,
kCrostiniDetailsSharedPaths,
kCrostiniDetailsSharedUsbDevices,
kDateTime,
kDateTimeTimezone,
kDevice,
kDeviceDisplay,
kDeviceExternalStorage,
kDeviceKeyboard,
kDevicePointers,
kDevicePower,
kDeviceStorage,
kDeviceStylus,
kFiles,
kFilesSmbShares,
kInternet,
kInternetKnownNetworks,
kInternetNetworks,
kInternetNewtorkDetail,
kLanguages,
kLanguagesDetails,
kLanguagesDetailsInputMethods,
kMultidevice,
kMultideviceFeatures,
kMultideviceSmartLock,
kPeople,
kPeopleAccounts,
kPeopleKerberos,
kPeopleLockScreen,
kPeopleLockScreenFingerprint,
kPeopleSync,
kPeopleSyncAdvanced,
kPersonalization,
kPersonalizationChangePicture,
kPluginVm,
kPluginVmDetails,
kPluginVmSharedPaths,
kPrinting,
kPrintingCupsPrinters,
kReset,
kSearch,
kSearchGoogleAssistant,
kSignOut
};
// Types of visibility which apply to the Chrome OS settings window.
enum SettingsPageVisibility {
kVisibleAndFocused,
kVisibleAndUnfocused,
kHidden
};
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/settings/chromeos/search/settings_user_action.h"
#include "base/logging.h"
namespace chromeos {
namespace settings {
// SettingsUserAction:
SettingsUserAction::SettingsUserAction(Type type) : type_(type) {}
SettingsUserAction::SettingsUserAction(const SettingsUserAction& other) =
default;
SettingsUserAction& SettingsUserAction::operator=(
const SettingsUserAction& other) = default;
SettingsUserAction::~SettingsUserAction() = default;
// SettingsClickAction:
SettingsClickAction::SettingsClickAction() : SettingsUserAction(Type::kClick) {}
SettingsClickAction::SettingsClickAction(const SettingsClickAction& other) =
default;
SettingsClickAction& SettingsClickAction::operator=(
const SettingsClickAction& other) = default;
SettingsClickAction::~SettingsClickAction() = default;
// SettingsNavigationAction:
SettingsNavigationAction::SettingsNavigationAction(
mojom::SettingsSectionName section_name)
: SettingsUserAction(Type::kNavigation), section_name_(section_name) {}
SettingsNavigationAction::SettingsNavigationAction(
const SettingsNavigationAction& other) = default;
SettingsNavigationAction& SettingsNavigationAction::operator=(
const SettingsNavigationAction& other) = default;
SettingsNavigationAction::~SettingsNavigationAction() = default;
// SettingsVisibilityChangeAction:
SettingsVisibilityChangeAction::SettingsVisibilityChangeAction(
mojom::SettingsPageVisibility page_visibility)
: SettingsUserAction(Type::kVisibilityChange),
page_visibility_(page_visibility) {}
SettingsVisibilityChangeAction::SettingsVisibilityChangeAction(
const SettingsVisibilityChangeAction& other) = default;
SettingsVisibilityChangeAction& SettingsVisibilityChangeAction::operator=(
const SettingsVisibilityChangeAction& other) = default;
SettingsVisibilityChangeAction::~SettingsVisibilityChangeAction() = default;
// SettingsSearchAction:
SettingsSearchAction::SettingsSearchAction(const std::string& search_query)
: SettingsUserAction(Type::kSearch), search_query_(search_query) {}
SettingsSearchAction::SettingsSearchAction(const SettingsSearchAction& other) =
default;
SettingsSearchAction& SettingsSearchAction::operator=(
const SettingsSearchAction& other) = default;
SettingsSearchAction::~SettingsSearchAction() = default;
// SettingsChangeAction:
SettingsChangeAction::SettingsChangeAction()
: SettingsUserAction(Type::kSettingChange) {}
SettingsChangeAction::SettingsChangeAction(const SettingsChangeAction& other) =
default;
SettingsChangeAction& SettingsChangeAction::operator=(
const SettingsChangeAction& other) = default;
SettingsChangeAction::~SettingsChangeAction() = default;
} // namespace settings
} // namespace chromeos
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SEARCH_SETTINGS_USER_ACTION_H_
#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SEARCH_SETTINGS_USER_ACTION_H_
#include <string>
#include "base/time/time.h"
#include "chrome/browser/ui/webui/settings/chromeos/search/search.mojom.h"
namespace chromeos {
namespace settings {
// An action taken by a user in Chrome OS settings.
class SettingsUserAction {
public:
enum class Type {
kClick,
kNavigation,
kVisibilityChange,
kSearch,
kSettingChange
};
SettingsUserAction(const SettingsUserAction& other);
SettingsUserAction& operator=(const SettingsUserAction& other);
~SettingsUserAction();
Type type() const { return type_; }
base::Time timestamp() const { return timestamp_; }
protected:
explicit SettingsUserAction(Type type);
private:
Type type_;
base::Time timestamp_ = base::Time::Now();
};
// A click action taken by a user in Chrome OS settings.
class SettingsClickAction : public SettingsUserAction {
public:
SettingsClickAction();
SettingsClickAction(const SettingsClickAction& other);
SettingsClickAction& operator=(const SettingsClickAction& other);
~SettingsClickAction();
};
// A navigation action taken by a user in Chrome OS settings.
class SettingsNavigationAction : public SettingsUserAction {
public:
explicit SettingsNavigationAction(mojom::SettingsSectionName section_name);
SettingsNavigationAction(const SettingsNavigationAction& other);
SettingsNavigationAction& operator=(const SettingsNavigationAction& other);
~SettingsNavigationAction();
mojom::SettingsSectionName section_name() const { return section_name_; }
private:
mojom::SettingsSectionName section_name_;
};
// A visibility change action taken by a user in Chrome OS settings.
class SettingsVisibilityChangeAction : public SettingsUserAction {
public:
explicit SettingsVisibilityChangeAction(
mojom::SettingsPageVisibility page_visibility);
SettingsVisibilityChangeAction(const SettingsVisibilityChangeAction& other);
SettingsVisibilityChangeAction& operator=(
const SettingsVisibilityChangeAction& other);
~SettingsVisibilityChangeAction();
mojom::SettingsPageVisibility page_visibility() const {
return page_visibility_;
}
private:
mojom::SettingsPageVisibility page_visibility_;
};
// A search action taken by a user in Chrome OS settings.
class SettingsSearchAction : public SettingsUserAction {
public:
explicit SettingsSearchAction(const std::string& search_query);
SettingsSearchAction(const SettingsSearchAction& other);
SettingsSearchAction& operator=(const SettingsSearchAction& other);
~SettingsSearchAction();
const std::string& search_query() const { return search_query_; }
private:
std::string search_query_;
};
// A settings change action taken by a user in Chrome OS settings.
class SettingsChangeAction : public SettingsUserAction {
public:
SettingsChangeAction();
SettingsChangeAction(const SettingsChangeAction& other);
SettingsChangeAction& operator=(const SettingsChangeAction& other);
~SettingsChangeAction();
};
} // namespace settings
} // namespace chromeos
#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_SEARCH_SETTINGS_USER_ACTION_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment