// 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 "ash/app_list/app_list_color_provider_impl.h" #include "ash/constants/ash_features.h" #include "ash/public/cpp/style/color_provider.h" #include "ash/shell.h" #include "ash/style/ash_color_provider.h" #include "ash/style/default_colors.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ui/chromeos/styles/cros_styles.h" namespace ash { namespace { // Helper to check if tablet mode is enabled. bool IsTabletModeEnabled() { return Shell::Get()->tablet_mode_controller() && Shell::Get()->tablet_mode_controller()->InTabletMode(); } } // namespace AppListColorProviderImpl::AppListColorProviderImpl() : ash_color_provider_(AshColorProvider::Get()), is_dark_light_mode_enabled_(features::IsDarkLightModeEnabled()), is_productivity_launcher_enabled_( features::IsProductivityLauncherEnabled()), is_background_blur_enabled_(features::IsBackgroundBlurEnabled()) {} AppListColorProviderImpl::~AppListColorProviderImpl() = default; SkColor AppListColorProviderImpl::GetExpandArrowIconBaseColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( AshColorProvider::ContentLayerType::kButtonIconColor); } return SK_ColorWHITE; // default_color } SkColor AppListColorProviderImpl::GetExpandArrowIconBackgroundColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive); } return SkColorSetARGB(0xF, 0xFF, 0xFF, 0xFF); // default_color } SkColor AppListColorProviderImpl::GetAppListBackgroundColor( bool is_tablet_mode, SkColor default_color) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetShieldLayerColor( is_tablet_mode ? AshColorProvider::ShieldLayerType::kShield40 : AshColorProvider::ShieldLayerType::kShield80); } return default_color; } SkColor AppListColorProviderImpl::GetSearchBoxBackgroundColor() const { if (ShouldUseDarkLightColors()) { if (IsTabletModeEnabled()) { return ash_color_provider_->GetBaseLayerColor( is_background_blur_enabled_ ? AshColorProvider::BaseLayerType::kTransparent80 : AshColorProvider::BaseLayerType::kTransparent95); } else { return ash_color_provider_->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive); } } return SK_ColorWHITE; // default_color } SkColor AppListColorProviderImpl::GetSearchBoxCardBackgroundColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetBaseLayerColor( is_background_blur_enabled_ ? AshColorProvider::BaseLayerType::kTransparent80 : AshColorProvider::BaseLayerType::kTransparent95); } return SK_ColorWHITE; // default_color } SkColor AppListColorProviderImpl::GetSearchBoxTextColor( SkColor default_color) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( AshColorProvider::ContentLayerType::kTextColorPrimary); } return default_color; } SkColor AppListColorProviderImpl::GetSearchBoxSecondaryTextColor( SkColor default_color) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( AshColorProvider::ContentLayerType::kTextColorSecondary); } return default_color; } SkColor AppListColorProviderImpl::GetSearchBoxSuggestionTextColor( SkColor default_color) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( AshColorProvider::ContentLayerType::kTextColorSuggestion); } return default_color; } SkColor AppListColorProviderImpl::GetSuggestionChipBackgroundColor() const { if (ShouldUseDarkLightColors()) { if (IsTabletModeEnabled()) { return ash_color_provider_->GetBaseLayerColor( AshColorProvider::BaseLayerType::kTransparent80); } else { return ash_color_provider_->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive); } } return SkColorSetA(gfx::kGoogleGrey100, 0x14); // default_color } SkColor AppListColorProviderImpl::GetSuggestionChipTextColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( AshColorProvider::ContentLayerType::kTextColorPrimary); } return gfx::kGoogleGrey100; // default_color } SkColor AppListColorProviderImpl::GetAppListItemTextColor( bool is_in_folder) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( ColorProvider::ContentLayerType::kTextColorPrimary); } return is_in_folder ? SK_ColorBLACK : SK_ColorWHITE; } SkColor AppListColorProviderImpl::GetPageSwitcherButtonColor( bool is_root_app_grid_page_switcher) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( ColorProvider::ContentLayerType::kButtonIconColor); } // default_color return is_root_app_grid_page_switcher ? SkColorSetARGB(255, 232, 234, 237) : SkColorSetA(SK_ColorBLACK, 138); } SkColor AppListColorProviderImpl::GetSearchBoxIconColor( SkColor default_color) const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( ColorProvider::ContentLayerType::kButtonIconColor); } return default_color; } SkColor AppListColorProviderImpl::GetFolderBackgroundColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetBaseLayerColor( ColorProvider::BaseLayerType::kTransparent80); } return SK_ColorWHITE; } SkColor AppListColorProviderImpl::GetFolderBubbleColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetControlsLayerColor( ColorProvider::ControlsLayerType::kControlBackgroundColorInactive); } return SkColorSetA(gfx::kGoogleGrey100, 0x7A); } SkColor AppListColorProviderImpl::GetFolderTitleTextColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( ColorProvider::ContentLayerType::kTextColorPrimary); } return gfx::kGoogleGrey700; } SkColor AppListColorProviderImpl::GetFolderHintTextColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( ColorProvider::ContentLayerType::kTextColorSecondary); } return gfx::kGoogleGrey600; } SkColor AppListColorProviderImpl::GetFolderNameBorderColor(bool active) const { if (!active) return SK_ColorTRANSPARENT; return ash_color_provider_->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kFocusRingColor); } SkColor AppListColorProviderImpl::GetFolderNameSelectionColor() const { return ash_color_provider_->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kFocusAuraColor); } SkColor AppListColorProviderImpl::GetFolderNotificationBadgeColor() const { if (ShouldUseDarkLightColors()) { return cros_styles::ResolveColor(cros_styles::ColorName::kIconColorBlue); } return cros_styles::ResolveColor(cros_styles::ColorName::kIconColorBlue, /*is_dark_mode=*/false); } SkColor AppListColorProviderImpl::GetContentsBackgroundColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetControlsLayerColor( ColorProvider::ControlsLayerType::kControlBackgroundColorInactive); } return SkColorSetRGB(0xF2, 0xF2, 0xF2); // default_color } SkColor AppListColorProviderImpl::GetGridBackgroundCardActiveColor() const { const SkColor background_color = GetGridBackgroundCardInactiveColor(); return SkColorSetA( background_color, SkColorGetA(background_color) + 255 * (1.0f + AshColorProvider::Get() ->GetInkDropBaseColorAndOpacity(background_color) .second)); } SkColor AppListColorProviderImpl::GetGridBackgroundCardInactiveColor() const { return AshColorProvider::Get()->GetControlsLayerColor( AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive); } ui::ColorId AppListColorProviderImpl::GetSeparatorColorId() const { if (ShouldUseDarkLightColors()) { return ui::kColorAshAppListSeparatorLight; } return ui::kColorAshAppListSeparator; // default_color } SkColor AppListColorProviderImpl::GetFocusRingColor() const { if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetControlsLayerColor( ColorProvider::ControlsLayerType::kFocusRingColor); } return gfx::kGoogleBlue600; // default_color } SkColor AppListColorProviderImpl::GetInkDropBaseColor(SkColor bg_color) const { return ash_color_provider_->GetInkDropBaseColorAndOpacity(bg_color).first; } float AppListColorProviderImpl::GetInkDropOpacity(SkColor bg_color) const { return ash_color_provider_->GetInkDropBaseColorAndOpacity(bg_color).second; } SkColor AppListColorProviderImpl::GetSearchResultViewHighlightColor() const { // Use highlight colors when Dark Light mode is enabled. if (ShouldUseDarkLightColors()) { return ash_color_provider_->GetContentLayerColor( AshColorProvider::ContentLayerType::kHighlightColorHover); } // Use inkdrop colors by default. return SkColorSetA(GetInkDropBaseColor(GetSearchBoxBackgroundColor()), GetInkDropOpacity(GetSearchBoxBackgroundColor()) * 255); } SkColor AppListColorProviderImpl::GetTextColorURL() const { // Use highlight colors when Dark Light mode is enabled. if (ShouldUseDarkLightColors()) { return AshColorProvider::Get()->GetContentLayerColor( AshColorProvider::ContentLayerType::kTextColorURL); } return gfx::kGoogleBlue600; } bool AppListColorProviderImpl::ShouldUseDarkLightColors() const { return is_dark_light_mode_enabled_ || is_productivity_launcher_enabled_; } } // namespace ash