| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_THEME_PROVIDER_IMPL_H_ |
| #define CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_THEME_PROVIDER_IMPL_H_ |
| |
| #include "ash/public/cpp/style/color_mode_observer.h" |
| #include "ash/style/color_palette_controller.h" |
| #include "ash/style/dark_light_mode_controller_impl.h" |
| #include "ash/webui/personalization_app/personalization_app_theme_provider.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/scoped_observation.h" |
| #include "components/prefs/pref_change_registrar.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| #include "mojo/public/cpp/bindings/remote.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| |
| class Profile; |
| |
| namespace content { |
| class WebUI; |
| } // namespace content |
| |
| namespace ash::personalization_app { |
| |
| class PersonalizationAppThemeProviderImpl |
| : public PersonalizationAppThemeProvider, |
| ash::ColorModeObserver { |
| public: |
| explicit PersonalizationAppThemeProviderImpl(content::WebUI* web_ui); |
| |
| PersonalizationAppThemeProviderImpl( |
| const PersonalizationAppThemeProviderImpl&) = delete; |
| PersonalizationAppThemeProviderImpl& operator=( |
| const PersonalizationAppThemeProviderImpl&) = delete; |
| |
| ~PersonalizationAppThemeProviderImpl() override; |
| |
| // PersonalizationAppThemeProvider: |
| void BindInterface( |
| mojo::PendingReceiver<ash::personalization_app::mojom::ThemeProvider> |
| receiver) override; |
| |
| // ash::personalization_app::mojom::ThemeProvider: |
| void SetThemeObserver( |
| mojo::PendingRemote<ash::personalization_app::mojom::ThemeObserver> |
| observer) override; |
| |
| void SetColorModePref(bool dark_mode_enabled) override; |
| |
| void SetColorModeAutoScheduleEnabled(bool enabled) override; |
| |
| void IsDarkModeEnabled(IsDarkModeEnabledCallback callback) override; |
| |
| void SetColorScheme(ColorScheme color_scheme) override; |
| |
| void SetStaticColor(SkColor static_color) override; |
| |
| void IsColorModeAutoScheduleEnabled( |
| IsColorModeAutoScheduleEnabledCallback callback) override; |
| |
| // ash::ColorModeObserver: |
| void OnColorModeChanged(bool dark_mode_enabled) override; |
| |
| void GetColorScheme(GetColorSchemeCallback callback) override; |
| |
| void GetStaticColor(GetStaticColorCallback callback) override; |
| |
| private: |
| bool IsColorModeAutoScheduleEnabled(); |
| |
| // Notify webUI the current state of color mode auto scheduler. |
| void NotifyColorModeAutoScheduleChanged(); |
| |
| void OnColorSchemeChanged(ColorScheme color_scheme); |
| |
| void OnStaticColorChanged(absl::optional<SkColor> color); |
| |
| // Pointer to profile of user that opened personalization SWA. Not owned. |
| raw_ptr<Profile> const profile_ = nullptr; |
| |
| PrefChangeRegistrar pref_change_registrar_; |
| |
| std::unique_ptr<ColorPaletteController> color_palette_controller_; |
| |
| base::ScopedObservation<ash::DarkLightModeControllerImpl, |
| ash::ColorModeObserver> |
| color_mode_observer_{this}; |
| |
| mojo::Receiver<ash::personalization_app::mojom::ThemeProvider> |
| theme_receiver_{this}; |
| |
| mojo::Remote<ash::personalization_app::mojom::ThemeObserver> |
| theme_observer_remote_; |
| }; |
| |
| } // namespace ash::personalization_app |
| |
| #endif // CHROME_BROWSER_ASH_WEB_APPLICATIONS_PERSONALIZATION_APP_PERSONALIZATION_APP_THEME_PROVIDER_IMPL_H_ |