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

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

Issue 10878068: Replace Ash web notification tray view with a button. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
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 cdb4be6064baac6375c7dbebf584bac613a0480d..2a0193bcea70f3086b9f91674c15e3bf82a41903 100644
--- a/ash/system/web_notification/web_notification_tray.cc
+++ b/ash/system/web_notification/web_notification_tray.cc
@@ -24,13 +24,13 @@
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/gfx/screen.h"
#include "ui/views/controls/button/button.h"
+#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/button/menu_button.h"
#include "ui/views/controls/button/menu_button_listener.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/menu/menu_model_adapter.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/layout/box_layout.h"
-#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/grid_layout.h"
#include "ui/views/painter.h"
#include "ui/views/widget/widget_observer.h"
@@ -44,10 +44,6 @@ const int kTrayContainerVerticalPaddingVerticalAlignment = 1;
const int kTrayContainerHorizontalPaddingVerticalAlignment = 0;
const int kPaddingFromLeftEdgeOfSystemTrayBottomAlignment = 8;
const int kPaddingFromTopEdgeOfSystemTrayVerticalAlignment = 10;
-const int kTrayWidth = 40;
-const int kTrayHeight = 31;
-const int kTraySideWidth = 32;
-const int kTraySideHeight = 24;
// Web Notification Bubble constants
const int kWebNotificationBubbleMinHeight = 80;
@@ -120,11 +116,10 @@ class WebNotificationList {
if (message_center_visible_ == visible)
return;
message_center_visible_ = visible;
- if (visible) {
- // Clear the unread count when the list is shown.
+ if (!visible) {
+ // When the list lis hidden, clear the unread count, and mark all
+ // notifications as read and shown.
unread_count_ = 0;
- } else {
- // Mark all notifications as read and shown when the list is hidden.
for (Notifications::iterator iter = notifications_.begin();
iter != notifications_.end(); ++iter) {
iter->is_read = true;
@@ -1086,20 +1081,14 @@ class WebNotificationTray::PopupBubble : public WebNotificationTray::Bubble {
WebNotificationTray::WebNotificationTray(
internal::StatusAreaWidget* status_area_widget)
- : internal::TrayBackgroundView(status_area_widget),
+ : internal::TrayBackgroundView(status_area_widget, false),
notification_list_(new WebNotificationList()),
- count_label_(NULL),
+ button_(NULL),
delegate_(NULL),
show_message_center_on_unlock_(false) {
- count_label_ = new views::Label(UTF8ToUTF16("0"));
- internal::SetupLabelForTray(count_label_);
- 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(kMessageCountColor);
+ button_ = new views::ImageButton(this);
- tray_container()->set_size(gfx::Size(kTrayWidth, kTrayHeight));
- tray_container()->AddChildView(count_label_);
+ tray_container()->AddChildView(button_);
UpdateTray();
}
@@ -1177,6 +1166,7 @@ void WebNotificationTray::HideMessageCenterBubble() {
message_center_bubble_.reset();
show_message_center_on_unlock_ = false;
notification_list_->SetMessageCenterVisible(false);
+ UpdateTray();
status_area_widget()->SetHideSystemNotifications(false);
UpdateShouldShowLauncher();
}
@@ -1238,10 +1228,6 @@ void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) {
if (alignment == shelf_alignment())
return;
internal::TrayBackgroundView::SetShelfAlignment(alignment);
- if (alignment == SHELF_ALIGNMENT_BOTTOM)
- tray_container()->set_size(gfx::Size(kTrayWidth, kTrayHeight));
- else
- tray_container()->set_size(gfx::Size(kTraySideWidth, kTraySideHeight));
// Destroy any existing bubble so that it will be rebuilt correctly.
HideMessageCenterBubble();
HidePopupBubble();
@@ -1307,13 +1293,16 @@ void WebNotificationTray::DisableByUrl(const std::string& id) {
}
bool WebNotificationTray::PerformAction(const ui::Event& event) {
- if (message_center_bubble())
- HideMessageCenterBubble();
- else
- ShowMessageCenterBubble();
+ ToggleMessageCenterBubble();
return true;
}
+void WebNotificationTray::ButtonPressed(views::Button* sender,
+ const ui::Event& event) {
+ DCHECK(sender == button_);
+ ToggleMessageCenterBubble();
+}
+
void WebNotificationTray::ShowSettings(const std::string& id) {
if (delegate_)
delegate_->ShowSettings(id);
@@ -1326,9 +1315,35 @@ void WebNotificationTray::OnClicked(const std::string& id) {
// Other private methods
+void WebNotificationTray::ToggleMessageCenterBubble() {
+ if (message_center_bubble())
+ HideMessageCenterBubble();
+ else
+ ShowMessageCenterBubble();
+ UpdateTray();
+}
+
void WebNotificationTray::UpdateTray() {
- count_label_->SetText(UTF8ToUTF16(
- GetNotificationText(notification_list()->unread_count())));
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (notification_list()->unread_count() > 0) {
+ button_->SetImage(views::CustomButton::BS_NORMAL, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_NORMAL));
+ button_->SetImage(views::CustomButton::BS_HOT, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_HOVER));
+ button_->SetImage(views::CustomButton::BS_PUSHED, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_ACTIVE_PRESSED));
+ } else {
+ button_->SetImage(views::CustomButton::BS_NORMAL, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_NORMAL));
+ button_->SetImage(views::CustomButton::BS_HOT, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_HOVER));
+ button_->SetImage(views::CustomButton::BS_PUSHED, rb.GetImageSkiaNamed(
+ IDR_AURA_UBER_TRAY_NOTIFY_BUTTON_INACTIVE_PRESSED));
+ }
+ if (message_center_bubble())
+ button_->SetState(views::CustomButton::BS_PUSHED);
+ else
+ button_->SetState(views::CustomButton::BS_NORMAL);
bool is_visible =
(status_area_widget()->login_status() != user::LOGGED_IN_NONE) &&
(status_area_widget()->login_status() != user::LOGGED_IN_LOCKED) &&
@@ -1339,8 +1354,6 @@ void WebNotificationTray::UpdateTray() {
}
void WebNotificationTray::UpdateTrayAndBubble() {
- UpdateTray();
-
if (message_center_bubble())
message_center_bubble()->ScheduleUpdate();
@@ -1350,6 +1363,7 @@ void WebNotificationTray::UpdateTrayAndBubble() {
else
popup_bubble()->ScheduleUpdate();
}
+ UpdateTray();
}
void WebNotificationTray::HideBubble(Bubble* bubble) {

Powered by Google App Engine
This is Rietveld 408576698