Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Unified Diff: ui/arc/notification/arc_notification_content_view.cc

Issue 2960333003: Extract the view of control buttons on notification into a separated class (Closed)
Patch Set: addressed comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/arc/notification/arc_notification_content_view.cc
diff --git a/ui/arc/notification/arc_notification_content_view.cc b/ui/arc/notification/arc_notification_content_view.cc
index 0b465916bed2601e205d22124925abd2dfdd1775..1e0a86d756cf5ef504042182ee7f33cdc53ca5b9 100644
--- a/ui/arc/notification/arc_notification_content_view.cc
+++ b/ui/arc/notification/arc_notification_content_view.cc
@@ -14,21 +14,16 @@
#include "ui/arc/notification/arc_notification_surface.h"
#include "ui/arc/notification/arc_notification_view.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/events/event_handler.h"
-#include "ui/gfx/animation/linear_animation.h"
-#include "ui/gfx/animation/tween.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/transform.h"
#include "ui/message_center/message_center_style.h"
+#include "ui/message_center/views/notification_control_buttons_view.h"
#include "ui/message_center/views/toast_contents_view.h"
#include "ui/strings/grit/ui_strings.h"
-#include "ui/views/background.h"
#include "ui/views/focus/focus_manager.h"
-#include "ui/views/layout/box_layout.h"
-#include "ui/views/painter.h"
#include "ui/views/widget/root_view.h"
#include "ui/views/widget/widget.h"
#include "ui/wm/core/window_util.h"
@@ -37,10 +32,6 @@ namespace arc {
namespace {
-// This value should be the same as the duration of reveal animation of
-// the settings view of an Android notification.
-constexpr int kBackgroundColorChangeDuration = 360;
-
SkColor GetControlButtonBackgroundColor(
const mojom::ArcNotificationShownContents& shown_contents) {
if (shown_contents == mojom::ArcNotificationShownContents::CONTENTS_SHOWN)
@@ -191,14 +182,14 @@ class ArcNotificationContentView::ContentViewDelegate
: owner_(owner) {}
bool IsCloseButtonFocused() const override {
- if (!owner_->close_button_)
+ if (!owner_->control_buttons_view_)
return false;
- return owner_->close_button_->HasFocus();
+ return owner_->control_buttons_view_->IsCloseButtonFocused();
}
void RequestFocusOnCloseButton() override {
- if (owner_->close_button_)
- owner_->close_button_->RequestFocus();
+ if (owner_->control_buttons_view_)
+ owner_->control_buttons_view_->RequestFocusOnCloseButton();
owner_->UpdateControlButtonsVisibility();
}
@@ -217,28 +208,6 @@ class ArcNotificationContentView::ContentViewDelegate
DISALLOW_COPY_AND_ASSIGN(ContentViewDelegate);
};
-ArcNotificationContentView::ControlButton::ControlButton(
- ArcNotificationContentView* owner)
- : message_center::PaddedButton(owner), owner_(owner) {
- if (owner_->item_) {
- SetBackground(views::CreateSolidBackground(
- GetControlButtonBackgroundColor(owner_->item_->GetShownContents())));
- } else {
- SetBackground(views::CreateSolidBackground(
- message_center::kControlButtonBackgroundColor));
- }
-}
-
-void ArcNotificationContentView::ControlButton::OnFocus() {
- message_center::PaddedButton::OnFocus();
- owner_->UpdateControlButtonsVisibility();
-}
-
-void ArcNotificationContentView::ControlButton::OnBlur() {
- message_center::PaddedButton::OnBlur();
- owner_->UpdateControlButtonsVisibility();
-}
-
// static, for ArcNotificationContentView::GetClassName().
const char ArcNotificationContentView::kViewClassName[] =
"ArcNotificationContentView";
@@ -291,35 +260,6 @@ ArcNotificationContentView::CreateContentViewDelegate() {
this);
}
-void ArcNotificationContentView::CreateCloseButton() {
- DCHECK(control_buttons_view_);
- DCHECK(item_);
-
- close_button_ = base::MakeUnique<ControlButton>(this);
- close_button_->SetImage(views::CustomButton::STATE_NORMAL,
- message_center::GetCloseIcon());
- close_button_->SetAccessibleName(l10n_util::GetStringUTF16(
- IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME));
- close_button_->SetTooltipText(l10n_util::GetStringUTF16(
- IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_TOOLTIP));
- close_button_->set_owned_by_client();
- control_buttons_view_->AddChildView(close_button_.get());
-}
-
-void ArcNotificationContentView::CreateSettingsButton() {
- DCHECK(control_buttons_view_);
- DCHECK(item_);
-
- settings_button_ = new ControlButton(this);
- settings_button_->SetImage(views::CustomButton::STATE_NORMAL,
- message_center::GetSettingsIcon());
- settings_button_->SetAccessibleName(l10n_util::GetStringUTF16(
- IDS_MESSAGE_NOTIFICATION_SETTINGS_BUTTON_ACCESSIBLE_NAME));
- settings_button_->SetTooltipText(l10n_util::GetStringUTF16(
- IDS_MESSAGE_NOTIFICATION_SETTINGS_BUTTON_ACCESSIBLE_NAME));
- control_buttons_view_->AddChildView(settings_button_);
-}
-
void ArcNotificationContentView::MaybeCreateFloatingControlButtons() {
// Floating close button is a transient child of |surface_| and also part
// of the hosting widget's focus chain. It could only be created when both
@@ -328,16 +268,24 @@ void ArcNotificationContentView::MaybeCreateFloatingControlButtons() {
if (!surface_ || !GetWidget() || !item_)
return;
+ DCHECK(!control_buttons_view_);
+ DCHECK(!floating_control_buttons_widget_);
+
+ CHECK_EQ(ArcNotificationView::kViewClassName, parent()->GetClassName());
+ auto* notification_view = static_cast<ArcNotificationView*>(parent());
+
// Creates the control_buttons_view_, which collects all control buttons into
// a horizontal box.
- control_buttons_view_ = new views::View();
- control_buttons_view_->SetLayoutManager(
- new views::BoxLayout(views::BoxLayout::kHorizontal));
+ control_buttons_view_ =
+ new message_center::NotificationControlButtonsView(notification_view);
+ control_buttons_view_->SetPaintToLayer(ui::LAYER_TEXTURED);
+ control_buttons_view_->layer()->SetFillsBoundsOpaquely(false);
- if (item_->IsOpeningSettingsSupported())
- CreateSettingsButton();
- if (!item_->GetPinned())
- CreateCloseButton();
+ control_buttons_view_->SetBackgroundColor(
+ GetControlButtonBackgroundColor(item_->GetShownContents()));
+ control_buttons_view_->ShowSettingsButton(
+ item_->IsOpeningSettingsSupported());
+ control_buttons_view_->ShowCloseButton(!item_->GetPinned());
views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
@@ -363,8 +311,6 @@ void ArcNotificationContentView::SetSurface(ArcNotificationSurface* surface) {
// Reset |floating_control_buttons_widget_| when |surface_| is changed.
floating_control_buttons_widget_.reset();
control_buttons_view_ = nullptr;
- settings_button_ = nullptr;
- close_button_.reset();
if (surface_ && surface_->GetWindow()) {
surface_->GetWindow()->RemoveObserver(this);
@@ -406,12 +352,15 @@ void ArcNotificationContentView::UpdatePreferredSize() {
}
void ArcNotificationContentView::UpdateControlButtonsVisibility() {
- if (!floating_control_buttons_widget_)
+ if (!control_buttons_view_)
return;
+ DCHECK(floating_control_buttons_widget_);
+
const bool target_visiblity =
- IsMouseHovered() || (close_button_ && close_button_->HasFocus()) ||
- (settings_button_ && settings_button_->HasFocus());
+ IsMouseHovered() || (control_buttons_view_->IsCloseButtonFocused()) ||
+ (control_buttons_view_->IsSettingsButtonFocused());
+
if (target_visiblity == floating_control_buttons_widget_->IsVisible())
return;
@@ -429,14 +378,8 @@ void ArcNotificationContentView::UpdatePinnedState() {
if (!control_buttons_view_)
return;
- if (item_->GetPinned() && close_button_) {
- control_buttons_view_->RemoveChildView(close_button_.get());
- close_button_.reset();
- Layout();
- } else if (!item_->GetPinned() && !close_button_) {
- CreateCloseButton();
- Layout();
- }
+ control_buttons_view_->ShowCloseButton(!item_->GetPinned());
+ Layout();
}
void ArcNotificationContentView::UpdateSnapshot() {
@@ -472,30 +415,6 @@ void ArcNotificationContentView::AttachSurface() {
MaybeCreateFloatingControlButtons();
}
-void ArcNotificationContentView::StartControlButtonsColorAnimation() {
- if (control_button_color_animation_)
- control_button_color_animation_->End();
- control_button_color_animation_.reset(new gfx::LinearAnimation(this));
- control_button_color_animation_->SetDuration(kBackgroundColorChangeDuration);
- control_button_color_animation_->Start();
-}
-
-bool ArcNotificationContentView::ShouldUpdateControlButtonsColor() const {
- // Don't update the control button color when we are about to be destroyed.
- if (!item_)
- return false;
-
- if (settings_button_ &&
- settings_button_->background()->get_color() !=
- GetControlButtonBackgroundColor(item_->GetShownContents()))
- return true;
- if (close_button_ &&
- close_button_->background()->get_color() !=
- GetControlButtonBackgroundColor(item_->GetShownContents()))
- return true;
- return false;
-}
-
void ArcNotificationContentView::UpdateAccessibleName() {
// Don't update the accessible name when we are about to be destroyed.
if (!item_)
@@ -555,27 +474,21 @@ void ArcNotificationContentView::Layout() {
// be positioned without the need to consider the transform.
surface_->GetContentWindow()->SetTransform(transform);
- if (!floating_control_buttons_widget_)
- return;
-
- gfx::Rect control_buttons_bounds(contents_bounds);
- int buttons_width = 0;
- int buttons_height = 0;
- if (close_button_) {
- buttons_width += close_button_->GetPreferredSize().width();
- buttons_height = close_button_->GetPreferredSize().height();
- }
- if (settings_button_) {
- buttons_width += settings_button_->GetPreferredSize().width();
- buttons_height = settings_button_->GetPreferredSize().height();
+ if (control_buttons_view_) {
+ DCHECK(floating_control_buttons_widget_);
+ gfx::Rect control_buttons_bounds(contents_bounds);
+ int buttons_width = control_buttons_view_->GetPreferredSize().width();
+ int buttons_height = control_buttons_view_->GetPreferredSize().height();
+
+ control_buttons_bounds.set_x(control_buttons_bounds.right() -
+ buttons_width -
+ message_center::kControlButtonPadding);
+ control_buttons_bounds.set_y(control_buttons_bounds.y() +
+ message_center::kControlButtonPadding);
+ control_buttons_bounds.set_width(buttons_width);
+ control_buttons_bounds.set_height(buttons_height);
+ floating_control_buttons_widget_->SetBounds(control_buttons_bounds);
}
- control_buttons_bounds.set_x(control_buttons_bounds.right() - buttons_width -
- message_center::kControlButtonPadding);
- control_buttons_bounds.set_y(control_buttons_bounds.y() +
- message_center::kControlButtonPadding);
- control_buttons_bounds.set_width(buttons_width);
- control_buttons_bounds.set_height(buttons_height);
- floating_control_buttons_widget_->SetBounds(control_buttons_bounds);
UpdateControlButtonsVisibility();
@@ -656,17 +569,6 @@ void ArcNotificationContentView::GetAccessibleNodeData(
node_data->SetName(accessible_name_);
}
-void ArcNotificationContentView::ButtonPressed(views::Button* sender,
- const ui::Event& event) {
- if (item_ && !item_->GetPinned() && sender == close_button_.get()) {
- CHECK_EQ(ArcNotificationView::kViewClassName, parent()->GetClassName());
- static_cast<ArcNotificationView*>(parent())->OnCloseButtonPressed();
- }
- if (item_ && settings_button_ && sender == settings_button_) {
- item_->OpenSettings();
- }
-}
-
void ArcNotificationContentView::OnWindowBoundsChanged(
aura::Window* window,
const gfx::Rect& old_bounds,
@@ -695,8 +597,11 @@ void ArcNotificationContentView::OnItemUpdated() {
UpdateAccessibleName();
UpdatePinnedState();
UpdateSnapshot();
- if (ShouldUpdateControlButtonsColor())
- StartControlButtonsColorAnimation();
+ if (control_buttons_view_) {
+ DCHECK(floating_control_buttons_widget_);
+ control_buttons_view_->SetBackgroundColor(
+ GetControlButtonBackgroundColor(item_->GetShownContents()));
+ }
}
void ArcNotificationContentView::OnNotificationSurfaceAdded(
@@ -715,35 +620,4 @@ void ArcNotificationContentView::OnNotificationSurfaceRemoved(
SetSurface(nullptr);
}
-void ArcNotificationContentView::AnimationEnded(
- const gfx::Animation* animation) {
- DCHECK_EQ(animation, control_button_color_animation_.get());
- control_button_color_animation_.reset();
-}
-
-void ArcNotificationContentView::AnimationProgressed(
- const gfx::Animation* animation) {
- DCHECK_EQ(animation, control_button_color_animation_.get());
-
- if (item_) {
- const SkColor target =
- GetControlButtonBackgroundColor(item_->GetShownContents());
- const SkColor start =
- target == message_center::kControlButtonBackgroundColor
- ? SK_ColorTRANSPARENT
- : message_center::kControlButtonBackgroundColor;
- const SkColor current_color = gfx::Tween::ColorValueBetween(
- animation->GetCurrentValue(), start, target);
- if (settings_button_) {
- settings_button_->SetBackground(
- views::CreateSolidBackground(current_color));
- settings_button_->SchedulePaint();
- }
- if (close_button_) {
- close_button_->SetBackground(views::CreateSolidBackground(current_color));
- close_button_->SchedulePaint();
- }
- }
-}
-
} // namespace arc
« no previous file with comments | « ui/arc/notification/arc_notification_content_view.h ('k') | ui/arc/notification/arc_notification_content_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698