Commit 05d51a4c authored by Allen Bauer's avatar Allen Bauer Committed by Commit Bot

Removed use of ButtonListener in favor of a set callback.

Bug: 772945
Change-Id: I3ef3c5d1dda8d9d37ce165323fdcd384cbe8c5d5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2468944
Commit-Queue: Allen Bauer <kylixrd@chromium.org>
Commit-Queue: Tao Wu <wutao@chromium.org>
Reviewed-by: default avatarTao Wu <wutao@chromium.org>
Auto-Submit: Allen Bauer <kylixrd@chromium.org>
Cr-Commit-Position: refs/heads/master@{#816825}
parent 60b7e012
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "ash/test/ash_test_helper.h" #include "ash/test/ash_test_helper.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "ui/views/view_utils.h"
namespace ash { namespace ash {
...@@ -66,8 +67,7 @@ void PressHomeButton() { ...@@ -66,8 +67,7 @@ void PressHomeButton() {
// This includes direct and indirect children. // This includes direct and indirect children.
// For this class to work, _ChildView must: // For this class to work, _ChildView must:
// * Inherit from |views::View|. // * Inherit from |views::View|.
// * Have a static variable called |kClassName|. // * Implement view metadata (see comments on views::View).
// * Return |_ChildView::kClassName| from its GetClassName() method.
template <class _ChildView> template <class _ChildView>
class ChildViewCollector { class ChildViewCollector {
public: public:
...@@ -84,7 +84,7 @@ class ChildViewCollector { ...@@ -84,7 +84,7 @@ class ChildViewCollector {
private: private:
void Get(views::View* view, Views* result) { void Get(views::View* view, Views* result) {
if (view->GetClassName() == _ChildView::kClassName) if (views::IsViewClass<_ChildView>(view))
result->push_back(static_cast<_ChildView*>(view)); result->push_back(static_cast<_ChildView*>(view));
for (views::View* child : view->children()) for (views::View* child : view->children())
Get(child, result); Get(child, result);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "ash/assistant/model/assistant_ui_model.h" #include "ash/assistant/model/assistant_ui_model.h"
#include "ash/assistant/ui/base/assistant_button_listener.h" #include "ash/assistant/ui/base/assistant_button_listener.h"
#include "ash/assistant/util/histogram_util.h" #include "ash/assistant/util/histogram_util.h"
#include "base/bind.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/color_utils.h" #include "ui/gfx/color_utils.h"
#include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/paint_vector_icon.h"
...@@ -34,7 +35,10 @@ AssistantButton::InitParams::~InitParams() = default; ...@@ -34,7 +35,10 @@ AssistantButton::InitParams::~InitParams() = default;
AssistantButton::AssistantButton(AssistantButtonListener* listener, AssistantButton::AssistantButton(AssistantButtonListener* listener,
AssistantButtonId button_id) AssistantButtonId button_id)
: views::ImageButton(this), listener_(listener), id_(button_id) { : views::ImageButton(base::BindRepeating(&AssistantButton::OnButtonPressed,
base::Unretained(this))),
listener_(listener),
id_(button_id) {
constexpr SkColor kInkDropBaseColor = SK_ColorBLACK; constexpr SkColor kInkDropBaseColor = SK_ColorBLACK;
constexpr float kInkDropVisibleOpacity = 0.06f; constexpr float kInkDropVisibleOpacity = 0.06f;
...@@ -121,8 +125,7 @@ std::unique_ptr<views::InkDropRipple> AssistantButton::CreateInkDropRipple() ...@@ -121,8 +125,7 @@ std::unique_ptr<views::InkDropRipple> AssistantButton::CreateInkDropRipple()
GetInkDropBaseColor(), GetInkDropVisibleOpacity()); GetInkDropBaseColor(), GetInkDropVisibleOpacity());
} }
void AssistantButton::ButtonPressed(views::Button* sender, void AssistantButton::OnButtonPressed() {
const ui::Event& event) {
assistant::util::IncrementAssistantButtonClickCount(id_); assistant::util::IncrementAssistantButtonClickCount(id_);
listener_->OnButtonPressed(id_); listener_->OnButtonPressed(id_);
} }
......
...@@ -28,8 +28,7 @@ class AssistantButtonListener; ...@@ -28,8 +28,7 @@ class AssistantButtonListener;
enum class AssistantButtonId; enum class AssistantButtonId;
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantButton class COMPONENT_EXPORT(ASSISTANT_UI) AssistantButton
: public views::ImageButton, : public views::ImageButton {
public views::ButtonListener {
public: public:
// Initialization parameters for customizing the Assistant button. // Initialization parameters for customizing the Assistant button.
struct InitParams { struct InitParams {
...@@ -56,6 +55,8 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantButton ...@@ -56,6 +55,8 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantButton
AssistantButton(AssistantButtonListener* listener, AssistantButton(AssistantButtonListener* listener,
AssistantButtonId button_id); AssistantButtonId button_id);
AssistantButton(const AssistantButton&) = delete;
AssistantButton& operator=(const AssistantButton&) = delete;
~AssistantButton() override; ~AssistantButton() override;
// Creates a button with the default Assistant styles. // Creates a button with the default Assistant styles.
...@@ -75,14 +76,11 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantButton ...@@ -75,14 +76,11 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantButton
const override; const override;
std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override; std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
private: private:
void OnButtonPressed();
AssistantButtonListener* listener_; AssistantButtonListener* listener_;
const AssistantButtonId id_; const AssistantButtonId id_;
DISALLOW_COPY_AND_ASSIGN(AssistantButton);
}; };
} // namespace ash } // namespace ash
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "ui/views/controls/scrollbar/overlay_scroll_bar.h" #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
...@@ -93,10 +94,6 @@ AssistantScrollView::AssistantScrollView() { ...@@ -93,10 +94,6 @@ AssistantScrollView::AssistantScrollView() {
AssistantScrollView::~AssistantScrollView() = default; AssistantScrollView::~AssistantScrollView() = default;
const char* AssistantScrollView::GetClassName() const {
return "AssistantScrollView";
}
void AssistantScrollView::OnViewPreferredSizeChanged(views::View* view) { void AssistantScrollView::OnViewPreferredSizeChanged(views::View* view) {
DCHECK_EQ(content_view_, view); DCHECK_EQ(content_view_, view);
...@@ -131,4 +128,7 @@ void AssistantScrollView::InitLayout() { ...@@ -131,4 +128,7 @@ void AssistantScrollView::InitLayout() {
std::make_unique<InvisibleScrollBar>(&observers_, /*horizontal=*/false)); std::make_unique<InvisibleScrollBar>(&observers_, /*horizontal=*/false));
} }
BEGIN_METADATA(AssistantScrollView, views::ScrollView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "ui/views/controls/scroll_view.h" #include "ui/views/controls/scroll_view.h"
#include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/view_observer.h" #include "ui/views/view_observer.h"
namespace ash { namespace ash {
...@@ -36,14 +37,13 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantScrollView ...@@ -36,14 +37,13 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantScrollView
~Observer() override = default; ~Observer() override = default;
}; };
METADATA_HEADER(AssistantScrollView);
AssistantScrollView(); AssistantScrollView();
AssistantScrollView(const AssistantScrollView&) = delete; AssistantScrollView(const AssistantScrollView&) = delete;
AssistantScrollView& operator=(const AssistantScrollView) = delete; AssistantScrollView& operator=(const AssistantScrollView) = delete;
~AssistantScrollView() override; ~AssistantScrollView() override;
// views::ScrollView:
const char* GetClassName() const override;
// views::ViewObserver: // views::ViewObserver:
void OnViewPreferredSizeChanged(views::View* view) override; void OnViewPreferredSizeChanged(views::View* view) override;
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "chromeos/services/assistant/public/cpp/features.h" #include "chromeos/services/assistant/public/cpp/features.h"
#include "ui/compositor/callback_layer_animation_observer.h" #include "ui/compositor/callback_layer_animation_observer.h"
#include "ui/compositor/layer_animator.h" #include "ui/compositor/layer_animator.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
...@@ -378,4 +379,7 @@ bool AnimatedContainerView::FadeOutObserverCallback( ...@@ -378,4 +379,7 @@ bool AnimatedContainerView::FadeOutObserverCallback(
return true; return true;
} }
BEGIN_METADATA(AnimatedContainerView, AssistantScrollView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h" #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
#include "chromeos/services/assistant/public/cpp/assistant_service.h" #include "chromeos/services/assistant/public/cpp/assistant_service.h"
#include "ui/views/metadata/metadata_header_macros.h"
namespace ui { namespace ui {
class CallbackLayerAnimationObserver; class CallbackLayerAnimationObserver;
...@@ -62,7 +63,11 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AnimatedContainerView ...@@ -62,7 +63,11 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AnimatedContainerView
public: public:
using AssistantSuggestion = chromeos::assistant::AssistantSuggestion; using AssistantSuggestion = chromeos::assistant::AssistantSuggestion;
METADATA_HEADER(AnimatedContainerView);
explicit AnimatedContainerView(AssistantViewDelegate* delegate); explicit AnimatedContainerView(AssistantViewDelegate* delegate);
AnimatedContainerView(const AnimatedContainerView&) = delete;
AnimatedContainerView& operator=(const AnimatedContainerView&) = delete;
~AnimatedContainerView() override; ~AnimatedContainerView() override;
// AssistantScrollView: // AssistantScrollView:
...@@ -168,8 +173,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AnimatedContainerView ...@@ -168,8 +173,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AnimatedContainerView
assistant_controller_observer_{this}; assistant_controller_observer_{this};
base::WeakPtrFactory<AnimatedContainerView> weak_factory_{this}; base::WeakPtrFactory<AnimatedContainerView> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(AnimatedContainerView);
}; };
} // namespace ash } // namespace ash
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "ash/assistant/ui/assistant_ui_constants.h" #include "ash/assistant/ui/assistant_ui_constants.h"
#include "ash/assistant/ui/assistant_view_delegate.h" #include "ash/assistant/ui/assistant_view_delegate.h"
#include "ash/assistant/util/resource_util.h" #include "ash/assistant/util/resource_util.h"
#include "base/bind.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chromeos/services/assistant/public/cpp/assistant_service.h" #include "chromeos/services/assistant/public/cpp/assistant_service.h"
...@@ -17,6 +18,7 @@ ...@@ -17,6 +18,7 @@
#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/flex_layout.h" #include "ui/views/layout/flex_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
#include "ui/views/view_class_properties.h" #include "ui/views/view_class_properties.h"
namespace ash { namespace ash {
...@@ -66,14 +68,13 @@ SkColor GetForegroundColor(int index) { ...@@ -66,14 +68,13 @@ SkColor GetForegroundColor(int index) {
// AssistantOnboardingSuggestionView ------------------------------------------- // AssistantOnboardingSuggestionView -------------------------------------------
// static
constexpr char AssistantOnboardingSuggestionView::kClassName[];
AssistantOnboardingSuggestionView::AssistantOnboardingSuggestionView( AssistantOnboardingSuggestionView::AssistantOnboardingSuggestionView(
AssistantViewDelegate* delegate, AssistantViewDelegate* delegate,
const chromeos::assistant::AssistantSuggestion& suggestion, const chromeos::assistant::AssistantSuggestion& suggestion,
int index) int index)
: views::Button(this), : views::Button(base::BindRepeating(
&AssistantOnboardingSuggestionView::OnButtonPressed,
base::Unretained(this))),
delegate_(delegate), delegate_(delegate),
suggestion_id_(suggestion.id), suggestion_id_(suggestion.id),
index_(index) { index_(index) {
...@@ -83,10 +84,6 @@ AssistantOnboardingSuggestionView::AssistantOnboardingSuggestionView( ...@@ -83,10 +84,6 @@ AssistantOnboardingSuggestionView::AssistantOnboardingSuggestionView(
AssistantOnboardingSuggestionView::~AssistantOnboardingSuggestionView() = AssistantOnboardingSuggestionView::~AssistantOnboardingSuggestionView() =
default; default;
const char* AssistantOnboardingSuggestionView::GetClassName() const {
return kClassName;
}
int AssistantOnboardingSuggestionView::GetHeightForWidth(int width) const { int AssistantOnboardingSuggestionView::GetHeightForWidth(int width) const {
return kPreferredHeightDip; return kPreferredHeightDip;
} }
...@@ -116,11 +113,6 @@ void AssistantOnboardingSuggestionView::RemoveLayerBeneathView( ...@@ -116,11 +113,6 @@ void AssistantOnboardingSuggestionView::RemoveLayerBeneathView(
ink_drop_container_->RemoveLayerBeneathView(layer); ink_drop_container_->RemoveLayerBeneathView(layer);
} }
void AssistantOnboardingSuggestionView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
delegate_->OnSuggestionPressed(suggestion_id_);
}
const gfx::ImageSkia& AssistantOnboardingSuggestionView::GetIcon() const { const gfx::ImageSkia& AssistantOnboardingSuggestionView::GetIcon() const {
return icon_->GetImage(); return icon_->GetImage();
} }
...@@ -227,4 +219,11 @@ void AssistantOnboardingSuggestionView::UpdateIcon(const gfx::ImageSkia& icon) { ...@@ -227,4 +219,11 @@ void AssistantOnboardingSuggestionView::UpdateIcon(const gfx::ImageSkia& icon) {
icon_->SetImage(icon); icon_->SetImage(icon);
} }
void AssistantOnboardingSuggestionView::OnButtonPressed() {
delegate_->OnSuggestionPressed(suggestion_id_);
}
BEGIN_METADATA(AssistantOnboardingSuggestionView, views::Button)
END_METADATA
} // namespace ash } // namespace ash
\ No newline at end of file
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/metadata/metadata_header_macros.h"
namespace chromeos { namespace chromeos {
namespace assistant { namespace assistant {
...@@ -26,10 +27,9 @@ namespace ash { ...@@ -26,10 +27,9 @@ namespace ash {
class AssistantViewDelegate; class AssistantViewDelegate;
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingSuggestionView class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingSuggestionView
: public views::Button, : public views::Button {
public views::ButtonListener {
public: public:
static constexpr char kClassName[] = "AssistantOnboardingSuggestionView"; METADATA_HEADER(AssistantOnboardingSuggestionView);
AssistantOnboardingSuggestionView( AssistantOnboardingSuggestionView(
AssistantViewDelegate* delegate, AssistantViewDelegate* delegate,
...@@ -43,15 +43,11 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingSuggestionView ...@@ -43,15 +43,11 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingSuggestionView
~AssistantOnboardingSuggestionView() override; ~AssistantOnboardingSuggestionView() override;
// views::View: // views::View:
const char* GetClassName() const override;
int GetHeightForWidth(int width) const override; int GetHeightForWidth(int width) const override;
void ChildPreferredSizeChanged(views::View* child) override; void ChildPreferredSizeChanged(views::View* child) override;
void AddLayerBeneathView(ui::Layer* layer) override; void AddLayerBeneathView(ui::Layer* layer) override;
void RemoveLayerBeneathView(ui::Layer* layer) override; void RemoveLayerBeneathView(ui::Layer* layer) override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// Returns the icon for the suggestion. // Returns the icon for the suggestion.
const gfx::ImageSkia& GetIcon() const; const gfx::ImageSkia& GetIcon() const;
...@@ -62,6 +58,8 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingSuggestionView ...@@ -62,6 +58,8 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingSuggestionView
void InitLayout(const chromeos::assistant::AssistantSuggestion& suggestion); void InitLayout(const chromeos::assistant::AssistantSuggestion& suggestion);
void UpdateIcon(const gfx::ImageSkia& icon); void UpdateIcon(const gfx::ImageSkia& icon);
void OnButtonPressed();
AssistantViewDelegate* const delegate_; // Owned by AssistantController. AssistantViewDelegate* const delegate_; // Owned by AssistantController.
const base::UnguessableToken suggestion_id_; const base::UnguessableToken suggestion_id_;
const int index_; const int index_;
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/paint_vector_icon.h"
#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/view_utils.h"
namespace ash { namespace ash {
...@@ -64,7 +65,7 @@ void FindDescendentByClassName(views::View* parent, T** result) { ...@@ -64,7 +65,7 @@ void FindDescendentByClassName(views::View* parent, T** result) {
auto* candidate = children.front(); auto* candidate = children.front();
children.pop(); children.pop();
if (candidate->GetClassName() == T::kClassName) { if (views::IsViewClass<T>(candidate)) {
*result = static_cast<T*>(candidate); *result = static_cast<T*>(candidate);
return; return;
} }
......
...@@ -11,11 +11,14 @@ ...@@ -11,11 +11,14 @@
#include "ash/assistant/ui/assistant_view_delegate.h" #include "ash/assistant/ui/assistant_view_delegate.h"
#include "ash/assistant/ui/assistant_view_ids.h" #include "ash/assistant/ui/assistant_view_ids.h"
#include "ash/strings/grit/ash_strings.h" #include "ash/strings/grit/ash_strings.h"
#include "base/bind.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.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/views/controls/button/button.h"
#include "ui/views/controls/styled_label.h" #include "ui/views/controls/styled_label.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 {
...@@ -48,14 +51,20 @@ base::string16 GetAction(int consent_status) { ...@@ -48,14 +51,20 @@ base::string16 GetAction(int consent_status) {
class AssistantOptInContainer : public views::Button { class AssistantOptInContainer : public views::Button {
public: public:
explicit AssistantOptInContainer(views::ButtonListener* listener) METADATA_HEADER(AssistantOptInContainer);
: views::Button(listener) {
explicit AssistantOptInContainer(views::Button::PressedCallback callback)
: views::Button(callback) {
constexpr float kHighlightOpacity = 0.06f; constexpr float kHighlightOpacity = 0.06f;
SetFocusPainter(views::Painter::CreateSolidRoundRectPainter( SetFocusPainter(views::Painter::CreateSolidRoundRectPainter(
SkColorSetA(SK_ColorBLACK, 0xff * kHighlightOpacity), SkColorSetA(SK_ColorBLACK, 0xff * kHighlightOpacity),
kPreferredHeightDip / 2)); kPreferredHeightDip / 2));
} }
AssistantOptInContainer(const AssistantOptInContainer&) = delete;
AssistantOptInContainer& operator=(const AssistantOptInContainer) = delete;
~AssistantOptInContainer() override = default; ~AssistantOptInContainer() override = default;
// views::View: // views::View:
...@@ -78,11 +87,11 @@ class AssistantOptInContainer : public views::Button { ...@@ -78,11 +87,11 @@ class AssistantOptInContainer : public views::Button {
flags.setColor(gfx::kGoogleBlue500); flags.setColor(gfx::kGoogleBlue500);
canvas->DrawRoundRect(GetContentsBounds(), height() / 2, flags); canvas->DrawRoundRect(GetContentsBounds(), height() / 2, flags);
} }
private:
DISALLOW_COPY_AND_ASSIGN(AssistantOptInContainer);
}; };
BEGIN_METADATA(AssistantOptInContainer, views::Button)
END_METADATA
} // namespace } // namespace
// AssistantOptInView ---------------------------------------------------------- // AssistantOptInView ----------------------------------------------------------
...@@ -98,10 +107,6 @@ AssistantOptInView::~AssistantOptInView() { ...@@ -98,10 +107,6 @@ AssistantOptInView::~AssistantOptInView() {
AssistantState::Get()->RemoveObserver(this); AssistantState::Get()->RemoveObserver(this);
} }
const char* AssistantOptInView::GetClassName() const {
return "AssistantOptInView";
}
void AssistantOptInView::ChildPreferredSizeChanged(views::View* child) { void AssistantOptInView::ChildPreferredSizeChanged(views::View* child) {
PreferredSizeChanged(); PreferredSizeChanged();
} }
...@@ -110,11 +115,6 @@ void AssistantOptInView::OnBoundsChanged(const gfx::Rect& previous_bounds) { ...@@ -110,11 +115,6 @@ void AssistantOptInView::OnBoundsChanged(const gfx::Rect& previous_bounds) {
label_->SizeToFit(width()); label_->SizeToFit(width());
} }
void AssistantOptInView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
delegate_->OnOptInButtonPressed();
}
void AssistantOptInView::OnAssistantConsentStatusChanged(int consent_status) { void AssistantOptInView::OnAssistantConsentStatusChanged(int consent_status) {
UpdateLabel(consent_status); UpdateLabel(consent_status);
} }
...@@ -132,7 +132,8 @@ void AssistantOptInView::InitLayout() { ...@@ -132,7 +132,8 @@ void AssistantOptInView::InitLayout() {
// Container. // Container.
container_ = AddChildView( container_ = AddChildView(
std::make_unique<AssistantOptInContainer>(/*listener=*/this)); std::make_unique<AssistantOptInContainer>(base::BindRepeating(
&AssistantOptInView::OnButtonPressed, base::Unretained(this))));
layout_manager = layout_manager =
container_->SetLayoutManager(std::make_unique<views::BoxLayout>( container_->SetLayoutManager(std::make_unique<views::BoxLayout>(
...@@ -187,4 +188,11 @@ void AssistantOptInView::UpdateLabel(int consent_status) { ...@@ -187,4 +188,11 @@ void AssistantOptInView::UpdateLabel(int consent_status) {
container_->SchedulePaint(); container_->SchedulePaint();
} }
void AssistantOptInView::OnButtonPressed() {
delegate_->OnOptInButtonPressed();
}
BEGIN_METADATA(AssistantOptInView, views::View)
END_METADATA
} // namespace ash } // namespace ash
...@@ -8,9 +8,11 @@ ...@@ -8,9 +8,11 @@
#include "ash/public/cpp/assistant/assistant_state.h" #include "ash/public/cpp/assistant/assistant_state.h"
#include "base/component_export.h" #include "base/component_export.h"
#include "base/macros.h" #include "base/macros.h"
#include "ui/views/controls/button/button.h" #include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/view.h"
namespace views { namespace views {
class Button;
class StyledLabel; class StyledLabel;
} // namespace views } // namespace views
...@@ -22,20 +24,19 @@ class AssistantViewDelegate; ...@@ -22,20 +24,19 @@ class AssistantViewDelegate;
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOptInView class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOptInView
: public views::View, : public views::View,
public views::ButtonListener,
public AssistantStateObserver { public AssistantStateObserver {
public: public:
METADATA_HEADER(AssistantOptInView);
explicit AssistantOptInView(AssistantViewDelegate* delegate_); explicit AssistantOptInView(AssistantViewDelegate* delegate_);
AssistantOptInView(const AssistantOptInView&) = delete;
AssistantOptInView& operator=(const AssistantOptInView&) = delete;
~AssistantOptInView() override; ~AssistantOptInView() override;
// views::View: // views::View:
const char* GetClassName() const override;
void ChildPreferredSizeChanged(views::View* child) override; void ChildPreferredSizeChanged(views::View* child) override;
void OnBoundsChanged(const gfx::Rect& previous_bounds) override; void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// AssistantStateObserver: // AssistantStateObserver:
void OnAssistantConsentStatusChanged(int consent_status) override; void OnAssistantConsentStatusChanged(int consent_status) override;
...@@ -43,13 +44,13 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOptInView ...@@ -43,13 +44,13 @@ class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOptInView
void InitLayout(); void InitLayout();
void UpdateLabel(int consent_status); void UpdateLabel(int consent_status);
void OnButtonPressed();
views::StyledLabel* label_; // Owned by view hierarchy. views::StyledLabel* label_; // Owned by view hierarchy.
views::Button* container_; views::Button* container_;
AssistantViewDelegate* delegate_; AssistantViewDelegate* delegate_;
DISALLOW_COPY_AND_ASSIGN(AssistantOptInView);
}; };
} // namespace ash } // namespace ash
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#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"
namespace ash { namespace ash {
...@@ -42,22 +43,14 @@ constexpr int kPreferredHeightDip = 32; ...@@ -42,22 +43,14 @@ constexpr int kPreferredHeightDip = 32;
// SuggestionChipView ---------------------------------------------------------- // SuggestionChipView ----------------------------------------------------------
// static
constexpr char SuggestionChipView::kClassName[];
SuggestionChipView::SuggestionChipView(AssistantViewDelegate* delegate, SuggestionChipView::SuggestionChipView(AssistantViewDelegate* delegate,
const AssistantSuggestion& suggestion, const AssistantSuggestion& suggestion)
views::ButtonListener* listener) : delegate_(delegate), suggestion_id_(suggestion.id) {
: Button(listener), delegate_(delegate), suggestion_id_(suggestion.id) {
InitLayout(suggestion); InitLayout(suggestion);
} }
SuggestionChipView::~SuggestionChipView() = default; SuggestionChipView::~SuggestionChipView() = default;
const char* SuggestionChipView::GetClassName() const {
return kClassName;
}
gfx::Size SuggestionChipView::CalculatePreferredSize() const { gfx::Size SuggestionChipView::CalculatePreferredSize() const {
const int preferred_width = views::View::CalculatePreferredSize().width(); const int preferred_width = views::View::CalculatePreferredSize().width();
return gfx::Size(preferred_width, GetHeightForWidth(preferred_width)); return gfx::Size(preferred_width, GetHeightForWidth(preferred_width));
...@@ -189,4 +182,7 @@ const base::string16& SuggestionChipView::GetText() const { ...@@ -189,4 +182,7 @@ const base::string16& SuggestionChipView::GetText() const {
return text_view_->GetText(); return text_view_->GetText();
} }
BEGIN_METADATA(SuggestionChipView, views::Button)
END_METADATA
} // namespace ash } // namespace ash
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/services/assistant/public/cpp/assistant_service.h" #include "chromeos/services/assistant/public/cpp/assistant_service.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/metadata/metadata_header_macros.h"
namespace views { namespace views {
class BoxLayout; class BoxLayout;
...@@ -25,15 +26,15 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionChipView : public views::Button { ...@@ -25,15 +26,15 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionChipView : public views::Button {
public: public:
using AssistantSuggestion = chromeos::assistant::AssistantSuggestion; using AssistantSuggestion = chromeos::assistant::AssistantSuggestion;
static constexpr char kClassName[] = "SuggestionChipView"; METADATA_HEADER(SuggestionChipView);
SuggestionChipView(AssistantViewDelegate* delegate, SuggestionChipView(AssistantViewDelegate* delegate,
const AssistantSuggestion& suggestion, const AssistantSuggestion& suggestion);
views::ButtonListener* listener); SuggestionChipView(const SuggestionChipView&) = delete;
SuggestionChipView& operator=(const SuggestionChipView&) = delete;
~SuggestionChipView() override; ~SuggestionChipView() override;
// views::View: // views::View:
const char* GetClassName() const override;
gfx::Size CalculatePreferredSize() const override; gfx::Size CalculatePreferredSize() const override;
int GetHeightForWidth(int width) const override; int GetHeightForWidth(int width) const override;
void ChildVisibilityChanged(views::View* child) override; void ChildVisibilityChanged(views::View* child) override;
...@@ -62,8 +63,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionChipView : public views::Button { ...@@ -62,8 +63,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionChipView : public views::Button {
views::Label* text_view_; // Owned by view hierarchy. views::Label* text_view_; // Owned by view hierarchy.
base::WeakPtrFactory<SuggestionChipView> weak_factory_{this}; base::WeakPtrFactory<SuggestionChipView> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(SuggestionChipView);
}; };
} // namespace ash } // namespace ash
......
...@@ -38,8 +38,7 @@ TEST_F(SuggestionChipViewTest, ShouldHandleLocalIcons) { ...@@ -38,8 +38,7 @@ TEST_F(SuggestionChipViewTest, ShouldHandleLocalIcons) {
SuggestionChipView suggestion_chip_view( SuggestionChipView suggestion_chip_view(
/*delegate=*/nullptr, /*delegate=*/nullptr,
CreateSuggestionWithIconUrl( CreateSuggestionWithIconUrl(
"googleassistant://resource?type=icon&name=assistant"), "googleassistant://resource?type=icon&name=assistant"));
/*listener=*/nullptr);
const auto& actual = suggestion_chip_view.GetIcon(); const auto& actual = suggestion_chip_view.GetIcon();
gfx::ImageSkia expected = gfx::CreateVectorIcon( gfx::ImageSkia expected = gfx::CreateVectorIcon(
...@@ -62,8 +61,7 @@ TEST_F(SuggestionChipViewTest, ShouldHandleRemoteIcons) { ...@@ -62,8 +61,7 @@ TEST_F(SuggestionChipViewTest, ShouldHandleRemoteIcons) {
SuggestionChipView suggestion_chip_view( SuggestionChipView suggestion_chip_view(
&delegate, &delegate,
CreateSuggestionWithIconUrl("https://www.gstatic.com/images/branding/" CreateSuggestionWithIconUrl("https://www.gstatic.com/images/branding/"
"product/2x/googleg_48dp.png"), "product/2x/googleg_48dp.png"));
/*listener=*/nullptr);
const auto& actual = suggestion_chip_view.GetIcon(); const auto& actual = suggestion_chip_view.GetIcon();
EXPECT_TRUE(actual.BackedBySameObjectAs(expected)); EXPECT_TRUE(actual.BackedBySameObjectAs(expected));
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "ui/compositor/callback_layer_animation_observer.h" #include "ui/compositor/callback_layer_animation_observer.h"
#include "ui/compositor/layer_animation_element.h" #include "ui/compositor/layer_animation_element.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 {
...@@ -115,10 +116,6 @@ SuggestionContainerView::~SuggestionContainerView() { ...@@ -115,10 +116,6 @@ SuggestionContainerView::~SuggestionContainerView() {
AssistantSuggestionsController::Get()->GetModel()->RemoveObserver(this); AssistantSuggestionsController::Get()->GetModel()->RemoveObserver(this);
} }
const char* SuggestionContainerView::GetClassName() const {
return "SuggestionContainerView";
}
gfx::Size SuggestionContainerView::CalculatePreferredSize() const { gfx::Size SuggestionContainerView::CalculatePreferredSize() const {
return gfx::Size(INT_MAX, GetHeightForWidth(INT_MAX)); return gfx::Size(INT_MAX, GetHeightForWidth(INT_MAX));
} }
...@@ -201,8 +198,11 @@ void SuggestionContainerView::OnAllViewsRemoved() { ...@@ -201,8 +198,11 @@ void SuggestionContainerView::OnAllViewsRemoved() {
std::unique_ptr<ElementAnimator> SuggestionContainerView::AddSuggestionChip( std::unique_ptr<ElementAnimator> SuggestionContainerView::AddSuggestionChip(
const AssistantSuggestion& suggestion) { const AssistantSuggestion& suggestion) {
auto suggestion_chip_view = std::make_unique<SuggestionChipView>( auto suggestion_chip_view =
delegate(), suggestion, /*listener=*/this); std::make_unique<SuggestionChipView>(delegate(), suggestion);
suggestion_chip_view->set_callback(base::BindRepeating(
&SuggestionContainerView::OnButtonPressed, base::Unretained(this),
base::Unretained(suggestion_chip_view.get())));
// The chip will be animated on its own layer. // The chip will be animated on its own layer.
suggestion_chip_view->SetPaintToLayer(); suggestion_chip_view->SetPaintToLayer();
...@@ -214,13 +214,6 @@ std::unique_ptr<ElementAnimator> SuggestionContainerView::AddSuggestionChip( ...@@ -214,13 +214,6 @@ std::unique_ptr<ElementAnimator> SuggestionContainerView::AddSuggestionChip(
contents()->AddChildView(std::move(suggestion_chip_view)), this); contents()->AddChildView(std::move(suggestion_chip_view)), this);
} }
void SuggestionContainerView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
// Remember which chip was selected, so we can give it a special animation.
selected_chip_ = static_cast<SuggestionChipView*>(sender);
delegate()->OnSuggestionPressed(selected_chip_->suggestion_id());
}
void SuggestionContainerView::OnUiVisibilityChanged( void SuggestionContainerView::OnUiVisibilityChanged(
AssistantVisibility new_visibility, AssistantVisibility new_visibility,
AssistantVisibility old_visibility, AssistantVisibility old_visibility,
...@@ -248,4 +241,13 @@ void SuggestionContainerView::OnUiVisibilityChanged( ...@@ -248,4 +241,13 @@ void SuggestionContainerView::OnUiVisibilityChanged(
views::BoxLayout::MainAxisAlignment::kCenter); views::BoxLayout::MainAxisAlignment::kCenter);
} }
void SuggestionContainerView::OnButtonPressed(SuggestionChipView* chip_view) {
// Remember which chip was selected, so we can give it a special animation.
selected_chip_ = chip_view;
delegate()->OnSuggestionPressed(selected_chip_->suggestion_id());
}
BEGIN_METADATA(SuggestionContainerView, AnimatedContainerView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
#include "chromeos/services/assistant/public/cpp/assistant_service.h" #include "chromeos/services/assistant/public/cpp/assistant_service.h"
#include "ui/views/controls/scroll_view.h" #include "ui/views/controls/scroll_view.h"
#include "ui/views/metadata/metadata_header_macros.h"
namespace views { namespace views {
class BoxLayout; class BoxLayout;
...@@ -33,16 +34,18 @@ class AssistantViewDelegate; ...@@ -33,16 +34,18 @@ class AssistantViewDelegate;
class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView
: public AnimatedContainerView, : public AnimatedContainerView,
public AssistantSuggestionsModelObserver, public AssistantSuggestionsModelObserver,
public AssistantUiModelObserver, public AssistantUiModelObserver {
public views::ButtonListener {
public: public:
using AssistantSuggestion = chromeos::assistant::AssistantSuggestion; using AssistantSuggestion = chromeos::assistant::AssistantSuggestion;
METADATA_HEADER(SuggestionContainerView);
explicit SuggestionContainerView(AssistantViewDelegate* delegate); explicit SuggestionContainerView(AssistantViewDelegate* delegate);
SuggestionContainerView(const SuggestionContainerView&) = delete;
SuggestionContainerView& operator=(const SuggestionContainerView&) = delete;
~SuggestionContainerView() override; ~SuggestionContainerView() override;
// AnimatedContainerView: // AnimatedContainerView:
const char* GetClassName() const override;
gfx::Size CalculatePreferredSize() const override; gfx::Size CalculatePreferredSize() const override;
int GetHeightForWidth(int width) const override; int GetHeightForWidth(int width) const override;
void OnContentsPreferredSizeChanged(views::View* content_view) override; void OnContentsPreferredSizeChanged(views::View* content_view) override;
...@@ -60,9 +63,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView ...@@ -60,9 +63,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView
base::Optional<AssistantEntryPoint> entry_point, base::Optional<AssistantEntryPoint> entry_point,
base::Optional<AssistantExitPoint> exit_point) override; base::Optional<AssistantExitPoint> exit_point) override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// The suggestion chip that was pressed by the user. May be |nullptr|. // The suggestion chip that was pressed by the user. May be |nullptr|.
const SuggestionChipView* selected_chip() const { return selected_chip_; } const SuggestionChipView* selected_chip() const { return selected_chip_; }
...@@ -77,6 +77,8 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView ...@@ -77,6 +77,8 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView
std::unique_ptr<ElementAnimator> AddSuggestionChip( std::unique_ptr<ElementAnimator> AddSuggestionChip(
const AssistantSuggestion& suggestion); const AssistantSuggestion& suggestion);
void OnButtonPressed(SuggestionChipView* chip_view);
views::BoxLayout* layout_manager_; // Owned by view hierarchy. views::BoxLayout* layout_manager_; // Owned by view hierarchy.
// Whether or not we have committed a query during this Assistant session. // Whether or not we have committed a query during this Assistant session.
...@@ -84,8 +86,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView ...@@ -84,8 +86,6 @@ class COMPONENT_EXPORT(ASSISTANT_UI) SuggestionContainerView
// The suggestion chip that was pressed by the user. May be |nullptr|. // The suggestion chip that was pressed by the user. May be |nullptr|.
const SuggestionChipView* selected_chip_ = nullptr; const SuggestionChipView* selected_chip_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(SuggestionContainerView);
}; };
} // namespace ash } // namespace ash
......
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