Commit 321ad9b5 authored by My Nguyen's avatar My Nguyen Committed by Commit Bot

Add highlight for undo button

Bug: 1102561
Change-Id: I0dcacb9a22c8c85b0eb22d1c7ef6552d54c609fb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2282733Reviewed-by: default avatarKeith Lee <keithlee@chromium.org>
Commit-Queue: My Nguyen <myy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#786241}
parent 856f615f
......@@ -3156,6 +3156,7 @@ source_set("unit_tests") {
"input_method/ui/input_method_menu_item_unittest.cc",
"input_method/ui/input_method_menu_manager_unittest.cc",
"input_method/ui/suggestion_window_view_unittest.cc",
"input_method/ui/undo_window_unittest.cc",
"kerberos/kerberos_credentials_manager_test.cc",
"kerberos/kerberos_ticket_expiry_notification_test.cc",
"lacros/lacros_util_unittest.cc",
......
......@@ -18,6 +18,10 @@ namespace ime {
namespace {
const char kUndoButtonText[] = "Undo";
// TODO(crbug/1099044): Update and use cros_colors.json5
constexpr SkColor kButtonHighlightColor =
SkColorSetA(SK_ColorBLACK, 0x0F); // 6% Black.
} // namespace
UndoWindow::UndoWindow(gfx::NativeView parent, AssistiveDelegate* delegate)
......@@ -30,11 +34,16 @@ UndoWindow::UndoWindow(gfx::NativeView parent, AssistiveDelegate* delegate)
SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal));
AddUndoButton();
}
void UndoWindow::AddUndoButton() {
undo_button_ = AddChildView(std::make_unique<views::LabelButton>(
this, base::UTF8ToUTF16(kUndoButtonText)));
undo_button_->SetImageLabelSpacing(
views::LayoutProvider::Get()->GetDistanceMetric(
views::DistanceMetric::DISTANCE_RELATED_CONTROL_HORIZONTAL));
undo_button_->SetBackground(nullptr);
}
void UndoWindow::OnThemeChanged() {
......@@ -72,12 +81,27 @@ void UndoWindow::SetBounds(const gfx::Rect& word_bounds) {
SetAnchorRect(word_bounds);
}
void UndoWindow::SetButtonHighlighted(const AssistiveWindowButton& button,
bool highlighted) {
if (button.id != ButtonId::kUndo)
return;
bool currently_hightlighted = undo_button_->background() != nullptr;
if (highlighted == currently_hightlighted)
return;
undo_button_->SetBackground(
highlighted ? views::CreateSolidBackground(kButtonHighlightColor)
: nullptr);
}
void UndoWindow::ButtonPressed(views::Button* sender, const ui::Event& event) {
button_pressed_ = sender;
if (sender == undo_button_) {
AssistiveWindowButton button;
button.id = ButtonId::kUndo;
button.window_type = AssistiveWindowType::kUndoWindow;
SetButtonHighlighted(button, true);
delegate_->AssistiveWindowButtonClicked(button);
}
}
......
......@@ -27,6 +27,9 @@ class UI_CHROMEOS_EXPORT UndoWindow : public views::BubbleDialogDelegateView,
// Set the position of the undo window at the start of the autocorrected word.
void SetBounds(const gfx::Rect& word_bounds);
void SetButtonHighlighted(const AssistiveWindowButton& button,
bool highlighted);
views::Button* GetUndoButtonForTesting();
protected:
......@@ -39,6 +42,8 @@ class UI_CHROMEOS_EXPORT UndoWindow : public views::BubbleDialogDelegateView,
// Overridden from views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
void AddUndoButton();
AssistiveDelegate* delegate_;
views::LabelButton* undo_button_;
views::Button* button_pressed_ = nullptr;
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/input_method/ui/undo_window.h"
#include "chrome/browser/chromeos/input_method/ui/assistive_delegate.h"
#include "chrome/test/views/chrome_views_test_base.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace ui {
namespace ime {
class MockAssistiveDelegate : public AssistiveDelegate {
public:
~MockAssistiveDelegate() override = default;
void AssistiveWindowButtonClicked(
const ui::ime::AssistiveWindowButton& button) const override {}
};
class UndoWindowTest : public ChromeViewsTestBase {
public:
UndoWindowTest() {}
~UndoWindowTest() override {}
protected:
void SetUp() override {
ChromeViewsTestBase::SetUp();
undo_window_ = new UndoWindow(GetContext(), delegate_.get());
undo_button_.id = ButtonId::kUndo;
undo_window_->InitWidget();
}
void TearDown() override {
undo_window_->GetWidget()->CloseNow();
ChromeViewsTestBase::TearDown();
}
UndoWindow* undo_window_;
std::unique_ptr<MockAssistiveDelegate> delegate_ =
std::make_unique<MockAssistiveDelegate>();
AssistiveWindowButton undo_button_;
DISALLOW_COPY_AND_ASSIGN(UndoWindowTest);
};
TEST_F(UndoWindowTest, HighlightsUndoButtonWhenNotHighlighted) {
undo_window_->Show();
undo_window_->SetButtonHighlighted(undo_button_, true);
EXPECT_TRUE(undo_window_->GetUndoButtonForTesting()->background() != nullptr);
}
TEST_F(UndoWindowTest, KeepsHighlightingUndoButtonWhenAlreadyHighlighted) {
undo_window_->Show();
undo_window_->SetButtonHighlighted(undo_button_, true);
undo_window_->SetButtonHighlighted(undo_button_, true);
EXPECT_TRUE(undo_window_->GetUndoButtonForTesting()->background() != nullptr);
}
TEST_F(UndoWindowTest, UnhighlightsUndoButtonWhenHighlighted) {
undo_window_->Show();
undo_window_->SetButtonHighlighted(undo_button_, true);
undo_window_->SetButtonHighlighted(undo_button_, false);
EXPECT_TRUE(undo_window_->GetUndoButtonForTesting()->background() == nullptr);
}
TEST_F(UndoWindowTest,
UnhighlightsKeepUndoButtonUnhighlightedWhenAlreadyNotHighlighted) {
undo_window_->Show();
undo_window_->SetButtonHighlighted(undo_button_, false);
undo_window_->SetButtonHighlighted(undo_button_, false);
EXPECT_TRUE(undo_window_->GetUndoButtonForTesting()->background() == nullptr);
}
} // namespace ime
} // 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