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

Unified Diff: ash/system/web_notification/web_notification_tray.cc

Issue 10834164: Add message to Ash message center for no notifications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address feedback Created 8 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
« no previous file with comments | « ash/system/web_notification/web_notification_tray.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/web_notification/web_notification_tray.cc
diff --git a/ash/system/web_notification/web_notification_tray.cc b/ash/system/web_notification/web_notification_tray.cc
index 4106e119a53e96711c96c085e07355ec2b0561ed..a9e439e9dcf77d01e6e0a9556d7d2b4891835bc8 100644
--- a/ash/system/web_notification/web_notification_tray.cc
+++ b/ash/system/web_notification/web_notification_tray.cc
@@ -56,6 +56,8 @@ const int kUpdateDelayMs = 50;
// Limit the number of visible notifications.
const int kMaxVisibleNotifications = 100;
const int kAutocloseDelaySeconds = 5;
+const SkColor kMessageCountColor = SkColorSetARGB(0xff, 0xff, 0xff, 0xff);
+const SkColor kMessageCountDimmedColor = SkColorSetARGB(0x60, 0xff, 0xff, 0xff);
// Individual notifications constants
const int kWebNotificationWidth = 320;
@@ -437,8 +439,10 @@ class WebNotificationView : public views::View,
// Overridden from ButtonListener.
virtual void ButtonPressed(views::Button* sender,
const views::Event& event) OVERRIDE {
- if (sender == close_button_)
+ if (sender == close_button_) {
tray_->RemoveNotification(notification_.id);
+ tray_->HideMessageCenterBubbleIfEmpty();
+ }
}
// Overridden from MenuButtonListener.
@@ -504,11 +508,17 @@ class WebNotificationButtonView : public views::View,
virtual ~WebNotificationButtonView() {
}
+ void SetCloseAllVisible(bool visible) {
+ close_all_button_->SetVisible(visible);
+ }
+
// Overridden from ButtonListener.
virtual void ButtonPressed(views::Button* sender,
const views::Event& event) OVERRIDE {
- if (sender == close_all_button_)
+ if (sender == close_all_button_) {
tray_->RemoveAllNotifications();
+ tray_->HideMessageCenterBubbleIfEmpty();
+ }
}
private:
@@ -545,16 +555,37 @@ class WebContentsView : public views::View {
class MessageCenterContentsView : public WebContentsView {
public:
+ class ScrollContentView : public views::View {
+ public:
+ ScrollContentView() {
+ views::BoxLayout* layout =
+ new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1);
+ layout->set_spread_blank_space(true);
+ SetLayoutManager(layout);
+ }
+
+ virtual ~ScrollContentView() {};
+
+ virtual gfx::Size GetPreferredSize() OVERRIDE {
+ if (!preferred_size_.IsEmpty())
+ return preferred_size_;
+ return views::View::GetPreferredSize();
+ }
+
+ void set_preferred_size(const gfx::Size& size) { preferred_size_ = size; }
+
+ private:
+ gfx::Size preferred_size_;
+ DISALLOW_COPY_AND_ASSIGN(ScrollContentView);
+ };
+
explicit MessageCenterContentsView(WebNotificationTray* tray)
: WebContentsView(tray) {
SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
set_background(views::Background::CreateSolidBackground(kBackgroundColor));
- scroll_content_ = new views::View;
- scroll_content_->SetLayoutManager(
- new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
-
+ scroll_content_ = new ScrollContentView;
scroller_ = new internal::FixedSizedScrollView;
scroller_->SetContentsView(scroll_content_);
AddChildView(scroller_);
@@ -573,25 +604,40 @@ class MessageCenterContentsView : public WebContentsView {
if (++num_children >= kMaxVisibleNotifications)
break;
}
+ if (num_children == 0) {
+ views::Label* label = new views::Label(l10n_util::GetStringUTF16(
+ IDS_ASH_WEB_NOTFICATION_TRAY_NO_MESSAGES));
+ label->SetFont(label->font().DeriveFont(2));
+ label->SetHorizontalAlignment(views::Label::ALIGN_CENTER);
+ scroll_content_->AddChildView(label);
+ button_view_->SetCloseAllVisible(false);
+ } else {
+ button_view_->SetCloseAllVisible(true);
+ }
SizeScrollContent();
+ Layout();
GetWidget()->GetRootView()->SchedulePaint();
}
private:
void SizeScrollContent() {
gfx::Size scroll_size = scroll_content_->GetPreferredSize();
- int button_height = button_view_->GetPreferredSize().height();
- int scroll_height = std::min(
- std::max(scroll_size.height(),
- kWebNotificationBubbleMinHeight - button_height),
- kWebNotificationBubbleMaxHeight - button_height);
+ const int button_height = button_view_->GetPreferredSize().height();
+ const int min_height = kWebNotificationBubbleMinHeight - button_height;
+ const int max_height = kWebNotificationBubbleMaxHeight - button_height;
+ int scroll_height = std::min(std::max(
+ scroll_size.height(), min_height), max_height);
scroll_size.set_height(scroll_height);
+ if (scroll_height == min_height)
+ scroll_content_->set_preferred_size(scroll_size);
+ else
+ scroll_content_->set_preferred_size(gfx::Size());
scroller_->SetFixedSize(scroll_size);
scroller_->SizeToPreferredSize();
}
internal::FixedSizedScrollView* scroller_;
- views::View* scroll_content_;
+ ScrollContentView* scroll_content_;
internal::WebNotificationButtonView* button_view_;
DISALLOW_COPY_AND_ASSIGN(MessageCenterContentsView);
@@ -731,10 +777,6 @@ class WebNotificationTray::Bubble : public TrayBubbleView::Host,
void UpdateBubbleView() {
const WebNotificationList::Notifications& notifications =
tray_->notification_list()->notifications();
- if (notifications.size() == 0) {
- tray_->HideBubble(this); // deletes |this|!
- return;
- }
contents_view_->Update(notifications);
bubble_view_->Show();
bubble_view_->UpdateBubble();
@@ -779,6 +821,7 @@ WebNotificationTray::WebNotificationTray(
gfx::Font font = count_label_->font();
count_label_->SetFont(font.DeriveFont(0, font.GetStyle() & ~gfx::Font::BOLD));
count_label_->SetHorizontalAlignment(views::Label::ALIGN_CENTER);
+ count_label_->SetEnabledColor(kMessageCountDimmedColor);
tray_container()->set_size(gfx::Size(kTrayWidth, kTrayHeight));
tray_container()->AddChildView(count_label_);
@@ -837,6 +880,7 @@ void WebNotificationTray::RemoveAllNotifications() {
}
}
notification_list_->RemoveAllNotifications();
+ HideMessageCenterBubble();
UpdateTrayAndBubble();
}
@@ -873,7 +917,7 @@ void WebNotificationTray::DisableByUrl(const std::string& id) {
void WebNotificationTray::ShowMessageCenterBubble() {
if (status_area_widget()->login_status() == user::LOGGED_IN_LOCKED)
return;
- if (message_center_bubble() || GetNotificationCount() == 0) {
+ if (message_center_bubble()) {
UpdateTray();
return;
}
@@ -886,12 +930,19 @@ void WebNotificationTray::ShowMessageCenterBubble() {
}
void WebNotificationTray::HideMessageCenterBubble() {
+ if (!message_center_bubble())
+ return;
message_center_bubble_.reset();
show_message_center_on_unlock_ = false;
notification_list_->SetIsVisible(false);
status_area_widget()->SetHideSystemNotifications(false);
}
+void WebNotificationTray::HideMessageCenterBubbleIfEmpty() {
+ if (GetNotificationCount() == 0)
+ HideMessageCenterBubble();
+}
+
void WebNotificationTray::ShowNotificationBubble() {
if (status_area_widget()->login_status() == user::LOGGED_IN_LOCKED)
return;
@@ -966,21 +1017,27 @@ int WebNotificationTray::GetNotificationCount() const {
void WebNotificationTray::UpdateTray() {
count_label_->SetText(UTF8ToUTF16(
GetNotificationText(notification_list()->unread_count())));
+ // Dim the message count text only if the message center is empty.
+ count_label_->SetEnabledColor(
+ (notification_list()->notifications().size() == 0) ?
+ kMessageCountDimmedColor : kMessageCountColor);
+ SetVisible((status_area_widget()->login_status() != user::LOGGED_IN_NONE));
Layout();
SchedulePaint();
}
void WebNotificationTray::UpdateTrayAndBubble() {
UpdateTray();
- if (GetNotificationCount() == 0) {
- HideMessageCenterBubble();
- HideNotificationBubble();
- return;
- }
+
if (message_center_bubble())
message_center_bubble()->ScheduleUpdate();
- if (notification_bubble())
- notification_bubble()->ScheduleUpdate();
+
+ if (notification_bubble()) {
+ if (GetNotificationCount() == 0)
+ HideNotificationBubble();
+ else
+ notification_bubble()->ScheduleUpdate();
+ }
}
void WebNotificationTray::HideBubble(Bubble* bubble) {
« no previous file with comments | « ash/system/web_notification/web_notification_tray.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698