blob: da46d679eb94738d7f19d5a463c8f07a245f57f2 [file] [log] [blame]
// Copyright 2019 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/views/toolbar/toolbar_page_action_icon_container_view.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/themes/theme_properties.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h"
#include "chrome/browser/ui/views/autofill/payments/save_card_icon_view.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "chrome/browser/ui/views/chrome_typography.h"
#include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
#include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
#include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h"
#include "ui/views/bubble/bubble_dialog_delegate_view.h"
#include "ui/views/widget/widget.h"
ToolbarPageActionIconContainerView::ToolbarPageActionIconContainerView(
Browser* browser)
: ToolbarIconContainerView(
/*uses_highlight=*/!browser->profile()->IsIncognitoProfile()),
browser_(browser) {
manage_passwords_icon_views_ =
new ManagePasswordsIconViews(browser->command_controller(), this);
page_action_icons_.push_back(manage_passwords_icon_views_);
local_card_migration_icon_view_ = new autofill::LocalCardMigrationIconView(
browser->command_controller(), browser, this,
// TODO(crbug.com/932818): The font list and the icon color may not be
// what we want here. Put placeholders for now.
views::style::GetFont(CONTEXT_TOOLBAR_BUTTON,
views::style::STYLE_PRIMARY));
page_action_icons_.push_back(local_card_migration_icon_view_);
save_card_icon_view_ = new autofill::SaveCardIconView(
browser->command_controller(), browser, this,
// TODO(crbug.com/932818): The font list and the icon color may not be
// what we want here. Put placeholders for now.
views::style::GetFont(CONTEXT_TOOLBAR_BUTTON,
views::style::STYLE_PRIMARY));
page_action_icons_.push_back(save_card_icon_view_);
for (PageActionIconView* icon_view : page_action_icons_) {
icon_view->SetVisible(false);
icon_view->AddButtonObserver(this);
icon_view->views::View::AddObserver(this);
AddChildView(icon_view);
}
avatar_ = new AvatarToolbarButton(browser);
AddMainView(avatar_);
}
ToolbarPageActionIconContainerView::~ToolbarPageActionIconContainerView() {
for (PageActionIconView* icon_view : page_action_icons_) {
icon_view->RemoveButtonObserver(this);
icon_view->views::View::RemoveObserver(this);
}
}
void ToolbarPageActionIconContainerView::UpdateAllIcons() {
const ui::ThemeProvider* theme_provider = GetThemeProvider();
const SkColor icon_color =
theme_provider->GetColor(ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON);
for (PageActionIconView* icon_view : page_action_icons_) {
icon_view->SetIconColor(icon_color);
icon_view->Update();
}
if (avatar_)
avatar_->UpdateIcon();
}
PageActionIconView* ToolbarPageActionIconContainerView::GetIconView(
PageActionIconType icon_type) {
switch (icon_type) {
case PageActionIconType::kLocalCardMigration:
return local_card_migration_icon_view_;
case PageActionIconType::kSaveCard:
return save_card_icon_view_;
case PageActionIconType::kManagePasswords:
return manage_passwords_icon_views_;
default:
NOTREACHED();
return nullptr;
}
}
bool ToolbarPageActionIconContainerView::
ActivateFirstInactiveBubbleForAccessibility() {
for (PageActionIconView* icon_view : page_action_icons_) {
if (FocusInactiveBubbleForIcon(icon_view))
return true;
}
return false;
}
void ToolbarPageActionIconContainerView::UpdatePageActionIcon(
PageActionIconType icon_type) {
PageActionIconView* icon = GetIconView(icon_type);
if (icon)
icon->Update();
}
SkColor ToolbarPageActionIconContainerView::GetPageActionInkDropColor() const {
return GetToolbarInkDropBaseColor(this);
}
content::WebContents*
ToolbarPageActionIconContainerView::GetWebContentsForPageActionIconView() {
return browser_->tab_strip_model()->GetActiveWebContents();
}
void ToolbarPageActionIconContainerView::OnThemeChanged() {
// Update icon color.
UpdateAllIcons();
}
bool ToolbarPageActionIconContainerView::FocusInactiveBubbleForIcon(
PageActionIconView* icon_view) {
if (!icon_view->GetVisible() || !icon_view->GetBubble())
return false;
views::Widget* widget = icon_view->GetBubble()->GetWidget();
if (widget && widget->IsVisible() && !widget->IsActive()) {
widget->Show();
return true;
}
return false;
}