Commit 64309742 authored by Olesia Marukhno's avatar Olesia Marukhno Committed by Commit Bot

[omnibox] Move more logic to OmniboxSuggestionRowButton

Moved logic out of the OmniboxSuggestionButtonRowView to the button
class. Button row class had some duplicated code to handle each button
(creating focus ring, updating icon on theme change). It makes more
sense to encapsulate logic related to button visual representation in
the button class.

Bug: 1104264
Change-Id: Ie55b9488a7300cfd36bb7a52ef89f8f659b01613
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2326170
Commit-Queue: Olesia Marukhno <olesiamarukhno@google.com>
Reviewed-by: default avatarBret Sepulveda <bsep@chromium.org>
Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Cr-Commit-Position: refs/heads/master@{#794985}
parent 5c99ade2
...@@ -29,10 +29,21 @@ ...@@ -29,10 +29,21 @@
class OmniboxSuggestionRowButton : public views::MdTextButton { class OmniboxSuggestionRowButton : public views::MdTextButton {
public: public:
OmniboxSuggestionRowButton(views::ButtonListener* listener, OmniboxSuggestionRowButton(views::ButtonListener* listener,
const base::string16& text) const base::string16& text,
: MdTextButton(listener, CONTEXT_OMNIBOX_PRIMARY) { const gfx::VectorIcon& icon,
const views::FocusRing::ViewPredicate& predicate)
: MdTextButton(listener, CONTEXT_OMNIBOX_PRIMARY), icon_(icon) {
SetText(text); SetText(text);
views::InstallPillHighlightPathGenerator(this);
SetImageLabelSpacing(ChromeLayoutProvider::Get()->GetDistanceMetric(
DISTANCE_RELATED_LABEL_HORIZONTAL_LIST));
SetCustomPadding(ChromeLayoutProvider::Get()->GetInsetsMetric(
INSETS_OMNIBOX_PILL_BUTTON));
SetCornerRadius(GetInsets().height() +
GetLayoutConstant(LOCATION_BAR_ICON_SIZE));
set_ink_drop_highlight_opacity(CalculateInkDropHighlightOpacity()); set_ink_drop_highlight_opacity(CalculateInkDropHighlightOpacity());
focus_ring()->SetHasFocusPredicate(predicate);
} }
OmniboxSuggestionRowButton(const OmniboxSuggestionRowButton&) = delete; OmniboxSuggestionRowButton(const OmniboxSuggestionRowButton&) = delete;
...@@ -45,6 +56,8 @@ class OmniboxSuggestionRowButton : public views::MdTextButton { ...@@ -45,6 +56,8 @@ class OmniboxSuggestionRowButton : public views::MdTextButton {
return color_utils::GetColorWithMaxContrast(background()->get_color()); return color_utils::GetColorWithMaxContrast(background()->get_color());
} }
void OnStyleRefresh() { focus_ring()->SchedulePaint(); }
std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight() std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
const override { const override {
// MdTextButton uses custom colors when creating ink drop highlight. // MdTextButton uses custom colors when creating ink drop highlight.
...@@ -53,7 +66,19 @@ class OmniboxSuggestionRowButton : public views::MdTextButton { ...@@ -53,7 +66,19 @@ class OmniboxSuggestionRowButton : public views::MdTextButton {
return views::InkDropHostView::CreateInkDropHighlight(); return views::InkDropHostView::CreateInkDropHighlight();
} }
void OnThemeChanged() override {
MdTextButton::OnThemeChanged();
SkColor color =
GetOmniboxColor(GetThemeProvider(), OmniboxPart::RESULTS_ICON,
OmniboxPartState::NORMAL);
SetImage(views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(
icon_, GetLayoutConstant(LOCATION_BAR_ICON_SIZE), color));
}
private: private:
const gfx::VectorIcon& icon_;
float CalculateInkDropHighlightOpacity() { float CalculateInkDropHighlightOpacity() {
// Ink drop highlight opacity is result of mixing a layer with hovered // Ink drop highlight opacity is result of mixing a layer with hovered
// opacity and a layer with selected opacity. OmniboxPartState::SELECTED // opacity and a layer with selected opacity. OmniboxPartState::SELECTED
...@@ -70,19 +95,13 @@ namespace { ...@@ -70,19 +95,13 @@ namespace {
OmniboxSuggestionRowButton* CreatePillButton( OmniboxSuggestionRowButton* CreatePillButton(
OmniboxSuggestionButtonRowView* button_row, OmniboxSuggestionButtonRowView* button_row,
const char* message) { const char* message,
const gfx::VectorIcon& icon,
const views::FocusRing::ViewPredicate& predicate) {
OmniboxSuggestionRowButton* button = OmniboxSuggestionRowButton* button =
button_row->AddChildView(std::make_unique<OmniboxSuggestionRowButton>( button_row->AddChildView(std::make_unique<OmniboxSuggestionRowButton>(
button_row, base::ASCIIToUTF16(message))); button_row, base::ASCIIToUTF16(message), icon, predicate));
button->SetVisible(false); button->SetVisible(false);
button->SetImageLabelSpacing(ChromeLayoutProvider::Get()->GetDistanceMetric(
DISTANCE_RELATED_LABEL_HORIZONTAL_LIST));
button->SetCustomPadding(
ChromeLayoutProvider::Get()->GetInsetsMetric(INSETS_OMNIBOX_PILL_BUTTON));
button->SetCornerRadius(button->GetInsets().height() +
GetLayoutConstant(LOCATION_BAR_ICON_SIZE));
views::HighlightPathGenerator::Install(
button, std::make_unique<views::PillHighlightPathGenerator>());
return button; return button;
} }
...@@ -105,11 +124,6 @@ OmniboxSuggestionButtonRowView::OmniboxSuggestionButtonRowView( ...@@ -105,11 +124,6 @@ OmniboxSuggestionButtonRowView::OmniboxSuggestionButtonRowView(
gfx::Insets(0, ChromeLayoutProvider::Get()->GetDistanceMetric( gfx::Insets(0, ChromeLayoutProvider::Get()->GetDistanceMetric(
views::DISTANCE_RELATED_BUTTON_HORIZONTAL))); views::DISTANCE_RELATED_BUTTON_HORIZONTAL)));
// TODO(orinj): Use the real translated string table values here instead.
keyword_button_ = CreatePillButton(this, "Keyword search");
pedal_button_ = CreatePillButton(this, "Pedal");
tab_switch_button_ = CreatePillButton(this, "Switch to this tab");
const auto make_predicate = [=](auto state) { const auto make_predicate = [=](auto state) {
return [=](View* view) { return [=](View* view) {
return view->GetVisible() && return view->GetVisible() &&
...@@ -117,14 +131,16 @@ OmniboxSuggestionButtonRowView::OmniboxSuggestionButtonRowView( ...@@ -117,14 +131,16 @@ OmniboxSuggestionButtonRowView::OmniboxSuggestionButtonRowView(
OmniboxPopupModel::Selection(model_index_, state); OmniboxPopupModel::Selection(model_index_, state);
}; };
}; };
keyword_button_focus_ring_ = views::FocusRing::Install(keyword_button_);
keyword_button_focus_ring_->SetHasFocusPredicate( // TODO(orinj): Use the real translated string table values here instead.
keyword_button_ = CreatePillButton(
this, "Keyword search", vector_icons::kSearchIcon,
make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD)); make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_KEYWORD));
pedal_button_focus_ring_ = views::FocusRing::Install(pedal_button_); pedal_button_ =
pedal_button_focus_ring_->SetHasFocusPredicate( CreatePillButton(this, "Pedal", omnibox::kProductIcon,
make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL)); make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_PEDAL));
tab_switch_button_focus_ring_ = views::FocusRing::Install(tab_switch_button_); tab_switch_button_ = CreatePillButton(
tab_switch_button_focus_ring_->SetHasFocusPredicate( this, "Switch to this tab", omnibox::kSwitchIcon,
make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH)); make_predicate(OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH));
} }
...@@ -163,26 +179,9 @@ void OmniboxSuggestionButtonRowView::UpdateFromModel() { ...@@ -163,26 +179,9 @@ void OmniboxSuggestionButtonRowView::UpdateFromModel() {
} }
void OmniboxSuggestionButtonRowView::OnStyleRefresh() { void OmniboxSuggestionButtonRowView::OnStyleRefresh() {
keyword_button_focus_ring_->SchedulePaint(); keyword_button_->OnStyleRefresh();
pedal_button_focus_ring_->SchedulePaint(); pedal_button_->OnStyleRefresh();
tab_switch_button_focus_ring_->SchedulePaint(); tab_switch_button_->OnStyleRefresh();
}
void OmniboxSuggestionButtonRowView::OnThemeChanged() {
View::OnThemeChanged();
SkColor color = GetOmniboxColor(GetThemeProvider(), OmniboxPart::RESULTS_ICON,
OmniboxPartState::NORMAL);
const int icon_size = GetLayoutConstant(LOCATION_BAR_ICON_SIZE);
keyword_button_->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(vector_icons::kSearchIcon, icon_size, color));
pedal_button_->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(omnibox::kProductIcon, icon_size, color));
tab_switch_button_->SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(omnibox::kSwitchIcon, icon_size, color));
} }
void OmniboxSuggestionButtonRowView::ButtonPressed(views::Button* button, void OmniboxSuggestionButtonRowView::ButtonPressed(views::Button* button,
...@@ -229,7 +228,7 @@ const AutocompleteMatch& OmniboxSuggestionButtonRowView::match() const { ...@@ -229,7 +228,7 @@ const AutocompleteMatch& OmniboxSuggestionButtonRowView::match() const {
} }
void OmniboxSuggestionButtonRowView::SetPillButtonVisibility( void OmniboxSuggestionButtonRowView::SetPillButtonVisibility(
views::MdTextButton* button, OmniboxSuggestionRowButton* button,
OmniboxPopupModel::LineState state) { OmniboxPopupModel::LineState state) {
button->SetVisible(model()->IsControlPresentOnMatch( button->SetVisible(model()->IsControlPresentOnMatch(
OmniboxPopupModel::Selection(model_index_, state))); OmniboxPopupModel::Selection(model_index_, state)));
......
...@@ -32,9 +32,6 @@ class OmniboxSuggestionButtonRowView : public views::View, ...@@ -32,9 +32,6 @@ class OmniboxSuggestionButtonRowView : public views::View,
// views::ButtonListener: // views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override; void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View:
void OnThemeChanged() override;
private: private:
// Get the popup model from the view. // Get the popup model from the view.
const OmniboxPopupModel* model() const; const OmniboxPopupModel* model() const;
...@@ -42,7 +39,7 @@ class OmniboxSuggestionButtonRowView : public views::View, ...@@ -42,7 +39,7 @@ class OmniboxSuggestionButtonRowView : public views::View,
// Digs into the model with index to get the match for owning result view. // Digs into the model with index to get the match for owning result view.
const AutocompleteMatch& match() const; const AutocompleteMatch& match() const;
void SetPillButtonVisibility(views::MdTextButton* button, void SetPillButtonVisibility(OmniboxSuggestionRowButton* button,
OmniboxPopupModel::LineState state); OmniboxPopupModel::LineState state);
OmniboxPopupContentsView* const popup_contents_view_; OmniboxPopupContentsView* const popup_contents_view_;
...@@ -51,9 +48,6 @@ class OmniboxSuggestionButtonRowView : public views::View, ...@@ -51,9 +48,6 @@ class OmniboxSuggestionButtonRowView : public views::View,
OmniboxSuggestionRowButton* keyword_button_ = nullptr; OmniboxSuggestionRowButton* keyword_button_ = nullptr;
OmniboxSuggestionRowButton* pedal_button_ = nullptr; OmniboxSuggestionRowButton* pedal_button_ = nullptr;
OmniboxSuggestionRowButton* tab_switch_button_ = nullptr; OmniboxSuggestionRowButton* tab_switch_button_ = nullptr;
views::FocusRing* keyword_button_focus_ring_ = nullptr;
views::FocusRing* pedal_button_focus_ring_ = nullptr;
views::FocusRing* tab_switch_button_focus_ring_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(OmniboxSuggestionButtonRowView); DISALLOW_COPY_AND_ASSIGN(OmniboxSuggestionButtonRowView);
}; };
......
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