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

Unified Diff: ui/message_center/views/message_center_view.cc

Issue 20066003: Update notification settings to allow for multiprofile situations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix message_center_unittests Created 7 years, 4 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/message_center/views/message_center_view.cc
diff --git a/ui/message_center/views/message_center_view.cc b/ui/message_center/views/message_center_view.cc
index 0792ec8a690f0d16e98e9538f967a3b36071f008..9b3b9417667897039b017bd79386b8badf4f6b45 100644
--- a/ui/message_center/views/message_center_view.cc
+++ b/ui/message_center/views/message_center_view.cc
@@ -10,22 +10,17 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/stl_util.h"
-#include "grit/ui_resources.h"
#include "grit/ui_strings.h"
#include "ui/base/animation/multi_animation.h"
#include "ui/base/animation/slide_animation.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/insets.h"
-#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
-#include "ui/gfx/text_constants.h"
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_style.h"
-#include "ui/message_center/message_center_tray.h"
-#include "ui/message_center/message_center_util.h"
+#include "ui/message_center/views/message_center_button_bar.h"
#include "ui/message_center/views/message_view.h"
#include "ui/message_center/views/notification_view.h"
#include "ui/message_center/views/notifier_settings_view.h"
@@ -34,13 +29,10 @@
#include "ui/views/background.h"
#include "ui/views/border.h"
#include "ui/views/controls/button/button.h"
-#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/scroll_view.h"
#include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
#include "ui/views/layout/box_layout.h"
-#include "ui/views/layout/grid_layout.h"
-#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
namespace message_center {
@@ -48,9 +40,6 @@ namespace message_center {
namespace {
const int kMinScrollViewHeight = 100;
-const int kFooterLeftMargin = 17;
-const int kFooterRightMargin = 14;
-const int kButtonSize = 40;
const SkColor kNoNotificationsTextColor = SkColorSetRGB(0xb4, 0xb4, 0xb4);
const SkColor kBorderDarkColor = SkColorSetRGB(0xaa, 0xaa, 0xaa);
const SkColor kTransparentColor = SkColorSetARGB(0, 0, 0, 0);
@@ -63,209 +52,6 @@ static const int kDefaultAnimationDurationMs = 120;
} // namespace
-// NotificationCenterButton ////////////////////////////////////////////////////
-
-class NotificationCenterButton : public views::ToggleImageButton {
- public:
- NotificationCenterButton(views::ButtonListener* listener,
- int normal_id,
- int hover_id,
- int pressed_id,
- int text_id);
-
- protected:
- // Overridden from views::View:
- virtual gfx::Size GetPreferredSize() OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(NotificationCenterButton);
-};
-
-NotificationCenterButton::NotificationCenterButton(
- views::ButtonListener* listener,
- int normal_id,
- int hover_id,
- int pressed_id,
- int text_id)
- : views::ToggleImageButton(listener) {
- ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance();
- SetImage(STATE_NORMAL, resource_bundle.GetImageSkiaNamed(normal_id));
- SetImage(STATE_HOVERED, resource_bundle.GetImageSkiaNamed(hover_id));
- SetImage(STATE_PRESSED, resource_bundle.GetImageSkiaNamed(pressed_id));
- SetImageAlignment(views::ImageButton::ALIGN_CENTER,
- views::ImageButton::ALIGN_MIDDLE);
- SetTooltipText(resource_bundle.GetLocalizedString(text_id));
- set_focusable(true);
- set_request_focus_on_press(false);
-}
-
-gfx::Size NotificationCenterButton::GetPreferredSize() {
- return gfx::Size(kButtonSize, kButtonSize);
-}
-
-void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (HasFocus() && (focusable() || IsAccessibilityFocusable())) {
- canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3),
- kFocusBorderColor);
- }
-}
-
-// MessageCenterButtonBar //////////////////////////////////////////////////
-
-class MessageCenterButtonBar : public views::View,
- public views::ButtonListener {
- public:
- MessageCenterButtonBar(MessageCenterView* message_center_view,
- MessageCenter* message_center);
- virtual ~MessageCenterButtonBar();
-
- virtual void SetAllButtonsEnabled(bool enabled);
- void SetCloseAllVisible(bool visible);
-
- private:
- // Overridden from views::View:
- virtual void ChildVisibilityChanged(views::View* child) OVERRIDE;
-
- // Overridden from views::ButtonListener:
- virtual void ButtonPressed(views::Button* sender, const ui::Event& event)
- OVERRIDE;
-
- MessageCenterView* message_center_view() const {
- return message_center_view_;
- }
- MessageCenter* message_center() const { return message_center_; }
- MessageCenterTray* tray() const { return tray_; }
- views::Button* close_all_button() const { return close_all_button_; }
- void set_close_all_button(views::Button* button) {
- close_all_button_ = button;
- }
-
- MessageCenterView* message_center_view_; // Weak reference.
- MessageCenter* message_center_; // Weak reference.
- MessageCenterTray* tray_; // Weak reference.
- views::Button* close_all_button_;
- NotificationCenterButton* settings_button_;
- NotificationCenterButton* quiet_mode_button_;
-
- DISALLOW_COPY_AND_ASSIGN(MessageCenterButtonBar);
-};
-
-MessageCenterButtonBar::MessageCenterButtonBar(
- MessageCenterView* message_center_view,
- MessageCenter* message_center)
- : message_center_view_(message_center_view),
- message_center_(message_center),
- close_all_button_(NULL) {
- if (get_use_acceleration_when_possible())
- SetPaintToLayer(true);
- set_background(views::Background::CreateSolidBackground(
- kMessageCenterBackgroundColor));
-
- views::Label* notification_label = new views::Label(l10n_util::GetStringUTF16(
- IDS_MESSAGE_CENTER_FOOTER_TITLE));
- notification_label->SetAutoColorReadabilityEnabled(false);
- notification_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- notification_label->SetEnabledColor(kRegularTextColor);
- AddChildView(notification_label);
-
- views::View* button_container = new views::View;
- button_container->SetLayoutManager(
- new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
- quiet_mode_button_ = new NotificationCenterButton(
- this,
- IDR_NOTIFICATION_DO_NOT_DISTURB,
- IDR_NOTIFICATION_DO_NOT_DISTURB_HOVER,
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED,
- IDS_MESSAGE_CENTER_QUIET_MODE_BUTTON_TOOLTIP);
- ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance();
- quiet_mode_button_->SetToggledImage(
- views::Button::STATE_NORMAL,
- resource_bundle.GetImageSkiaNamed(
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED));
- quiet_mode_button_->SetToggledImage(
- views::Button::STATE_HOVERED,
- resource_bundle.GetImageSkiaNamed(
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED));
- quiet_mode_button_->SetToggledImage(
- views::Button::STATE_PRESSED,
- resource_bundle.GetImageSkiaNamed(
- IDR_NOTIFICATION_DO_NOT_DISTURB_PRESSED));
- quiet_mode_button_->SetToggled(message_center->IsQuietMode());
- button_container->AddChildView(quiet_mode_button_);
-
- NotificationCenterButton* close_all_button = new NotificationCenterButton(
- this,
- IDR_NOTIFICATION_CLEAR_ALL,
- IDR_NOTIFICATION_CLEAR_ALL_HOVER,
- IDR_NOTIFICATION_CLEAR_ALL_PRESSED,
- IDS_MESSAGE_CENTER_CLEAR_ALL);
- button_container->AddChildView(close_all_button);
- set_close_all_button(close_all_button);
- settings_button_ = new NotificationCenterButton(
- this,
- IDR_NOTIFICATION_SETTINGS,
- IDR_NOTIFICATION_SETTINGS_HOVER,
- IDR_NOTIFICATION_SETTINGS_PRESSED,
- IDS_MESSAGE_CENTER_SETTINGS_BUTTON_LABEL);
- button_container->AddChildView(settings_button_);
-
- gfx::ImageSkia* settings_image =
- ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
- IDR_NOTIFICATION_SETTINGS);
- int image_margin = std::max(0, (kButtonSize - settings_image->width()) / 2);
- views::GridLayout* layout = new views::GridLayout(this);
- SetLayoutManager(layout);
- layout->SetInsets(
- 0, kFooterLeftMargin, 0, std::max(0, kFooterRightMargin - image_margin));
- views::ColumnSet* column = layout->AddColumnSet(0);
- column->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
- 1.0f, views::GridLayout::USE_PREF, 0, 0);
- column->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL,
- 0, views::GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, 0);
- layout->AddView(notification_label);
- layout->AddView(button_container);
-}
-
-MessageCenterButtonBar::~MessageCenterButtonBar() {}
-
-void MessageCenterButtonBar::SetAllButtonsEnabled(bool enabled) {
- if (close_all_button_)
- close_all_button_->SetEnabled(enabled);
- settings_button_->SetEnabled(enabled);
- quiet_mode_button_->SetEnabled(enabled);
-}
-
-void MessageCenterButtonBar::SetCloseAllVisible(bool visible) {
- if (close_all_button_)
- close_all_button_->SetVisible(visible);
-}
-
-// Overridden from views::View:
-void MessageCenterButtonBar::ChildVisibilityChanged(views::View* child) {
- InvalidateLayout();
-}
-
-// Overridden from views::ButtonListener:
-void MessageCenterButtonBar::ButtonPressed(views::Button* sender,
- const ui::Event& event) {
- if (sender == close_all_button()) {
- message_center_view()->ClearAllNotifications();
- } else if (sender == settings_button_) {
- MessageCenterView* center_view = static_cast<MessageCenterView*>(parent());
- center_view->SetSettingsVisible(!center_view->settings_visible());
- } else if (sender == quiet_mode_button_) {
- if (message_center()->IsQuietMode())
- message_center()->SetQuietMode(false);
- else
- message_center()->EnterQuietModeWithExpire(base::TimeDelta::FromDays(1));
- quiet_mode_button_->SetToggled(message_center()->IsQuietMode());
- } else {
- NOTREACHED();
- }
-}
-
// BoundedScrollView ///////////////////////////////////////////////////////////
// A custom scroll view whose height has a minimum and maximum value and whose
@@ -805,17 +591,34 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center,
: message_center_(message_center),
tray_(tray),
top_down_(top_down),
- settings_visible_(initially_settings_visible) {
+ settings_visible_(initially_settings_visible),
+ source_view_(NULL),
+ source_height_(0),
+ target_view_(NULL),
+ target_height_(0) {
message_center_->AddObserver(this);
set_notify_enter_exit_on_child(true);
set_background(views::Background::CreateSolidBackground(
kMessageCenterBackgroundColor));
- button_bar_ = new MessageCenterButtonBar(this, message_center);
+ NotifierSettingsProvider* notifier_settings_provider =
+ message_center_->GetNotifierSettingsProvider();
+ button_bar_ = new MessageCenterButtonBar(this,
+ message_center,
+ notifier_settings_provider,
+ initially_settings_visible);
const int button_height = button_bar_->GetPreferredSize().height();
- scroller_ = new BoundedScrollView(kMinScrollViewHeight,
- max_height - button_height);
+ const int kButtonBarBorderThickness = 1;
jianli 2013/08/05 20:48:03 nit: move it to the constant sections at the begin
dewittj 2013/08/05 22:42:28 Done.
+ button_bar_->set_border(views::Border::CreateSolidSidedBorder(
+ top_down_ ? 0 : kButtonBarBorderThickness,
+ 0,
+ top_down_ ? kButtonBarBorderThickness : 0,
+ 0,
+ kFooterDelimiterColor));
+
+ scroller_ =
+ new BoundedScrollView(kMinScrollViewHeight, max_height - button_height);
if (get_use_acceleration_when_possible()) {
scroller_->SetPaintToLayer(true);
@@ -831,8 +634,7 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center,
message_list_view_->AddChildView(no_notifications_message_view_);
scroller_->SetContents(message_list_view_);
- settings_view_ = new NotifierSettingsView(
- message_center_->GetNotifierSettingsProvider());
+ settings_view_ = new NotifierSettingsView(notifier_settings_provider);
if (initially_settings_visible)
scroller_->SetVisible(false);
@@ -907,6 +709,12 @@ void MessageCenterView::SetSettingsVisible(bool visible) {
settings_transition_animation_->Start();
}
+void MessageCenterView::OnSettingsChanged() {
+ scroller_->InvalidateLayout();
+ PreferredSizeChanged();
+ Layout();
+}
+
void MessageCenterView::ClearAllNotifications() {
scroller_->SetEnabled(false);
button_bar_->SetAllButtonsEnabled(false);
@@ -924,7 +732,8 @@ size_t MessageCenterView::NumMessageViewsForTest() const {
}
void MessageCenterView::Layout() {
- int button_height = button_bar_->GetHeightForWidth(width());
+ int button_height = button_bar_->GetHeightForWidth(width()) +
+ button_bar_->GetInsets().height();
// Skip unnecessary re-layout of contents during the resize animation.
if (settings_transition_animation_ &&
settings_transition_animation_->is_animating() &&
@@ -944,27 +753,6 @@ void MessageCenterView::Layout() {
width(),
height() - button_height);
- bool is_scrollable = false;
- if (scroller_->visible())
- is_scrollable = scroller_->height() < message_list_view_->height();
- else
- is_scrollable = settings_view_->IsScrollable();
-
- if (is_scrollable && !button_bar_->border()) {
- // Draw separator line on the top of the button bar if it is on the bottom
- // or draw it at the bottom if the bar is on the top.
- button_bar_->set_border(views::Border::CreateSolidSidedBorder(
- top_down_ ? 0 : 1,
- 0,
- top_down_ ? 1 : 0,
- 0,
- kFooterDelimiterColor));
- button_bar_->SchedulePaint();
- } else if (!is_scrollable && button_bar_->border()) {
- button_bar_->set_border(NULL);
- button_bar_->SchedulePaint();
- }
-
button_bar_->SetBounds(0,
top_down_ ? 0 : height() - button_height,
width(),
@@ -1008,7 +796,8 @@ int MessageCenterView::GetHeightForWidth(int width) {
content_height += scroller_->GetHeightForWidth(width);
else
content_height += settings_view_->GetHeightForWidth(width);
- return button_bar_->GetHeightForWidth(width) + content_height;
+ return button_bar_->GetHeightForWidth(width) +
+ button_bar_->GetInsets().height() + content_height;
}
bool MessageCenterView::OnMouseWheel(const ui::MouseWheelEvent& event) {

Powered by Google App Engine
This is Rietveld 408576698