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

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

Issue 2734933006: Show the settings button on a pinned notification. (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « ui/arc/notification/arc_custom_notification_view.h ('k') | ui/message_center/views/padded_button.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/arc/notification/arc_custom_notification_view.cc
diff --git a/ui/arc/notification/arc_custom_notification_view.cc b/ui/arc/notification/arc_custom_notification_view.cc
index a494efba28e6dfa1d236fda160d408f1f633a02c..805d31ccda71f532be2cdfc7f2d21d5fcf43772d 100644
--- a/ui/arc/notification/arc_custom_notification_view.cc
+++ b/ui/arc/notification/arc_custom_notification_view.cc
@@ -9,24 +9,16 @@
#include "base/memory/ptr_util.h"
#include "components/exo/notification_surface.h"
#include "components/exo/surface.h"
-#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/compositor/layer_animation_observer.h"
-#include "ui/display/screen.h"
#include "ui/events/event_handler.h"
#include "ui/gfx/canvas.h"
-#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/transform.h"
#include "ui/message_center/message_center_style.h"
#include "ui/message_center/views/custom_notification_view.h"
-#include "ui/message_center/views/padded_button.h"
#include "ui/message_center/views/toast_contents_view.h"
-#include "ui/resources/grit/ui_resources.h"
#include "ui/strings/grit/ui_strings.h"
-#include "ui/views/background.h"
-#include "ui/views/border.h"
-#include "ui/views/controls/button/image_button.h"
#include "ui/views/focus/focus_manager.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/painter.h"
@@ -158,30 +150,6 @@ class ArcCustomNotificationView::SlideHelper
DISALLOW_COPY_AND_ASSIGN(SlideHelper);
};
-class ArcCustomNotificationView::ControlButton
- : public message_center::PaddedButton {
- public:
- explicit ControlButton(ArcCustomNotificationView* owner)
- : message_center::PaddedButton(owner), owner_(owner) {}
-
- void OnFocus() override {
- message_center::PaddedButton::OnFocus();
- owner_->UpdateControlButtonsVisibility();
- }
-
- void OnBlur() override {
- message_center::PaddedButton::OnBlur();
- owner_->UpdateControlButtonsVisibility();
- }
-
- void HideInkDrop() { AnimateInkDrop(views::InkDropState::HIDDEN, nullptr); }
-
- private:
- ArcCustomNotificationView* const owner_;
-
- DISALLOW_COPY_AND_ASSIGN(ControlButton);
-};
-
class ArcCustomNotificationView::ContentViewDelegate
: public message_center::CustomNotificationContentViewDelegate {
public:
@@ -189,7 +157,7 @@ class ArcCustomNotificationView::ContentViewDelegate
: owner_(owner) {}
bool IsCloseButtonFocused() const override {
- if (owner_->close_button_ == nullptr)
+ if (!owner_->close_button_)
return false;
return owner_->close_button_->HasFocus();
}
@@ -214,6 +182,20 @@ class ArcCustomNotificationView::ContentViewDelegate
DISALLOW_COPY_AND_ASSIGN(ContentViewDelegate);
};
+ArcCustomNotificationView::ControlButton::ControlButton(
+ ArcCustomNotificationView* owner)
+ : message_center::PaddedButton(owner), owner_(owner) {}
+
+void ArcCustomNotificationView::ControlButton::OnFocus() {
+ message_center::PaddedButton::OnFocus();
+ owner_->UpdateControlButtonsVisibility();
+}
+
+void ArcCustomNotificationView::ControlButton::OnBlur() {
+ message_center::PaddedButton::OnBlur();
+ owner_->UpdateControlButtonsVisibility();
+}
+
ArcCustomNotificationView::ArcCustomNotificationView(
ArcCustomNotificationItem* item)
: item_(item),
@@ -251,6 +233,20 @@ ArcCustomNotificationView::CreateContentViewDelegate() {
return base::MakeUnique<ArcCustomNotificationView::ContentViewDelegate>(this);
}
+void ArcCustomNotificationView::CreateCloseButton() {
+ DCHECK(control_buttons_view_);
+
+ 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 ArcCustomNotificationView::CreateFloatingControlButtons() {
// 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
@@ -273,14 +269,7 @@ void ArcCustomNotificationView::CreateFloatingControlButtons() {
IDS_MESSAGE_NOTIFICATION_SETTINGS_BUTTON_ACCESSIBLE_NAME));
control_buttons_view_->AddChildView(settings_button_);
- close_button_ = new 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));
- control_buttons_view_->AddChildView(close_button_);
+ CreateCloseButton();
views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
@@ -305,6 +294,9 @@ void ArcCustomNotificationView::SetSurface(exo::NotificationSurface* 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_->window()) {
surface_->window()->RemoveObserver(this);
@@ -317,6 +309,8 @@ void ArcCustomNotificationView::SetSurface(exo::NotificationSurface* surface) {
surface_->window()->AddObserver(this);
surface_->window()->AddPreTargetHandler(event_forwarder_.get());
+ CreateFloatingControlButtons();
+
if (GetWidget())
AttachSurface();
}
@@ -343,10 +337,9 @@ void ArcCustomNotificationView::UpdateControlButtonsVisibility() {
if (!surface_ || !floating_control_buttons_widget_)
return;
- const bool target_visiblity =
- surface_->window()->GetBoundsInScreen().Contains(
- display::Screen::GetScreen()->GetCursorScreenPoint()) ||
- close_button_->HasFocus() || settings_button_->HasFocus();
+ const bool target_visiblity = IsMouseHovered() ||
+ (close_button_ && close_button_->HasFocus()) ||
+ settings_button_->HasFocus();
if (target_visiblity == floating_control_buttons_widget_->IsVisible())
return;
@@ -359,10 +352,13 @@ void ArcCustomNotificationView::UpdateControlButtonsVisibility() {
void ArcCustomNotificationView::UpdatePinnedState() {
DCHECK(item_);
- if (item_->pinned() && floating_control_buttons_widget_) {
- floating_control_buttons_widget_.reset();
- } else if (!item_->pinned() && !floating_control_buttons_widget_) {
- CreateFloatingControlButtons();
+ if (item_->pinned() && close_button_) {
+ control_buttons_view_->RemoveChildView(close_button_.get());
+ close_button_.reset();
+ Layout();
+ } else if (!item_->pinned() && !close_button_) {
+ CreateCloseButton();
+ Layout();
}
}
@@ -452,13 +448,17 @@ void ArcCustomNotificationView::Layout() {
return;
gfx::Rect control_buttons_bounds(contents_bounds);
- const int buttons_width = close_button_->GetPreferredSize().width() +
- settings_button_->GetPreferredSize().width();
+ int buttons_width = 0;
+ if (close_button_)
+ buttons_width += close_button_->GetPreferredSize().width();
+ if (settings_button_)
+ buttons_width += settings_button_->GetPreferredSize().width();
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_height(close_button_->GetPreferredSize().height());
+ control_buttons_bounds.set_height(
+ settings_button_->GetPreferredSize().height());
control_buttons_bounds.set_width(buttons_width);
floating_control_buttons_widget_->SetBounds(control_buttons_bounds);
@@ -537,14 +537,13 @@ views::FocusTraversable* ArcCustomNotificationView::GetFocusTraversable() {
void ArcCustomNotificationView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
- if (item_ && !item_->pinned() && sender == close_button_) {
+ if (item_ && !item_->pinned() && sender == close_button_.get()) {
CHECK_EQ(message_center::CustomNotificationView::kViewClassName,
parent()->GetClassName());
static_cast<message_center::CustomNotificationView*>(parent())
->OnCloseButtonPressed();
}
if (item_ && settings_button_ && sender == settings_button_) {
- settings_button_->HideInkDrop();
item_->OpenSettings();
}
}
« no previous file with comments | « ui/arc/notification/arc_custom_notification_view.h ('k') | ui/message_center/views/padded_button.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698