Commit 89d032cd authored by My Nguyen's avatar My Nguyen Committed by Commit Bot

Make SettingLinkView highlightable

This allows for UX requirement of users able to select this view.

Bug: 1099498
Change-Id: Ic34d366db0a8a44c1ea64e3799e90794d66faa54
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2279292Reviewed-by: default avatarKeith Lee <keithlee@chromium.org>
Commit-Queue: My Nguyen <myy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785261}
parent d239eefc
...@@ -39,6 +39,8 @@ const int kSettingLinkFontSize = 13; ...@@ -39,6 +39,8 @@ const int kSettingLinkFontSize = 13;
// TODO(crbug/1094843): Add localised string. // TODO(crbug/1094843): Add localised string.
const char kSettingLinkLabel[] = "Why am I seeing this suggestion?"; const char kSettingLinkLabel[] = "Why am I seeing this suggestion?";
// TODO(crbug/1102175): Rename setting to settings since there can be multiple
// things to set.
class SettingLinkView : public views::View { class SettingLinkView : public views::View {
public: public:
explicit SettingLinkView(AssistiveDelegate* delegate) : delegate_(delegate) { explicit SettingLinkView(AssistiveDelegate* delegate) : delegate_(delegate) {
...@@ -56,9 +58,21 @@ class SettingLinkView : public views::View { ...@@ -56,9 +58,21 @@ class SettingLinkView : public views::View {
&SettingLinkView::LinkClicked, base::Unretained(this))); &SettingLinkView::LinkClicked, base::Unretained(this)));
} }
void SetHighlighted(bool highlighted) {
if (highlighted_ == highlighted)
return;
SetBackground(highlighted
? views::CreateSolidBackground(kButtonHighlightColor)
: nullptr);
highlighted_ = highlighted;
SchedulePaint();
}
private: private:
AssistiveDelegate* delegate_; AssistiveDelegate* delegate_;
views::Link* setting_link_; views::Link* setting_link_;
bool highlighted_ = false;
void LinkClicked() { void LinkClicked() {
AssistiveWindowButton button; AssistiveWindowButton button;
...@@ -162,6 +176,9 @@ void SuggestionWindowView::SetButtonHighlighted( ...@@ -162,6 +176,9 @@ void SuggestionWindowView::SetButtonHighlighted(
UnhighlightCandidate(button.index); UnhighlightCandidate(button.index);
} }
break; break;
case ButtonId::kSmartInputsSettingLink:
setting_link_view_->SetHighlighted(highlighted);
break;
default: default:
break; break;
} }
...@@ -229,6 +246,10 @@ views::View* SuggestionWindowView::GetCandidateAreaForTesting() { ...@@ -229,6 +246,10 @@ views::View* SuggestionWindowView::GetCandidateAreaForTesting() {
return candidate_area_; return candidate_area_;
} }
views::View* SuggestionWindowView::GetSettingLinkViewForTesting() {
return setting_link_view_;
}
const char* SuggestionWindowView::GetClassName() const { const char* SuggestionWindowView::GetClassName() const {
return "SuggestionWindowView"; return "SuggestionWindowView";
} }
......
...@@ -50,6 +50,7 @@ class UI_CHROMEOS_EXPORT SuggestionWindowView ...@@ -50,6 +50,7 @@ class UI_CHROMEOS_EXPORT SuggestionWindowView
void SetBounds(const gfx::Rect& cursor_bounds); void SetBounds(const gfx::Rect& cursor_bounds);
views::View* GetCandidateAreaForTesting(); views::View* GetCandidateAreaForTesting();
views::View* GetSettingLinkViewForTesting();
private: private:
// Overridden from views::ButtonListener: // Overridden from views::ButtonListener:
......
...@@ -35,6 +35,7 @@ class SuggestionWindowViewTest : public views::ViewsTestBase { ...@@ -35,6 +35,7 @@ class SuggestionWindowViewTest : public views::ViewsTestBase {
suggestion_window_view_ = suggestion_window_view_ =
new SuggestionWindowView(GetContext(), delegate_.get()); new SuggestionWindowView(GetContext(), delegate_.get());
candidate_button_.id = ButtonId::kSuggestion; candidate_button_.id = ButtonId::kSuggestion;
setting_link_view_.id = ButtonId::kSmartInputsSettingLink;
suggestion_window_view_->InitWidget(); suggestion_window_view_->InitWidget();
} }
...@@ -73,6 +74,7 @@ class SuggestionWindowViewTest : public views::ViewsTestBase { ...@@ -73,6 +74,7 @@ class SuggestionWindowViewTest : public views::ViewsTestBase {
std::make_unique<MockAssistiveDelegate>(); std::make_unique<MockAssistiveDelegate>();
std::vector<base::string16> candidates_; std::vector<base::string16> candidates_;
AssistiveWindowButton candidate_button_; AssistiveWindowButton candidate_button_;
AssistiveWindowButton setting_link_view_;
DISALLOW_COPY_AND_ASSIGN(SuggestionWindowViewTest); DISALLOW_COPY_AND_ASSIGN(SuggestionWindowViewTest);
}; };
...@@ -177,5 +179,45 @@ TEST_F(SuggestionWindowViewTest, DoesNotUnhighlightCandidateIfOutOfRange) { ...@@ -177,5 +179,45 @@ TEST_F(SuggestionWindowViewTest, DoesNotUnhighlightCandidateIfOutOfRange) {
} }
} }
TEST_F(SuggestionWindowViewTest, HighlightsSettingLinkViewWhenNotHighlighted) {
suggestion_window_view_->ShowMultipleCandidates(candidates_);
suggestion_window_view_->SetButtonHighlighted(setting_link_view_, true);
EXPECT_TRUE(
suggestion_window_view_->GetSettingLinkViewForTesting()->background() !=
nullptr);
}
TEST_F(SuggestionWindowViewTest,
HighlightsSettingLinkViewWhenAlreadyHighlighted) {
suggestion_window_view_->ShowMultipleCandidates(candidates_);
suggestion_window_view_->SetButtonHighlighted(setting_link_view_, true);
suggestion_window_view_->SetButtonHighlighted(setting_link_view_, true);
EXPECT_TRUE(
suggestion_window_view_->GetSettingLinkViewForTesting()->background() !=
nullptr);
}
TEST_F(SuggestionWindowViewTest, UnhighlightsSettingLinkViewWhenHighlighted) {
suggestion_window_view_->ShowMultipleCandidates(candidates_);
suggestion_window_view_->SetButtonHighlighted(setting_link_view_, false);
EXPECT_TRUE(
suggestion_window_view_->GetSettingLinkViewForTesting()->background() ==
nullptr);
}
TEST_F(SuggestionWindowViewTest,
UnhighlightsKeepSettingLinkViewUnhighlightedWhenAlreadyNotHighlighted) {
suggestion_window_view_->ShowMultipleCandidates(candidates_);
suggestion_window_view_->SetButtonHighlighted(setting_link_view_, false);
suggestion_window_view_->SetButtonHighlighted(setting_link_view_, false);
EXPECT_TRUE(
suggestion_window_view_->GetSettingLinkViewForTesting()->background() ==
nullptr);
}
} // namespace ime } // namespace ime
} // namespace ui } // namespace ui
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