chromium/chrome/browser/ui/webui/ash/settings/pages/os_settings_sections.cc

// Copyright 2020 The Chromium Authors
// 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/ash/settings/pages/os_settings_sections.h"

#include "ash/constants/ash_features.h"
#include "base/containers/contains.h"
#include "build/branding_buildflags.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/ash/settings/pages/a11y/accessibility_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/about/about_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/apps/apps_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/bluetooth/bluetooth_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/crostini/crostini_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/date_time/date_time_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/device/device_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/files/files_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/internet/internet_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/kerberos/kerberos_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/languages/languages_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/main/main_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/multidevice/multidevice_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/people/people_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/personalization/personalization_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/printing/printing_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/privacy/privacy_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/reset/reset_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/search/search_section.h"
#include "chrome/browser/ui/webui/ash/settings/pages/system_preferences/system_preferences_section.h"
#include "chromeos/ash/components/phonehub/phone_hub_manager.h"

namespace ash::settings {

namespace mojom {
using ::chromeos::settings::mojom::Section;
}

OsSettingsSections::OsSettingsSections(
    Profile* profile,
    SearchTagRegistry* search_tag_registry,
    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
    phonehub::PhoneHubManager* phone_hub_manager,
    KerberosCredentialsManager* kerberos_credentials_manager,
    ArcAppListPrefs* arc_app_list_prefs,
    signin::IdentityManager* identity_manager,
    CupsPrintersManager* printers_manager,
    apps::AppServiceProxy* app_service_proxy,
    eche_app::EcheAppManager* eche_app_manager) {
  auto* prefs = profile->GetPrefs();

  // Special case: Main section does not have an associated enum value.
  sections_.push_back(
      std::make_unique<MainSection>(profile, search_tag_registry));

  AddSection(mojom::Section::kNetwork,
             std::make_unique<InternetSection>(profile, search_tag_registry));

  AddSection(
      mojom::Section::kBluetooth,
      std::make_unique<BluetoothSection>(profile, search_tag_registry, prefs));

  AddSection(mojom::Section::kMultiDevice,
             std::make_unique<MultiDeviceSection>(
                 profile, search_tag_registry, multidevice_setup_client,
                 phone_hub_manager, prefs, eche_app_manager));

  AddSection(mojom::Section::kPeople,
             std::make_unique<PeopleSection>(profile, search_tag_registry,
                                             identity_manager, prefs));

  AddSection(mojom::Section::kDevice,
             std::make_unique<DeviceSection>(profile, search_tag_registry,
                                             printers_manager, prefs));

  AddSection(mojom::Section::kPersonalization,
             std::make_unique<PersonalizationSection>(
                 profile, search_tag_registry, prefs));

  AddSection(mojom::Section::kApps, std::make_unique<AppsSection>(
                                        profile, search_tag_registry, prefs,
                                        arc_app_list_prefs, app_service_proxy));

  AddSection(
      mojom::Section::kPrivacyAndSecurity,
      std::make_unique<PrivacySection>(profile, search_tag_registry, prefs));

  AddSection(mojom::Section::kAccessibility,
             std::make_unique<AccessibilitySection>(
                 profile, search_tag_registry, prefs));

  AddSection(
      mojom::Section::kAboutChromeOs,
      std::make_unique<AboutSection>(profile, search_tag_registry, prefs));

  AddSection(mojom::Section::kKerberos,
             std::make_unique<KerberosSection>(profile, search_tag_registry,
                                               kerberos_credentials_manager));

  if (ash::features::IsOsSettingsRevampWayfindingEnabled()) {
    AddSection(mojom::Section::kSystemPreferences,
               std::make_unique<SystemPreferencesSection>(
                   profile, search_tag_registry, prefs));
  } else {
    AddSection(
        mojom::Section::kCrostini,
        std::make_unique<CrostiniSection>(profile, search_tag_registry, prefs));

    AddSection(mojom::Section::kDateAndTime,
               std::make_unique<DateTimeSection>(profile, search_tag_registry));

    AddSection(mojom::Section::kFiles,
               std::make_unique<FilesSection>(profile, search_tag_registry));

    AddSection(mojom::Section::kLanguagesAndInput,
               std::make_unique<LanguagesSection>(profile, search_tag_registry,
                                                  prefs));

    AddSection(mojom::Section::kPrinting,
               std::make_unique<PrintingSection>(profile, search_tag_registry,
                                                 printers_manager));

    AddSection(mojom::Section::kReset,
               std::make_unique<ResetSection>(profile, search_tag_registry));

    AddSection(mojom::Section::kSearchAndAssistant,
               std::make_unique<SearchSection>(profile, search_tag_registry));
  }
}

OsSettingsSections::OsSettingsSections() = default;

OsSettingsSections::~OsSettingsSections() = default;

const OsSettingsSection* OsSettingsSections::GetSection(
    mojom::Section section) const {
  const auto it = sections_map_.find(section);
  CHECK(it != sections_map_.end());
  return it->second;
}

void OsSettingsSections::AddSection(
    chromeos::settings::mojom::Section section_id,
    std::unique_ptr<OsSettingsSection> section) {
  DCHECK(!base::Contains(sections_map_, section_id));

  sections_map_[section_id] = section.get();
  sections_.push_back(std::move(section));
}

}  // namespace ash::settings