Commit c498f582 authored by Hitoshi Yoshida's avatar Hitoshi Yoshida Committed by Commit Bot

Revert "Remove ButtonListener in favor of callbacks. Other cleanup."

This reverts commit 86ef81d7.

Reason for revert: I suspect this causes test failures on CrOS.

Original change's description:
> Remove ButtonListener in favor of callbacks. Other cleanup.
>
> Add metadata - remove manually overridden GetClassName.
>
> Add view builders and update view tree construction to use the builder.
>
> TBR=katie@chromium.org
>
> Bug: 772945, 938501, 1130078
> Change-Id: Id105b26afb15138ee6e70e7ade5e43be11671a47
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2505880
> Reviewed-by: Allen Bauer <kylixrd@chromium.org>
> Reviewed-by: Peter Boström <pbos@chromium.org>
> Reviewed-by: Tetsui Ohkubo <tetsui@chromium.org>
> Commit-Queue: Allen Bauer <kylixrd@chromium.org>
> Auto-Submit: Allen Bauer <kylixrd@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#824581}

TBR=pkasting@chromium.org,pbos@chromium.org,kylixrd@chromium.org,tetsui@chromium.org,katie@chromium.org

Change-Id: I5502a73a1f1f5870937efbbb2588f676748bbad1
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 772945
Bug: 938501
Bug: 1130078
Bug: 1146255
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2521980Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Commit-Queue: Hitoshi Yoshida <peria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824702}
parent 4c36a7b2
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "ash/system/accessibility/floating_menu_button.h" #include "ash/system/accessibility/floating_menu_button.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/unified/top_shortcut_button.h" #include "ash/system/unified/top_shortcut_button.h"
#include "base/bind.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -24,7 +23,6 @@ ...@@ -24,7 +23,6 @@
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/controls/separator.h" #include "ui/views/controls/separator.h"
#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
...@@ -38,103 +36,92 @@ const int kSeparatorHeight = 16; ...@@ -38,103 +36,92 @@ const int kSeparatorHeight = 16;
} // namespace } // namespace
AutoclickMenuView::AutoclickMenuView(AutoclickEventType type, AutoclickMenuView::AutoclickMenuView(AutoclickEventType type,
FloatingMenuPosition position) { FloatingMenuPosition position)
: left_click_button_(
new FloatingMenuButton(this,
kAutoclickLeftClickIcon,
IDS_ASH_AUTOCLICK_OPTION_LEFT_CLICK,
false /* flip_for_rtl */)),
right_click_button_(
new FloatingMenuButton(this,
kAutoclickRightClickIcon,
IDS_ASH_AUTOCLICK_OPTION_RIGHT_CLICK,
false /* flip_for_rtl */)),
double_click_button_(
new FloatingMenuButton(this,
kAutoclickDoubleClickIcon,
IDS_ASH_AUTOCLICK_OPTION_DOUBLE_CLICK,
false /* flip_for_rtl */)),
drag_button_(
new FloatingMenuButton(this,
kAutoclickDragIcon,
IDS_ASH_AUTOCLICK_OPTION_DRAG_AND_DROP,
false /* flip_for_rtl */)),
scroll_button_(new FloatingMenuButton(this,
kAutoclickScrollIcon,
IDS_ASH_AUTOCLICK_OPTION_SCROLL,
false /* flip_for_rtl */)),
pause_button_(new FloatingMenuButton(this,
kAutoclickPauseIcon,
IDS_ASH_AUTOCLICK_OPTION_NO_ACTION,
false /* flip_for_rtl */)),
position_button_(
new FloatingMenuButton(this,
kAutoclickPositionBottomLeftIcon,
IDS_ASH_AUTOCLICK_OPTION_CHANGE_POSITION,
false /* flip_for_rtl */,
kPanelPositionButtonSize,
false /* no highlight */,
false /* is_a11y_togglable */)) {
// Set view IDs for testing.
left_click_button_->SetId(static_cast<int>(ButtonId::kLeftClick));
right_click_button_->SetId(static_cast<int>(ButtonId::kRightClick));
double_click_button_->SetId(static_cast<int>(ButtonId::kDoubleClick));
drag_button_->SetId(static_cast<int>(ButtonId::kDragAndDrop));
pause_button_->SetId(static_cast<int>(ButtonId::kPause));
position_button_->SetId(static_cast<int>(ButtonId::kPosition));
if (scroll_button_)
scroll_button_->SetId(static_cast<int>(ButtonId::kScroll));
std::unique_ptr<views::BoxLayout> layout = std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, gfx::Insets(), 0);
layout->set_cross_axis_alignment(views::BoxLayout::CrossAxisAlignment::kEnd);
SetLayoutManager(std::move(layout));
// The action control buttons all have the same spacing.
views::View* action_button_container = new views::View();
action_button_container->SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, kUnifiedMenuItemPadding,
kUnifiedTopShortcutSpacing));
action_button_container->AddChildView(left_click_button_);
action_button_container->AddChildView(right_click_button_);
action_button_container->AddChildView(double_click_button_);
action_button_container->AddChildView(drag_button_);
if (scroll_button_)
action_button_container->AddChildView(scroll_button_);
action_button_container->AddChildView(pause_button_);
AddChildView(action_button_container);
views::Separator* separator = new views::Separator();
separator->SetColor(AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kSeparatorColor));
separator->SetPreferredHeight(kSeparatorHeight);
int total_height = kUnifiedTopShortcutSpacing * 2 + kTrayItemSize; int total_height = kUnifiedTopShortcutSpacing * 2 + kTrayItemSize;
int separator_spacing = (total_height - kSeparatorHeight) / 2; int separator_spacing = (total_height - kSeparatorHeight) / 2;
views::Builder<AutoclickMenuView>(this) separator->SetBorder(views::CreateEmptyBorder(
.SetCrossAxisAlignment(views::BoxLayout::CrossAxisAlignment::kEnd) separator_spacing - kUnifiedTopShortcutSpacing, 0, separator_spacing, 0));
.AddChildren( AddChildView(separator);
{views::Builder<views::BoxLayoutView>()
.SetInsideBorderInsets(kUnifiedMenuItemPadding) views::View* position_button_container = new views::View();
.SetBetweenChildSpacing(kUnifiedTopShortcutSpacing) position_button_container->SetLayoutManager(
.AddChildren( std::make_unique<views::BoxLayout>(
{views::Builder<FloatingMenuButton>() views::BoxLayout::Orientation::kHorizontal,
.CopyAddressTo(&left_click_button_) gfx::Insets(0, kPanelPositionButtonPadding,
.SetID(static_cast<int>(ButtonId::kLeftClick)) kPanelPositionButtonPadding, kPanelPositionButtonPadding),
.SetVectorIcon(kAutoclickLeftClickIcon) kPanelPositionButtonPadding));
.SetTooltipText(l10n_util::GetStringUTF16( position_button_container->AddChildView(position_button_);
IDS_ASH_AUTOCLICK_OPTION_LEFT_CLICK)) AddChildView(position_button_container);
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnAutoclickButtonPressed,
base::Unretained(this),
base::Unretained(left_click_button_))),
views::Builder<FloatingMenuButton>()
.CopyAddressTo(&right_click_button_)
.SetID(static_cast<int>(ButtonId::kRightClick))
.SetVectorIcon(kAutoclickRightClickIcon)
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_AUTOCLICK_OPTION_RIGHT_CLICK))
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnAutoclickButtonPressed,
base::Unretained(this),
base::Unretained(right_click_button_))),
views::Builder<FloatingMenuButton>()
.CopyAddressTo(&double_click_button_)
.SetID(static_cast<int>(ButtonId::kDoubleClick))
.SetVectorIcon(kAutoclickDoubleClickIcon)
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_AUTOCLICK_OPTION_DOUBLE_CLICK))
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnAutoclickButtonPressed,
base::Unretained(this),
base::Unretained(double_click_button_))),
views::Builder<FloatingMenuButton>()
.CopyAddressTo(&drag_button_)
.SetID(static_cast<int>(ButtonId::kDragAndDrop))
.SetVectorIcon(kAutoclickLeftClickIcon)
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_AUTOCLICK_OPTION_DRAG_AND_DROP))
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnAutoclickButtonPressed,
base::Unretained(this),
base::Unretained(drag_button_))),
views::Builder<FloatingMenuButton>()
.CopyAddressTo(&scroll_button_)
.SetID(static_cast<int>(ButtonId::kScroll))
.SetVectorIcon(kAutoclickLeftClickIcon)
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_AUTOCLICK_OPTION_SCROLL))
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnAutoclickButtonPressed,
base::Unretained(this),
base::Unretained(scroll_button_))),
views::Builder<FloatingMenuButton>()
.CopyAddressTo(&pause_button_)
.SetID(static_cast<int>(ButtonId::kPause))
.SetVectorIcon(kAutoclickLeftClickIcon)
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_AUTOCLICK_OPTION_NO_ACTION))
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnAutoclickButtonPressed,
base::Unretained(this),
base::Unretained(pause_button_)))}),
views::Builder<views::Separator>()
.SetColor(AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kSeparatorColor))
.SetPreferredHeight(kSeparatorHeight)
.SetBorder(views::CreateEmptyBorder(
separator_spacing - kUnifiedTopShortcutSpacing, 0,
separator_spacing, 0)),
views::Builder<views::BoxLayoutView>()
.SetInsideBorderInsets(gfx::Insets(
0, kPanelPositionButtonPadding, kPanelPositionButtonPadding,
kPanelPositionButtonPadding))
.SetBetweenChildSpacing(kPanelPositionButtonPadding)
.AddChildren(
{views::Builder<FloatingMenuButton>()
.CopyAddressTo(&position_button_)
.SetID(static_cast<int>(ButtonId::kPosition))
.SetVectorIcon(kAutoclickPositionBottomLeftIcon)
.SetPreferredSize(gfx::Size(kPanelPositionButtonSize,
kPanelPositionButtonSize))
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_AUTOCLICK_OPTION_CHANGE_POSITION))
.SetDrawHighlight(false)
.SetA11yTogglable(false)
.SetCallback(base::BindRepeating(
&AutoclickMenuView::OnPositionButtonPressed,
base::Unretained(this)))})})
.BuildChildren();
UpdateEventType(type); UpdateEventType(type);
UpdatePosition(position); UpdatePosition(position);
} }
...@@ -144,7 +131,8 @@ void AutoclickMenuView::UpdateEventType(AutoclickEventType type) { ...@@ -144,7 +131,8 @@ void AutoclickMenuView::UpdateEventType(AutoclickEventType type) {
right_click_button_->SetToggled(type == AutoclickEventType::kRightClick); right_click_button_->SetToggled(type == AutoclickEventType::kRightClick);
double_click_button_->SetToggled(type == AutoclickEventType::kDoubleClick); double_click_button_->SetToggled(type == AutoclickEventType::kDoubleClick);
drag_button_->SetToggled(type == AutoclickEventType::kDragAndDrop); drag_button_->SetToggled(type == AutoclickEventType::kDragAndDrop);
scroll_button_->SetToggled(type == AutoclickEventType::kScroll); if (scroll_button_)
scroll_button_->SetToggled(type == AutoclickEventType::kScroll);
pause_button_->SetToggled(type == AutoclickEventType::kNoAction); pause_button_->SetToggled(type == AutoclickEventType::kNoAction);
if (type != AutoclickEventType::kNoAction) if (type != AutoclickEventType::kNoAction)
event_type_ = type; event_type_ = type;
...@@ -172,7 +160,36 @@ void AutoclickMenuView::UpdatePosition(FloatingMenuPosition position) { ...@@ -172,7 +160,36 @@ void AutoclickMenuView::UpdatePosition(FloatingMenuPosition position) {
} }
} }
void AutoclickMenuView::OnAutoclickButtonPressed(views::Button* sender) { void AutoclickMenuView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (sender == position_button_) {
FloatingMenuPosition new_position;
// Rotate clockwise throughout the screen positions.
switch (
Shell::Get()->accessibility_controller()->GetAutoclickMenuPosition()) {
case FloatingMenuPosition::kBottomRight:
new_position = FloatingMenuPosition::kBottomLeft;
break;
case FloatingMenuPosition::kBottomLeft:
new_position = FloatingMenuPosition::kTopLeft;
break;
case FloatingMenuPosition::kTopLeft:
new_position = FloatingMenuPosition::kTopRight;
break;
case FloatingMenuPosition::kTopRight:
new_position = FloatingMenuPosition::kBottomRight;
break;
case FloatingMenuPosition::kSystemDefault:
new_position = base::i18n::IsRTL() ? FloatingMenuPosition::kTopLeft
: FloatingMenuPosition::kBottomLeft;
break;
}
Shell::Get()->accessibility_controller()->SetAutoclickMenuPosition(
new_position);
base::RecordAction(base::UserMetricsAction(
"Accessibility.CrosAutoclick.TrayMenu.ChangePosition"));
return;
}
AutoclickEventType type; AutoclickEventType type;
if (sender == left_click_button_) { if (sender == left_click_button_) {
type = AutoclickEventType::kLeftClick; type = AutoclickEventType::kLeftClick;
...@@ -187,8 +204,10 @@ void AutoclickMenuView::OnAutoclickButtonPressed(views::Button* sender) { ...@@ -187,8 +204,10 @@ void AutoclickMenuView::OnAutoclickButtonPressed(views::Button* sender) {
} else if (sender == pause_button_) { } else if (sender == pause_button_) {
// If the pause button was already selected, tapping it again turns off // If the pause button was already selected, tapping it again turns off
// pause and returns to the previous type. // pause and returns to the previous type.
type = pause_button_->GetToggled() ? event_type_ if (pause_button_->IsToggled())
: AutoclickEventType::kNoAction; type = event_type_;
else
type = AutoclickEventType::kNoAction;
} else { } else {
return; return;
} }
...@@ -198,35 +217,8 @@ void AutoclickMenuView::OnAutoclickButtonPressed(views::Button* sender) { ...@@ -198,35 +217,8 @@ void AutoclickMenuView::OnAutoclickButtonPressed(views::Button* sender) {
type); type);
} }
void AutoclickMenuView::OnPositionButtonPressed() { const char* AutoclickMenuView::GetClassName() const {
FloatingMenuPosition new_position; return "AutoclickMenuView";
// Rotate clockwise throughout the screen positions.
switch (
Shell::Get()->accessibility_controller()->GetAutoclickMenuPosition()) {
case FloatingMenuPosition::kBottomRight:
new_position = FloatingMenuPosition::kBottomLeft;
break;
case FloatingMenuPosition::kBottomLeft:
new_position = FloatingMenuPosition::kTopLeft;
break;
case FloatingMenuPosition::kTopLeft:
new_position = FloatingMenuPosition::kTopRight;
break;
case FloatingMenuPosition::kTopRight:
new_position = FloatingMenuPosition::kBottomRight;
break;
case FloatingMenuPosition::kSystemDefault:
new_position = base::i18n::IsRTL() ? FloatingMenuPosition::kTopLeft
: FloatingMenuPosition::kBottomLeft;
break;
}
Shell::Get()->accessibility_controller()->SetAutoclickMenuPosition(
new_position);
base::RecordAction(base::UserMetricsAction(
"Accessibility.CrosAutoclick.TrayMenu.ChangePosition"));
} }
BEGIN_METADATA(AutoclickMenuView, views::BoxLayoutView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -7,9 +7,7 @@ ...@@ -7,9 +7,7 @@
#include "ash/public/cpp/accessibility_controller_enums.h" #include "ash/public/cpp/accessibility_controller_enums.h"
#include "ash/system/tray/tray_bubble_view.h" #include "ash/system/tray/tray_bubble_view.h"
#include "ui/views/layout/box_layout_view.h" #include "ui/views/controls/button/button.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
namespace ash { namespace ash {
...@@ -17,10 +15,8 @@ class FloatingMenuButton; ...@@ -17,10 +15,8 @@ class FloatingMenuButton;
// View for the Automatic Clicks Menu, which creates and manages // View for the Automatic Clicks Menu, which creates and manages
// individual buttons to control Automatic Clicks settings. // individual buttons to control Automatic Clicks settings.
class AutoclickMenuView : public views::BoxLayoutView { class AutoclickMenuView : public views::View, public views::ButtonListener {
public: public:
METADATA_HEADER(AutoclickMenuView);
// Used for testing. Start at 1 because a view IDs should not be 0. // Used for testing. Start at 1 because a view IDs should not be 0.
enum class ButtonId { enum class ButtonId {
kPosition = 1, kPosition = 1,
...@@ -33,37 +29,35 @@ class AutoclickMenuView : public views::BoxLayoutView { ...@@ -33,37 +29,35 @@ class AutoclickMenuView : public views::BoxLayoutView {
}; };
AutoclickMenuView(AutoclickEventType type, FloatingMenuPosition position); AutoclickMenuView(AutoclickEventType type, FloatingMenuPosition position);
AutoclickMenuView(const AutoclickMenuView&) = delete;
AutoclickMenuView& operator=(const AutoclickMenuView&) = delete;
~AutoclickMenuView() override = default; ~AutoclickMenuView() override = default;
void UpdateEventType(AutoclickEventType type); void UpdateEventType(AutoclickEventType type);
void UpdatePosition(FloatingMenuPosition position); void UpdatePosition(FloatingMenuPosition position);
private: // views::ButtonListener:
void OnAutoclickButtonPressed(views::Button* sender); void ButtonPressed(views::Button* sender, const ui::Event& event) override;
void OnPositionButtonPressed();
// views::View:
const char* GetClassName() const override;
private:
// Unowned. Owned by views hierarchy. // Unowned. Owned by views hierarchy.
FloatingMenuButton* left_click_button_ = nullptr; FloatingMenuButton* left_click_button_;
FloatingMenuButton* right_click_button_ = nullptr; FloatingMenuButton* right_click_button_;
FloatingMenuButton* double_click_button_ = nullptr; FloatingMenuButton* double_click_button_;
FloatingMenuButton* drag_button_ = nullptr; FloatingMenuButton* drag_button_;
FloatingMenuButton* scroll_button_ = nullptr; FloatingMenuButton* scroll_button_ = nullptr;
FloatingMenuButton* pause_button_ = nullptr; FloatingMenuButton* pause_button_;
FloatingMenuButton* position_button_ = nullptr; FloatingMenuButton* position_button_;
// The most recently selected event_type_ excluding kNoAction. This is used // The most recently selected event_type_ excluding kNoAction. This is used
// when the pause button is selected in order to unpause and reset to the // when the pause button is selected in order to unpause and reset to the
// previous state. // previous state.
AutoclickEventType event_type_ = AutoclickEventType::kLeftClick; AutoclickEventType event_type_ = AutoclickEventType::kLeftClick;
};
BEGIN_VIEW_BUILDER(/* no export */, AutoclickMenuView, views::BoxLayoutView) DISALLOW_COPY_AND_ASSIGN(AutoclickMenuView);
END_VIEW_BUILDER };
} // namespace ash } // namespace ash
DEFINE_VIEW_BUILDER(/* no export */, ash::AutoclickMenuView)
#endif // ASH_SYSTEM_ACCESSIBILITY_AUTOCLICK_MENU_VIEW_H_ #endif // ASH_SYSTEM_ACCESSIBILITY_AUTOCLICK_MENU_VIEW_H_
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "ash/system/accessibility/autoclick_menu_bubble_controller.h" #include "ash/system/accessibility/autoclick_menu_bubble_controller.h"
#include "ash/system/accessibility/floating_menu_button.h" #include "ash/system/accessibility/floating_menu_button.h"
#include "ash/system/unified/custom_shape_button.h" #include "ash/system/unified/custom_shape_button.h"
#include "base/bind.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
...@@ -22,8 +21,6 @@ ...@@ -22,8 +21,6 @@
#include "ui/gfx/vector_icon_types.h" #include "ui/gfx/vector_icon_types.h"
#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/controls/highlight_path_generator.h"
#include "ui/views/masked_targeter_delegate.h" #include "ui/views/masked_targeter_delegate.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/metadata_impl_macros.h"
#include "ui/views/view.h" #include "ui/views/view.h"
namespace ash { namespace ash {
...@@ -47,30 +44,25 @@ SkColor HoveredButtonColor() { ...@@ -47,30 +44,25 @@ SkColor HoveredButtonColor() {
} // namespace } // namespace
// The close button for the automatic clicks scroll bubble. // The close button for the automatic clicks scroll bubble.
class AutoclickScrollCloseButton : public FloatingMenuButton { class AutoclickScrollCloseButton : public FloatingMenuButton,
public views::ButtonListener {
public: public:
METADATA_HEADER(AutoclickScrollCloseButton);
AutoclickScrollCloseButton() AutoclickScrollCloseButton()
: FloatingMenuButton( : FloatingMenuButton(this,
base::BindRepeating(&AutoclickScrollCloseButton::OnButtonPressed, kAutoclickCloseIcon,
base::Unretained(this)), IDS_ASH_AUTOCLICK_SCROLL_CLOSE,
kAutoclickCloseIcon, /*flip_for_rtl=*/false,
IDS_ASH_AUTOCLICK_SCROLL_CLOSE, kScrollButtonCloseSizeDips,
/*flip_for_rtl=*/false, /*draw_highlight=*/false,
kScrollButtonCloseSizeDips, /*is_a11y_togglable=*/false) {
/*draw_highlight=*/false,
/*is_a11y_togglable=*/false) {
views::View::SetID( views::View::SetID(
static_cast<int>(AutoclickScrollView::ButtonId::kCloseScroll)); static_cast<int>(AutoclickScrollView::ButtonId::kCloseScroll));
} }
AutoclickScrollCloseButton(const AutoclickScrollCloseButton&) = delete;
AutoclickScrollCloseButton& operator=(const AutoclickScrollCloseButton&) =
delete;
~AutoclickScrollCloseButton() override = default; ~AutoclickScrollCloseButton() override = default;
void OnButtonPressed() { // views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override {
Shell::Get()->autoclick_controller()->DoScrollAction( Shell::Get()->autoclick_controller()->DoScrollAction(
AutoclickController::ScrollPadAction::kScrollClose); AutoclickController::ScrollPadAction::kScrollClose);
base::RecordAction(base::UserMetricsAction( base::RecordAction(base::UserMetricsAction(
...@@ -102,28 +94,28 @@ class AutoclickScrollCloseButton : public FloatingMenuButton { ...@@ -102,28 +94,28 @@ class AutoclickScrollCloseButton : public FloatingMenuButton {
views::ImageButton::PaintButtonContents(canvas); views::ImageButton::PaintButtonContents(canvas);
} }
const char* GetClassName() const override {
return "AutoclickScrollCloseButton";
}
private: private:
bool hovered_ = false; bool hovered_ = false;
DISALLOW_COPY_AND_ASSIGN(AutoclickScrollCloseButton);
}; };
BEGIN_METADATA(AutoclickScrollCloseButton, FloatingMenuButton)
END_METADATA
// A single scroll button (up/down/left/right) for automatic clicks scroll // A single scroll button (up/down/left/right) for automatic clicks scroll
// bubble. Subclasses a MaskedTargeterDelegate in order to only get events over // bubble. Subclasses a MaskedTargeterDelegate in order to only get events over
// the button's custom shape, rather than over the whole rectangle which // the button's custom shape, rather than over the whole rectangle which
// encloses the button. // encloses the button.
class AutoclickScrollButton : public CustomShapeButton, class AutoclickScrollButton : public CustomShapeButton,
public views::MaskedTargeterDelegate { public views::MaskedTargeterDelegate,
public views::ButtonListener {
public: public:
METADATA_HEADER(AutoclickScrollButton);
AutoclickScrollButton(AutoclickController::ScrollPadAction action, AutoclickScrollButton(AutoclickController::ScrollPadAction action,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id, int accessible_name_id,
AutoclickScrollView::ButtonId id) AutoclickScrollView::ButtonId id)
: CustomShapeButton( : CustomShapeButton(PressedCallback(this, this)),
base::BindRepeating(&AutoclickScrollButton::OnButtonPressed,
base::Unretained(this))),
action_(action), action_(action),
icon_(icon) { icon_(icon) {
views::View::SetID(static_cast<int>(id)); views::View::SetID(static_cast<int>(id));
...@@ -153,8 +145,6 @@ class AutoclickScrollButton : public CustomShapeButton, ...@@ -153,8 +145,6 @@ class AutoclickScrollButton : public CustomShapeButton,
views::InstallRoundRectHighlightPathGenerator(this, gfx::Insets(), 0.f); views::InstallRoundRectHighlightPathGenerator(this, gfx::Insets(), 0.f);
} }
AutoclickScrollButton(const AutoclickScrollButton&) = delete;
AutoclickScrollButton& operator=(const AutoclickScrollButton&) = delete;
~AutoclickScrollButton() override { ~AutoclickScrollButton() override {
Shell::Get()->autoclick_controller()->OnExitedScrollButton(); Shell::Get()->autoclick_controller()->OnExitedScrollButton();
...@@ -190,7 +180,10 @@ class AutoclickScrollButton : public CustomShapeButton, ...@@ -190,7 +180,10 @@ class AutoclickScrollButton : public CustomShapeButton,
scroll_hover_timer_->Reset(); scroll_hover_timer_->Reset();
} }
void OnButtonPressed() { ProcessAction(action_); } // views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override {
ProcessAction(action_);
}
// CustomShapeButton: // CustomShapeButton:
SkPath CreateCustomShapePath(const gfx::Rect& bounds) const override { SkPath CreateCustomShapePath(const gfx::Rect& bounds) const override {
...@@ -322,16 +315,17 @@ class AutoclickScrollButton : public CustomShapeButton, ...@@ -322,16 +315,17 @@ class AutoclickScrollButton : public CustomShapeButton,
SchedulePaint(); SchedulePaint();
} }
const char* GetClassName() const override { return "AutoclickScrollButton"; }
private: private:
const AutoclickController::ScrollPadAction action_; const AutoclickController::ScrollPadAction action_;
gfx::Size size_; gfx::Size size_;
std::unique_ptr<base::RetainingOneShotTimer> scroll_hover_timer_; std::unique_ptr<base::RetainingOneShotTimer> scroll_hover_timer_;
bool active_ = false; bool active_ = false;
const gfx::VectorIcon& icon_; const gfx::VectorIcon& icon_;
};
BEGIN_METADATA(AutoclickScrollButton, CustomShapeButton) DISALLOW_COPY_AND_ASSIGN(AutoclickScrollButton);
END_METADATA };
// ------ AutoclickScrollBubbleView ------ // // ------ AutoclickScrollBubbleView ------ //
......
...@@ -18,11 +18,9 @@ ...@@ -18,11 +18,9 @@
#include "ash/system/accessibility/select_to_speak_tray.h" #include "ash/system/accessibility/select_to_speak_tray.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/virtual_keyboard/virtual_keyboard_tray.h" #include "ash/system/virtual_keyboard/virtual_keyboard_tray.h"
#include "base/bind.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/views/controls/separator.h" #include "ui/views/controls/separator.h"
#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
...@@ -111,11 +109,15 @@ bool FloatingAccessibilityBubbleView::AcceleratorPressed( ...@@ -111,11 +109,15 @@ bool FloatingAccessibilityBubbleView::AcceleratorPressed(
return true; return true;
} }
BEGIN_METADATA(FloatingAccessibilityBubbleView, TrayBubbleView) const char* FloatingAccessibilityBubbleView::GetClassName() const {
END_METADATA return "FloatingAccessibilityBubbleView";
}
FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate) FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate)
: delegate_(delegate) { : delegate_(delegate) {
std::unique_ptr<views::BoxLayout> layout = std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, gfx::Insets(), 0);
SetLayoutManager(std::move(layout));
Shelf* shelf = RootWindowController::ForTargetRootWindow()->shelf(); Shelf* shelf = RootWindowController::ForTargetRootWindow()->shelf();
std::unique_ptr<views::View> feature_buttons_container = std::unique_ptr<views::View> feature_buttons_container =
...@@ -134,10 +136,7 @@ FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate) ...@@ -134,10 +136,7 @@ FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate)
CreateButtonRowContainer(kUnifiedTopShortcutSpacing); CreateButtonRowContainer(kUnifiedTopShortcutSpacing);
a11y_tray_button_ = a11y_tray_button_ =
tray_button_container->AddChildView(std::make_unique<FloatingMenuButton>( tray_button_container->AddChildView(std::make_unique<FloatingMenuButton>(
base::BindRepeating( this, kUnifiedMenuAccessibilityIcon,
&FloatingAccessibilityView::OnA11yTrayButtonPressed,
base::Unretained(this)),
kUnifiedMenuAccessibilityIcon,
IDS_ASH_FLOATING_ACCESSIBILITY_DETAILED_MENU_OPEN, IDS_ASH_FLOATING_ACCESSIBILITY_DETAILED_MENU_OPEN,
/*flip_for_rtl*/ true)); /*flip_for_rtl*/ true));
...@@ -145,10 +144,7 @@ FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate) ...@@ -145,10 +144,7 @@ FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate)
CreateButtonRowContainer(kPanelPositionButtonPadding); CreateButtonRowContainer(kPanelPositionButtonPadding);
position_button_ = position_button_container->AddChildView( position_button_ = position_button_container->AddChildView(
std::make_unique<FloatingMenuButton>( std::make_unique<FloatingMenuButton>(
base::BindRepeating( this, kAutoclickPositionBottomLeftIcon,
&FloatingAccessibilityView::OnPositionButtonPressed,
base::Unretained(this)),
kAutoclickPositionBottomLeftIcon,
IDS_ASH_AUTOCLICK_OPTION_CHANGE_POSITION, /*flip_for_rtl*/ false, IDS_ASH_AUTOCLICK_OPTION_CHANGE_POSITION, /*flip_for_rtl*/ false,
kPanelPositionButtonSize, false, /* is_a11y_togglable */ false)); kPanelPositionButtonSize, false, /* is_a11y_togglable */ false));
...@@ -158,8 +154,8 @@ FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate) ...@@ -158,8 +154,8 @@ FloatingAccessibilityView::FloatingAccessibilityView(Delegate* delegate)
AddChildView(std::move(position_button_container)); AddChildView(std::move(position_button_container));
// Set view IDs for testing. // Set view IDs for testing.
position_button_->SetID(static_cast<int>(ButtonId::kPosition)); position_button_->SetId(static_cast<int>(ButtonId::kPosition));
a11y_tray_button_->SetID(static_cast<int>(ButtonId::kSettingsList)); a11y_tray_button_->SetId(static_cast<int>(ButtonId::kSettingsList));
dictation_button_->SetID(static_cast<int>(ButtonId::kDictation)); dictation_button_->SetID(static_cast<int>(ButtonId::kDictation));
select_to_speak_button_->SetID(static_cast<int>(ButtonId::kSelectToSpeak)); select_to_speak_button_->SetID(static_cast<int>(ButtonId::kSelectToSpeak));
virtual_keyboard_button_->SetID(static_cast<int>(ButtonId::kVirtualKeyboard)); virtual_keyboard_button_->SetID(static_cast<int>(ButtonId::kVirtualKeyboard));
...@@ -207,37 +203,47 @@ void FloatingAccessibilityView::FocusOnDetailedViewButton() { ...@@ -207,37 +203,47 @@ void FloatingAccessibilityView::FocusOnDetailedViewButton() {
a11y_tray_button_->RequestFocus(); a11y_tray_button_->RequestFocus();
} }
void FloatingAccessibilityView::OnA11yTrayButtonPressed() { void FloatingAccessibilityView::ButtonPressed(views::Button* sender,
delegate_->OnDetailedMenuEnabled(!a11y_tray_button_->GetToggled()); const ui::Event& event) {
} if (sender == a11y_tray_button_) {
delegate_->OnDetailedMenuEnabled(!a11y_tray_button_->IsToggled());
return;
}
void FloatingAccessibilityView::OnPositionButtonPressed() { if (sender == position_button_) {
FloatingMenuPosition new_position; FloatingMenuPosition new_position;
// Rotate clockwise throughout the screen positions. // Rotate clockwise throughout the screen positions.
switch (Shell::Get()->accessibility_controller()->GetFloatingMenuPosition()) { switch (
case FloatingMenuPosition::kBottomRight: Shell::Get()->accessibility_controller()->GetFloatingMenuPosition()) {
new_position = FloatingMenuPosition::kBottomLeft; case FloatingMenuPosition::kBottomRight:
break; new_position = FloatingMenuPosition::kBottomLeft;
case FloatingMenuPosition::kBottomLeft: break;
new_position = FloatingMenuPosition::kTopLeft; case FloatingMenuPosition::kBottomLeft:
break; new_position = FloatingMenuPosition::kTopLeft;
case FloatingMenuPosition::kTopLeft: break;
new_position = FloatingMenuPosition::kTopRight; case FloatingMenuPosition::kTopLeft:
break; new_position = FloatingMenuPosition::kTopRight;
case FloatingMenuPosition::kTopRight: break;
new_position = FloatingMenuPosition::kBottomRight; case FloatingMenuPosition::kTopRight:
break; new_position = FloatingMenuPosition::kBottomRight;
case FloatingMenuPosition::kSystemDefault: break;
new_position = base::i18n::IsRTL() ? FloatingMenuPosition::kTopLeft case FloatingMenuPosition::kSystemDefault:
: FloatingMenuPosition::kBottomLeft; new_position = base::i18n::IsRTL() ? FloatingMenuPosition::kTopLeft
break; : FloatingMenuPosition::kBottomLeft;
break;
}
Shell::Get()->accessibility_controller()->SetFloatingMenuPosition(
new_position);
Shell::Get()
->accessibility_controller()
->TriggerAccessibilityAlertWithMessage(
GetDescriptionForMovedToPosition(new_position));
} }
Shell::Get()->accessibility_controller()->SetFloatingMenuPosition( return;
new_position); }
Shell::Get()
->accessibility_controller() const char* FloatingAccessibilityView::GetClassName() const {
->TriggerAccessibilityAlertWithMessage( return "AccessiblityFloatingView";
GetDescriptionForMovedToPosition(new_position));
} }
void FloatingAccessibilityView::OnViewVisibilityChanged( void FloatingAccessibilityView::OnViewVisibilityChanged(
...@@ -248,7 +254,4 @@ void FloatingAccessibilityView::OnViewVisibilityChanged( ...@@ -248,7 +254,4 @@ void FloatingAccessibilityView::OnViewVisibilityChanged(
delegate_->OnLayoutChanged(); delegate_->OnLayoutChanged();
} }
BEGIN_METADATA(FloatingAccessibilityView, views::BoxLayoutView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -11,9 +11,6 @@ ...@@ -11,9 +11,6 @@
#include "ash/shell_observer.h" #include "ash/shell_observer.h"
#include "ash/system/tray/tray_bubble_view.h" #include "ash/system/tray/tray_bubble_view.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/layout/box_layout_view.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
namespace ash { namespace ash {
...@@ -22,8 +19,6 @@ class TrayBackgroundView; ...@@ -22,8 +19,6 @@ class TrayBackgroundView;
class FloatingAccessibilityBubbleView : public TrayBubbleView { class FloatingAccessibilityBubbleView : public TrayBubbleView {
public: public:
METADATA_HEADER(FloatingAccessibilityBubbleView);
explicit FloatingAccessibilityBubbleView( explicit FloatingAccessibilityBubbleView(
const TrayBubbleView::InitParams& init_params); const TrayBubbleView::InitParams& init_params);
FloatingAccessibilityBubbleView(const FloatingAccessibilityBubbleView&) = FloatingAccessibilityBubbleView(const FloatingAccessibilityBubbleView&) =
...@@ -35,12 +30,10 @@ class FloatingAccessibilityBubbleView : public TrayBubbleView { ...@@ -35,12 +30,10 @@ class FloatingAccessibilityBubbleView : public TrayBubbleView {
// TrayBubbleView: // TrayBubbleView:
bool IsAnchoredToStatusArea() const override; bool IsAnchoredToStatusArea() const override;
bool AcceleratorPressed(const ui::Accelerator& accelerator) override; bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
};
BEGIN_VIEW_BUILDER(/* no export */, // views::View:
FloatingAccessibilityBubbleView, const char* GetClassName() const override;
TrayBubbleView) };
END_VIEW_BUILDER
// This floating view displays the currently enabled accessibility options, // This floating view displays the currently enabled accessibility options,
// along with buttons to configure them. // along with buttons to configure them.
...@@ -48,11 +41,10 @@ END_VIEW_BUILDER ...@@ -48,11 +41,10 @@ END_VIEW_BUILDER
// ---- ?[Dictation] ?[SelectToSpeak] ?[VirtualKeyboard] // ---- ?[Dictation] ?[SelectToSpeak] ?[VirtualKeyboard]
// ---- | [Open settings list] // ---- | [Open settings list]
// ---- | [Change menu location] // ---- | [Change menu location]
class FloatingAccessibilityView : public views::BoxLayoutView, class FloatingAccessibilityView : public views::View,
public views::ButtonListener,
public views::ViewObserver { public views::ViewObserver {
public: public:
METADATA_HEADER(FloatingAccessibilityView);
// Used for testing. Starts 1 because views IDs should not be 0. // Used for testing. Starts 1 because views IDs should not be 0.
enum ButtonId { enum ButtonId {
kPosition = 1, kPosition = 1,
...@@ -87,8 +79,11 @@ class FloatingAccessibilityView : public views::BoxLayoutView, ...@@ -87,8 +79,11 @@ class FloatingAccessibilityView : public views::BoxLayoutView,
void FocusOnDetailedViewButton(); void FocusOnDetailedViewButton();
private: private:
void OnA11yTrayButtonPressed(); // views::ButtonListener:
void OnPositionButtonPressed(); void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View:
const char* GetClassName() const override;
// views::ViewObserver: // views::ViewObserver:
void OnViewVisibilityChanged(views::View* observed_view, void OnViewVisibilityChanged(views::View* observed_view,
...@@ -106,14 +101,6 @@ class FloatingAccessibilityView : public views::BoxLayoutView, ...@@ -106,14 +101,6 @@ class FloatingAccessibilityView : public views::BoxLayoutView,
Delegate* const delegate_; Delegate* const delegate_;
}; };
BEGIN_VIEW_BUILDER(/* no export */,
FloatingAccessibilityView,
views::BoxLayoutView)
END_VIEW_BUILDER
} // namespace ash } // namespace ash
DEFINE_VIEW_BUILDER(/* no export */, ash::FloatingAccessibilityBubbleView)
DEFINE_VIEW_BUILDER(/* no export */, ash::FloatingAccessibilityView)
#endif // ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_VIEW_H_ #endif // ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_VIEW_H_
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "ash/system/accessibility/floating_menu_button.h" #include "ash/system/accessibility/floating_menu_button.h"
#include "ash/style/ash_color_provider.h" #include "ash/style/ash_color_provider.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_utils.h" #include "ash/system/tray/tray_popup_utils.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -17,23 +18,14 @@ ...@@ -17,23 +18,14 @@
#include "ui/views/animation/ink_drop_impl.h" #include "ui/views/animation/ink_drop_impl.h"
#include "ui/views/animation/ink_drop_mask.h" #include "ui/views/animation/ink_drop_mask.h"
#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/controls/highlight_path_generator.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
FloatingMenuButton::FloatingMenuButton() { FloatingMenuButton::FloatingMenuButton(views::ButtonListener* listener,
SetImageHorizontalAlignment(ALIGN_CENTER);
SetImageVerticalAlignment(ALIGN_MIDDLE);
SetFlipCanvasOnPaintForRTLUI(false);
TrayPopupUtils::ConfigureTrayPopupButton(this);
views::InstallCircleHighlightPathGenerator(this);
}
FloatingMenuButton::FloatingMenuButton(views::Button::PressedCallback callback,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id, int accessible_name_id,
bool flip_for_rtl) bool flip_for_rtl)
: FloatingMenuButton(callback, : FloatingMenuButton(listener,
icon, icon,
accessible_name_id, accessible_name_id,
flip_for_rtl, flip_for_rtl,
...@@ -41,14 +33,14 @@ FloatingMenuButton::FloatingMenuButton(views::Button::PressedCallback callback, ...@@ -41,14 +33,14 @@ FloatingMenuButton::FloatingMenuButton(views::Button::PressedCallback callback,
/*draw_highlight=*/true, /*draw_highlight=*/true,
/*is_a11y_togglable=*/true) {} /*is_a11y_togglable=*/true) {}
FloatingMenuButton::FloatingMenuButton(views::Button::PressedCallback callback, FloatingMenuButton::FloatingMenuButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id, int accessible_name_id,
bool flip_for_rtl, bool flip_for_rtl,
int size, int size,
bool draw_highlight, bool draw_highlight,
bool is_a11y_togglable) bool is_a11y_togglable)
: views::ImageButton(callback), : views::ImageButton(listener),
icon_(&icon), icon_(&icon),
size_(size), size_(size),
draw_highlight_(draw_highlight), draw_highlight_(draw_highlight),
...@@ -65,44 +57,14 @@ FloatingMenuButton::FloatingMenuButton(views::Button::PressedCallback callback, ...@@ -65,44 +57,14 @@ FloatingMenuButton::FloatingMenuButton(views::Button::PressedCallback callback,
FloatingMenuButton::~FloatingMenuButton() = default; FloatingMenuButton::~FloatingMenuButton() = default;
void FloatingMenuButton::SetVectorIcon(const gfx::VectorIcon& icon) { void FloatingMenuButton::SetVectorIcon(const gfx::VectorIcon& icon) {
if (icon_ == &icon)
return;
icon_ = &icon; icon_ = &icon;
UpdateImage(); UpdateImage();
} }
bool FloatingMenuButton::GetA11yTogglable() const {
return is_a11y_togglable_;
}
void FloatingMenuButton::SetA11yTogglable(bool a11y_togglable) {
if (a11y_togglable == is_a11y_togglable_)
return;
is_a11y_togglable_ = a11y_togglable;
OnPropertyChanged(&is_a11y_togglable_, views::kPropertyEffectsPaint);
}
bool FloatingMenuButton::GetDrawHighlight() const {
return draw_highlight_;
}
void FloatingMenuButton::SetDrawHighlight(bool draw_highlight) {
if (draw_highlight_ == draw_highlight)
return;
draw_highlight_ = draw_highlight;
OnPropertyChanged(&draw_highlight_, views::kPropertyEffectsPaint);
}
bool FloatingMenuButton::GetToggled() const {
return toggled_;
}
void FloatingMenuButton::SetToggled(bool toggled) { void FloatingMenuButton::SetToggled(bool toggled) {
if (toggled_ == toggled)
return;
toggled_ = toggled; toggled_ = toggled;
UpdateImage(); UpdateImage();
OnPropertyChanged(&toggled_, views::PropertyEffects::kPropertyEffectsPaint); SchedulePaint();
} }
void FloatingMenuButton::PaintButtonContents(gfx::Canvas* canvas) { void FloatingMenuButton::PaintButtonContents(gfx::Canvas* canvas) {
...@@ -137,6 +99,10 @@ void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) { ...@@ -137,6 +99,10 @@ void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
: ax::mojom::CheckedState::kFalse); : ax::mojom::CheckedState::kFalse);
} }
const char* FloatingMenuButton::GetClassName() const {
return "FloatingMenuButton";
}
std::unique_ptr<views::InkDrop> FloatingMenuButton::CreateInkDrop() { std::unique_ptr<views::InkDrop> FloatingMenuButton::CreateInkDrop() {
return TrayPopupUtils::CreateInkDrop(this); return TrayPopupUtils::CreateInkDrop(this);
} }
...@@ -161,16 +127,14 @@ void FloatingMenuButton::OnThemeChanged() { ...@@ -161,16 +127,14 @@ void FloatingMenuButton::OnThemeChanged() {
SchedulePaint(); SchedulePaint();
} }
void FloatingMenuButton::SetId(int id) {
views::View::SetID(id);
}
void FloatingMenuButton::UpdateImage() { void FloatingMenuButton::UpdateImage() {
DCHECK(icon_); DCHECK(icon_);
AshColorProvider::Get()->DecorateIconButton( AshColorProvider::Get()->DecorateIconButton(
this, *icon_, toggled_, GetDefaultSizeOfVectorIcon(*icon_)); this, *icon_, toggled_, GetDefaultSizeOfVectorIcon(*icon_));
} }
BEGIN_METADATA(FloatingMenuButton, views::ImageButton)
ADD_PROPERTY_METADATA(bool, A11yTogglable)
ADD_PROPERTY_METADATA(bool, DrawHighlight)
ADD_PROPERTY_METADATA(bool, Toggled)
END_METADATA
} // namespace ash } // namespace ash
...@@ -5,11 +5,7 @@ ...@@ -5,11 +5,7 @@
#ifndef ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_ #ifndef ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_
#define ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_ #define ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_
#include "ash/system/tray/tray_constants.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/button/image_button.h" #include "ui/views/controls/button/image_button.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
namespace gfx { namespace gfx {
struct VectorIcon; struct VectorIcon;
...@@ -22,70 +18,57 @@ namespace ash { ...@@ -22,70 +18,57 @@ namespace ash {
class FloatingMenuButton : public views::ImageButton { class FloatingMenuButton : public views::ImageButton {
public: public:
METADATA_HEADER(FloatingMenuButton); FloatingMenuButton(views::ButtonListener* listener,
FloatingMenuButton();
FloatingMenuButton(views::Button::PressedCallback callback,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id, int accessible_name_id,
bool flip_for_rtl); bool flip_for_rtl);
FloatingMenuButton(views::Button::PressedCallback callback, FloatingMenuButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id, int accessible_name_id,
bool flip_for_rtl, bool flip_for_rtl,
int size, int size,
bool draw_highlight, bool draw_highlight,
bool is_a11y_togglable); bool is_a11y_togglable);
FloatingMenuButton(const FloatingMenuButton&) = delete;
FloatingMenuButton& operator=(const FloatingMenuButton&) = delete;
~FloatingMenuButton() override; ~FloatingMenuButton() override;
// Set the vector icon shown in a circle. // Set the vector icon shown in a circle.
void SetVectorIcon(const gfx::VectorIcon& icon); void SetVectorIcon(const gfx::VectorIcon& icon);
bool GetA11yTogglable() const; // Change the toggle state.
void SetA11yTogglable(bool a11y_togglable);
bool GetDrawHighlight() const;
void SetDrawHighlight(bool draw_highlight);
// Toggle state property.
bool GetToggled() const;
void SetToggled(bool toggled); void SetToggled(bool toggled);
bool IsToggled() { return toggled_; }
// views::ImageButton: // views::ImageButton:
void PaintButtonContents(gfx::Canvas* canvas) override; void PaintButtonContents(gfx::Canvas* canvas) override;
gfx::Size CalculatePreferredSize() const override; gfx::Size CalculatePreferredSize() const override;
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
const char* GetClassName() const override;
std::unique_ptr<views::InkDrop> CreateInkDrop() override; std::unique_ptr<views::InkDrop> CreateInkDrop() override;
std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override; std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override;
std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight() std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
const override; const override;
void OnThemeChanged() override; void OnThemeChanged() override;
// Used in tests.
void SetId(int id);
private: private:
void UpdateImage(); void UpdateImage();
const gfx::VectorIcon* icon_; const gfx::VectorIcon* icon_;
// True if the button is currently toggled. // True if the button is currently toggled.
bool toggled_ = false; bool toggled_ = false;
int size_ = kTrayItemSize; int size_;
bool draw_highlight_ = true; const bool draw_highlight_;
// Whether this button will be described as togglable to screen reading tools. // Whether this button will be described as togglable to screen reading tools.
bool is_a11y_togglable_ = true; const bool is_a11y_togglable_;
};
BEGIN_VIEW_BUILDER(/* no export */, FloatingMenuButton, views::ImageButton) DISALLOW_COPY_AND_ASSIGN(FloatingMenuButton);
VIEW_BUILDER_PROPERTY(bool, A11yTogglable) };
VIEW_BUILDER_PROPERTY(bool, DrawHighlight)
VIEW_BUILDER_PROPERTY(bool, Toggled)
VIEW_BUILDER_PROPERTY(const gfx::VectorIcon&, VectorIcon)
END_VIEW_BUILDER
} // namespace ash } // namespace ash
DEFINE_VIEW_BUILDER(/* no export */, ash::FloatingMenuButton)
#endif // ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_ #endif // ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_
...@@ -8,18 +8,15 @@ ...@@ -8,18 +8,15 @@
#include "ash/strings/grit/ash_strings.h" #include "ash/strings/grit/ash_strings.h"
#include "ash/system/accessibility/floating_menu_button.h" #include "ash/system/accessibility/floating_menu_button.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "base/bind.h"
#include "cc/paint/paint_flags.h" #include "cc/paint/paint_flags.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
#include "ui/accessibility/mojom/ax_node_data.mojom-shared.h" #include "ui/accessibility/mojom/ax_node_data.mojom-shared.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/events/event.h" #include "ui/events/event.h"
#include "ui/gfx/canvas.h" #include "ui/gfx/canvas.h"
#include "ui/gfx/color_palette.h" #include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/point_f.h" #include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
...@@ -32,29 +29,28 @@ constexpr int kFocusRingBufferDp = 1; ...@@ -32,29 +29,28 @@ constexpr int kFocusRingBufferDp = 1;
constexpr int kRadiusDp = 18; constexpr int kRadiusDp = 18;
} // namespace } // namespace
SwitchAccessBackButtonView::SwitchAccessBackButtonView(bool for_menu) { SwitchAccessBackButtonView::SwitchAccessBackButtonView(bool for_menu)
: back_button_(new FloatingMenuButton(
this,
for_menu ? kSwitchAccessCloseIcon : kSwitchAccessBackIcon,
IDS_ASH_SWITCH_ACCESS_BACK_BUTTON_DESCRIPTION,
/*flip_for_rtl=*/false,
2 * kRadiusDp,
/*draw_highlight=*/true,
/*is_a11y_togglable=*/false)) {
views::BoxLayout* layout =
SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, gfx::Insets()));
layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kCenter);
AddChildView(back_button_);
// Calculate the side length of the bounding box, with room for the two-color // Calculate the side length of the bounding box, with room for the two-color
// focus ring on either side. // focus ring on either side.
int focus_ring_width_per_side = int focus_ring_width_per_side =
2 * kFocusRingSingleColorWidthDp + kFocusRingBufferDp; 2 * kFocusRingSingleColorWidthDp + kFocusRingBufferDp;
int side_length = 2 * (kRadiusDp + focus_ring_width_per_side); int side_length = 2 * (kRadiusDp + focus_ring_width_per_side);
gfx::Size size(side_length, side_length);
views::Builder<SwitchAccessBackButtonView>(this) SetSize(size);
.SetMainAxisAlignment(views::BoxLayout::MainAxisAlignment::kCenter)
.AddChildren(
{views::Builder<FloatingMenuButton>()
.CopyAddressTo(&back_button_)
.SetVectorIcon(for_menu ? kSwitchAccessCloseIcon
: kSwitchAccessBackIcon)
.SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_SWITCH_ACCESS_BACK_BUTTON_DESCRIPTION))
.SetPreferredSize(gfx::Size(2 * kRadiusDp, 2 * kRadiusDp))
.SetDrawHighlight(true)
.SetCallback(base::BindRepeating(
&SwitchAccessBackButtonView::OnButtonPressed,
base::Unretained(this)))})
.SetSize(gfx::Size(side_length, side_length))
.BuildChildren();
} }
void SwitchAccessBackButtonView::SetFocusRing(bool should_show) { void SwitchAccessBackButtonView::SetFocusRing(bool should_show) {
...@@ -71,6 +67,12 @@ void SwitchAccessBackButtonView::SetForMenu(bool for_menu) { ...@@ -71,6 +67,12 @@ void SwitchAccessBackButtonView::SetForMenu(bool for_menu) {
back_button_->SetVectorIcon(kSwitchAccessBackIcon); back_button_->SetVectorIcon(kSwitchAccessBackIcon);
} }
void SwitchAccessBackButtonView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
NotifyAccessibilityEvent(ax::mojom::Event::kClicked,
/*send_native_event=*/false);
}
void SwitchAccessBackButtonView::GetAccessibleNodeData( void SwitchAccessBackButtonView::GetAccessibleNodeData(
ui::AXNodeData* node_data) { ui::AXNodeData* node_data) {
node_data->role = ax::mojom::Role::kButton; node_data->role = ax::mojom::Role::kButton;
...@@ -80,6 +82,10 @@ int SwitchAccessBackButtonView::GetHeightForWidth(int w) const { ...@@ -80,6 +82,10 @@ int SwitchAccessBackButtonView::GetHeightForWidth(int w) const {
return w; return w;
} }
const char* SwitchAccessBackButtonView::GetClassName() const {
return "SwitchAccessBackButtonView";
}
void SwitchAccessBackButtonView::OnPaint(gfx::Canvas* canvas) { void SwitchAccessBackButtonView::OnPaint(gfx::Canvas* canvas) {
gfx::Rect rect(GetContentsBounds()); gfx::Rect rect(GetContentsBounds());
cc::PaintFlags flags; cc::PaintFlags flags;
...@@ -102,12 +108,4 @@ void SwitchAccessBackButtonView::OnPaint(gfx::Canvas* canvas) { ...@@ -102,12 +108,4 @@ void SwitchAccessBackButtonView::OnPaint(gfx::Canvas* canvas) {
kRadiusDp + (2 * kFocusRingSingleColorWidthDp), flags); kRadiusDp + (2 * kFocusRingSingleColorWidthDp), flags);
} }
void SwitchAccessBackButtonView::OnButtonPressed() {
NotifyAccessibilityEvent(ax::mojom::Event::kClicked,
/*send_native_event=*/false);
}
BEGIN_METADATA(SwitchAccessBackButtonView, views::BoxLayoutView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -5,9 +5,7 @@ ...@@ -5,9 +5,7 @@
#ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_VIEW_H_ #ifndef ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_VIEW_H_
#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_VIEW_H_ #define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_VIEW_H_
#include "ui/views/layout/box_layout_view.h" #include "ui/views/controls/button/button.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h" #include "ui/views/view.h"
namespace ash { namespace ash {
...@@ -15,10 +13,9 @@ namespace ash { ...@@ -15,10 +13,9 @@ namespace ash {
class FloatingMenuButton; class FloatingMenuButton;
// View for the Switch Access Back Button. // View for the Switch Access Back Button.
class SwitchAccessBackButtonView : public views::BoxLayoutView { class SwitchAccessBackButtonView : public views::View,
public views::ButtonListener {
public: public:
METADATA_HEADER(SwitchAccessBackButtonView);
explicit SwitchAccessBackButtonView(bool for_menu); explicit SwitchAccessBackButtonView(bool for_menu);
~SwitchAccessBackButtonView() override = default; ~SwitchAccessBackButtonView() override = default;
...@@ -29,27 +26,22 @@ class SwitchAccessBackButtonView : public views::BoxLayoutView { ...@@ -29,27 +26,22 @@ class SwitchAccessBackButtonView : public views::BoxLayoutView {
void SetFocusRing(bool should_show); void SetFocusRing(bool should_show);
void SetForMenu(bool for_menu); void SetForMenu(bool for_menu);
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View: // views::View:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
int GetHeightForWidth(int w) const override; int GetHeightForWidth(int w) const override;
const char* GetClassName() const override;
void OnPaint(gfx::Canvas* canvas) override; void OnPaint(gfx::Canvas* canvas) override;
private: private:
void OnButtonPressed();
bool show_focus_ring_ = false; bool show_focus_ring_ = false;
// Owned by views hierarchy. // Owned by views hierarchy.
FloatingMenuButton* back_button_; FloatingMenuButton* back_button_;
}; };
BEGIN_VIEW_BUILDER(/* no export */,
SwitchAccessBackButtonView,
views::BoxLayoutView)
END_VIEW_BUILDER
} // namespace ash } // namespace ash
DEFINE_VIEW_BUILDER(/* no export */, ash::SwitchAccessBackButtonView)
#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_VIEW_H_ #endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_BACK_BUTTON_VIEW_H_
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include "ash/system/accessibility/switch_access_menu_button.h" #include "ash/system/accessibility/switch_access_menu_button.h"
#include "ash/style/ash_color_provider.h" #include "ash/style/ash_color_provider.h"
#include "base/bind.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
#include "ui/accessibility/mojom/ax_node_data.mojom-shared.h" #include "ui/accessibility/mojom/ax_node_data.mojom-shared.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -15,7 +14,6 @@ ...@@ -15,7 +14,6 @@
#include "ui/views/controls/image_view.h" #include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h" #include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
#include "ui/views/style/typography.h" #include "ui/views/style/typography.h"
namespace ash { namespace ash {
...@@ -36,36 +34,31 @@ constexpr int kTextLineHeightDip = 20; ...@@ -36,36 +34,31 @@ constexpr int kTextLineHeightDip = 20;
SwitchAccessMenuButton::SwitchAccessMenuButton(std::string action_name, SwitchAccessMenuButton::SwitchAccessMenuButton(std::string action_name,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int label_text_id) int label_text_id)
: views::Button( : views::Button(this),
base::BindRepeating(&SwitchAccessMenuButton::OnButtonPressed, action_name_(action_name),
base::Unretained(this))), image_view_(new views::ImageView()),
action_name_(action_name) { label_(new views::Label(l10n_util::GetStringUTF16(label_text_id),
views::style::CONTEXT_BUTTON)) {
SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY);
std::unique_ptr<views::BoxLayout> layout = std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kVertical,
gfx::Insets(kButtonTopPaddingDip, kLabelMinSidePaddingDip,
kButtonBottomPaddingDefaultDip, kLabelMinSidePaddingDip),
kLabelTopPaddingDefaultDip);
SkColor icon_color = AshColorProvider::Get()->GetContentLayerColor( SkColor icon_color = AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kIconColorPrimary); AshColorProvider::ContentLayerType::kIconColorPrimary);
SkColor label_color = AshColorProvider::Get()->GetContentLayerColor( SkColor label_color = AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kTextColorPrimary); AshColorProvider::ContentLayerType::kTextColorPrimary);
views::Builder<SwitchAccessMenuButton>(this) image_view_->SetImage(gfx::CreateVectorIcon(icon, kIconSizeDip, icon_color));
.SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY) label_->SetAutoColorReadabilityEnabled(false);
.AddChildren( label_->SetEnabledColor(label_color);
{views::Builder<views::ImageView>() label_->SetMultiLine(true);
.CopyAddressTo(&image_view_) label_->SetMaximumWidth(kLabelMaxWidthDip);
.SetImage(gfx::CreateVectorIcon(icon, kIconSizeDip, icon_color)),
views::Builder<views::Label>()
.CopyAddressTo(&label_)
.SetText(l10n_util::GetStringUTF16(label_text_id))
.SetTextContext(views::style::CONTEXT_BUTTON)
.SetAutoColorReadabilityEnabled(false)
.SetEnabledColor(label_color)
.SetMultiLine(true)
.SetMaximumWidth(kLabelMaxWidthDip)})
.BuildChildren();
std::unique_ptr<views::BoxLayout> layout = std::make_unique<views::BoxLayout>( AddChildView(image_view_);
views::BoxLayout::Orientation::kVertical, AddChildView(label_);
gfx::Insets(kButtonTopPaddingDip, kLabelMinSidePaddingDip,
kButtonBottomPaddingDefaultDip, kLabelMinSidePaddingDip),
kLabelTopPaddingDefaultDip);
// The layout padding changes with the size of the text label. // The layout padding changes with the size of the text label.
gfx::Size label_size = label_->CalculatePreferredSize(); gfx::Size label_size = label_->CalculatePreferredSize();
...@@ -82,18 +75,16 @@ SwitchAccessMenuButton::SwitchAccessMenuButton(std::string action_name, ...@@ -82,18 +75,16 @@ SwitchAccessMenuButton::SwitchAccessMenuButton(std::string action_name,
SetLayoutManager(std::move(layout)); SetLayoutManager(std::move(layout));
} }
void SwitchAccessMenuButton::ButtonPressed(views::Button* sender,
const ui::Event& event) {
NotifyAccessibilityEvent(ax::mojom::Event::kClicked,
/*send_native_event=*/false);
}
void SwitchAccessMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) { void SwitchAccessMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
views::Button::GetAccessibleNodeData(node_data); views::Button::GetAccessibleNodeData(node_data);
node_data->AddStringAttribute(ax::mojom::StringAttribute::kValue, node_data->AddStringAttribute(ax::mojom::StringAttribute::kValue,
action_name_); action_name_);
} }
void SwitchAccessMenuButton::OnButtonPressed() {
NotifyAccessibilityEvent(ax::mojom::Event::kClicked,
/*send_native_event=*/false);
}
BEGIN_METADATA(SwitchAccessMenuButton, views::Button)
END_METADATA
} // namespace ash } // namespace ash
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
#define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_ #define ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
namespace gfx { namespace gfx {
struct VectorIcon; struct VectorIcon;
...@@ -20,10 +18,9 @@ class Label; ...@@ -20,10 +18,9 @@ class Label;
namespace ash { namespace ash {
class SwitchAccessMenuButton : public views::Button { class SwitchAccessMenuButton : public views::Button,
public views::ButtonListener {
public: public:
METADATA_HEADER(SwitchAccessMenuButton);
SwitchAccessMenuButton(std::string action_name, SwitchAccessMenuButton(std::string action_name,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id); int accessible_name_id);
...@@ -34,14 +31,15 @@ class SwitchAccessMenuButton : public views::Button { ...@@ -34,14 +31,15 @@ class SwitchAccessMenuButton : public views::Button {
static constexpr int kWidthDip = 80; static constexpr int kWidthDip = 80;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View: // views::View:
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
private: private:
friend class SwitchAccessMenuBubbleControllerTest; friend class SwitchAccessMenuBubbleControllerTest;
void OnButtonPressed();
std::string action_name_; std::string action_name_;
// Owned by the views hierarchy. // Owned by the views hierarchy.
...@@ -49,11 +47,6 @@ class SwitchAccessMenuButton : public views::Button { ...@@ -49,11 +47,6 @@ class SwitchAccessMenuButton : public views::Button {
views::Label* label_; views::Label* label_;
}; };
BEGIN_VIEW_BUILDER(/* no export */, SwitchAccessMenuButton, views::Button)
END_VIEW_BUILDER
} // namespace ash } // namespace ash
DEFINE_VIEW_BUILDER(/* no export */, ash::SwitchAccessMenuButton)
#endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_ #endif // ASH_SYSTEM_ACCESSIBILITY_SWITCH_ACCESS_MENU_BUTTON_H_
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include "ui/gfx/skia_util.h" #include "ui/gfx/skia_util.h"
#include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
#include "ui/views/painter.h" #include "ui/views/painter.h"
#include "ui/views/views_delegate.h" #include "ui/views/views_delegate.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
...@@ -464,6 +463,10 @@ void TrayBubbleView::GetAccessibleNodeData(ui::AXNodeData* node_data) { ...@@ -464,6 +463,10 @@ void TrayBubbleView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
} }
} }
const char* TrayBubbleView::GetClassName() const {
return "TrayBubbleView";
}
void TrayBubbleView::OnThemeChanged() { void TrayBubbleView::OnThemeChanged() {
views::BubbleDialogDelegateView::OnThemeChanged(); views::BubbleDialogDelegateView::OnThemeChanged();
DCHECK(layer()); DCHECK(layer());
...@@ -496,7 +499,4 @@ void TrayBubbleView::CloseBubbleView() { ...@@ -496,7 +499,4 @@ void TrayBubbleView::CloseBubbleView() {
delegate_->HideBubble(this); delegate_->HideBubble(this);
} }
BEGIN_METADATA(TrayBubbleView, views::BubbleDialogDelegateView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -18,8 +18,6 @@ ...@@ -18,8 +18,6 @@
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
#include "ui/gfx/native_widget_types.h" #include "ui/gfx/native_widget_types.h"
#include "ui/views/bubble/bubble_dialog_delegate_view.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/mouse_watcher.h" #include "ui/views/mouse_watcher.h"
namespace views { namespace views {
...@@ -37,8 +35,6 @@ namespace ash { ...@@ -37,8 +35,6 @@ namespace ash {
class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView, class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView,
public views::MouseWatcherListener { public views::MouseWatcherListener {
public: public:
METADATA_HEADER(TrayBubbleView);
class ASH_EXPORT Delegate { class ASH_EXPORT Delegate {
public: public:
Delegate() {} Delegate() {}
...@@ -105,8 +101,6 @@ class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView, ...@@ -105,8 +101,6 @@ class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView,
}; };
explicit TrayBubbleView(const InitParams& init_params); explicit TrayBubbleView(const InitParams& init_params);
TrayBubbleView(const TrayBubbleView&) = delete;
TrayBubbleView& operator=(const TrayBubbleView&) = delete;
~TrayBubbleView() override; ~TrayBubbleView() override;
// Sets up animations, and show the bubble. Must occur after CreateBubble() // Sets up animations, and show the bubble. Must occur after CreateBubble()
...@@ -178,6 +172,7 @@ class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView, ...@@ -178,6 +172,7 @@ class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView,
void OnMouseEntered(const ui::MouseEvent& event) override; void OnMouseEntered(const ui::MouseEvent& event) override;
void OnMouseExited(const ui::MouseEvent& event) override; void OnMouseExited(const ui::MouseEvent& event) override;
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
const char* GetClassName() const override;
void OnThemeChanged() override; void OnThemeChanged() override;
// views::MouseWatcherListener: // views::MouseWatcherListener:
...@@ -241,13 +236,10 @@ class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView, ...@@ -241,13 +236,10 @@ class ASH_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView,
base::Optional<StatusAreaWidget::ScopedTrayBubbleCounter> base::Optional<StatusAreaWidget::ScopedTrayBubbleCounter>
tray_bubble_counter_; tray_bubble_counter_;
};
BEGIN_VIEW_BUILDER(ASH_EXPORT, TrayBubbleView, views::BubbleDialogDelegateView) DISALLOW_COPY_AND_ASSIGN(TrayBubbleView);
END_VIEW_BUILDER };
} // namespace ash } // namespace ash
DEFINE_VIEW_BUILDER(ASH_EXPORT, ash::TrayBubbleView)
#endif // ASH_SYSTEM_TRAY_TRAY_BUBBLE_VIEW_H_ #endif // ASH_SYSTEM_TRAY_TRAY_BUBBLE_VIEW_H_
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
#include "ui/base/class_property.h" #include "ui/base/class_property.h"
#include "ui/views/bubble/bubble_border.h" #include "ui/views/bubble/bubble_border.h"
#include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view_tracker.h" #include "ui/views/view_tracker.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_observer.h" #include "ui/views/widget/widget_observer.h"
...@@ -400,8 +398,7 @@ class VIEWS_EXPORT BubbleDialogDelegateView : public BubbleDialogDelegate, ...@@ -400,8 +398,7 @@ class VIEWS_EXPORT BubbleDialogDelegateView : public BubbleDialogDelegate,
View* anchor_view, View* anchor_view,
BubbleBorder::Arrow arrow, BubbleBorder::Arrow arrow,
BubbleBorder::Shadow shadow = BubbleBorder::DIALOG_SHADOW); BubbleBorder::Shadow shadow = BubbleBorder::DIALOG_SHADOW);
BubbleDialogDelegateView(const BubbleDialogDelegateView&) = delete;
BubbleDialogDelegateView& operator=(const BubbleDialogDelegateView&) = delete;
~BubbleDialogDelegateView() override; ~BubbleDialogDelegateView() override;
// BubbleDialogDelegate: // BubbleDialogDelegate:
...@@ -433,13 +430,10 @@ class VIEWS_EXPORT BubbleDialogDelegateView : public BubbleDialogDelegate, ...@@ -433,13 +430,10 @@ class VIEWS_EXPORT BubbleDialogDelegateView : public BubbleDialogDelegate,
// Update the bubble color from the NativeTheme unless it was explicitly set. // Update the bubble color from the NativeTheme unless it was explicitly set.
void UpdateColorsFromTheme(); void UpdateColorsFromTheme();
};
BEGIN_VIEW_BUILDER(VIEWS_EXPORT, BubbleDialogDelegateView, View) DISALLOW_COPY_AND_ASSIGN(BubbleDialogDelegateView);
END_VIEW_BUILDER };
} // namespace views } // namespace views
DEFINE_VIEW_BUILDER(VIEWS_EXPORT, BubbleDialogDelegateView)
#endif // UI_VIEWS_BUBBLE_BUBBLE_DIALOG_DELEGATE_VIEW_H_ #endif // UI_VIEWS_BUBBLE_BUBBLE_DIALOG_DELEGATE_VIEW_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