| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/system/web_notification/web_notification_tray.h" | 5 #include "ash/system/web_notification/web_notification_tray.h" |
| 6 | 6 |
| 7 #include "ash/common/ash_switches.h" | 7 #include "ash/common/ash_switches.h" |
| 8 #include "ash/common/material_design/material_design_controller.h" | 8 #include "ash/common/material_design/material_design_controller.h" |
| 9 #include "ash/common/session/session_state_delegate.h" | 9 #include "ash/common/session/session_state_delegate.h" |
| 10 #include "ash/common/shelf/shelf_constants.h" | 10 #include "ash/common/shelf/shelf_constants.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 } // namespace message_center | 59 } // namespace message_center |
| 60 | 60 |
| 61 #endif // defined(OS_CHROMEOS) | 61 #endif // defined(OS_CHROMEOS) |
| 62 | 62 |
| 63 namespace ash { | 63 namespace ash { |
| 64 namespace { | 64 namespace { |
| 65 | 65 |
| 66 // Menu commands | 66 // Menu commands |
| 67 const int kToggleQuietMode = 0; | 67 const int kToggleQuietMode = 0; |
| 68 const int kEnableQuietModeDay = 2; | 68 const int kEnableQuietModeDay = 2; |
| 69 | |
| 70 } | 69 } |
| 71 | 70 |
| 72 namespace { | 71 namespace { |
| 73 | 72 |
| 74 const SkColor kWebNotificationColorNoUnread = | 73 const SkColor kWebNotificationColorNoUnread = |
| 75 SkColorSetARGB(128, 255, 255, 255); | 74 SkColorSetARGB(128, 255, 255, 255); |
| 76 const SkColor kWebNotificationColorWithUnread = SK_ColorWHITE; | 75 const SkColor kWebNotificationColorWithUnread = SK_ColorWHITE; |
| 77 const int kNoUnreadIconSize = 18; | 76 const int kNoUnreadIconSize = 18; |
| 78 } | 77 } |
| 79 | 78 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 205 |
| 207 WebNotificationTray::WebNotificationTray(StatusAreaWidget* status_area_widget) | 206 WebNotificationTray::WebNotificationTray(StatusAreaWidget* status_area_widget) |
| 208 : TrayBackgroundView(status_area_widget->wm_shelf()), | 207 : TrayBackgroundView(status_area_widget->wm_shelf()), |
| 209 status_area_widget_(status_area_widget), | 208 status_area_widget_(status_area_widget), |
| 210 button_(NULL), | 209 button_(NULL), |
| 211 show_message_center_on_unlock_(false), | 210 show_message_center_on_unlock_(false), |
| 212 should_update_tray_content_(false), | 211 should_update_tray_content_(false), |
| 213 should_block_shelf_auto_hide_(false) { | 212 should_block_shelf_auto_hide_(false) { |
| 214 DCHECK(status_area_widget_); | 213 DCHECK(status_area_widget_); |
| 215 button_ = new WebNotificationButton(this); | 214 button_ = new WebNotificationButton(this); |
| 216 button_->set_triggerable_event_flags( | 215 button_->set_triggerable_event_flags(ui::EF_LEFT_MOUSE_BUTTON | |
| 217 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON); | 216 ui::EF_RIGHT_MOUSE_BUTTON); |
| 218 tray_container()->AddChildView(button_); | 217 tray_container()->AddChildView(button_); |
| 219 button_->SetFocusBehavior(FocusBehavior::NEVER); | 218 button_->SetFocusBehavior(FocusBehavior::NEVER); |
| 220 SetContentsBackground(); | 219 SetContentsBackground(); |
| 221 tray_container()->SetBorder(views::Border::NullBorder()); | 220 tray_container()->SetBorder(views::Border::NullBorder()); |
| 222 message_center_tray_.reset(new message_center::MessageCenterTray( | 221 message_center_tray_.reset(new message_center::MessageCenterTray( |
| 223 this, | 222 this, message_center::MessageCenter::Get())); |
| 224 message_center::MessageCenter::Get())); | |
| 225 WmShelf* shelf = WmLookup::Get() | 223 WmShelf* shelf = WmLookup::Get() |
| 226 ->GetWindowForWidget(status_area_widget) | 224 ->GetWindowForWidget(status_area_widget) |
| 227 ->GetRootWindowController() | 225 ->GetRootWindowController() |
| 228 ->GetShelf(); | 226 ->GetShelf(); |
| 229 popup_alignment_delegate_.reset(new AshPopupAlignmentDelegate(shelf)); | 227 popup_alignment_delegate_.reset(new AshPopupAlignmentDelegate(shelf)); |
| 230 popup_collection_.reset(new message_center::MessagePopupCollection( | 228 popup_collection_.reset(new message_center::MessagePopupCollection( |
| 231 message_center(), | 229 message_center(), message_center_tray_.get(), |
| 232 message_center_tray_.get(), | |
| 233 popup_alignment_delegate_.get())); | 230 popup_alignment_delegate_.get())); |
| 234 const display::Display& display = WmLookup::Get() | 231 const display::Display& display = WmLookup::Get() |
| 235 ->GetWindowForWidget(status_area_widget) | 232 ->GetWindowForWidget(status_area_widget) |
| 236 ->GetDisplayNearestWindow(); | 233 ->GetDisplayNearestWindow(); |
| 237 popup_alignment_delegate_->StartObserving(display::Screen::GetScreen(), | 234 popup_alignment_delegate_->StartObserving(display::Screen::GetScreen(), |
| 238 display); | 235 display); |
| 239 OnMessageCenterTrayChanged(); | 236 OnMessageCenterTrayChanged(); |
| 240 } | 237 } |
| 241 | 238 |
| 242 WebNotificationTray::~WebNotificationTray() { | 239 WebNotificationTray::~WebNotificationTray() { |
| 243 // Release any child views that might have back pointers before ~View(). | 240 // Release any child views that might have back pointers before ~View(). |
| 244 message_center_bubble_.reset(); | 241 message_center_bubble_.reset(); |
| 245 popup_alignment_delegate_.reset(); | 242 popup_alignment_delegate_.reset(); |
| 246 popup_collection_.reset(); | 243 popup_collection_.reset(); |
| 247 } | 244 } |
| 248 | 245 |
| 249 // Public methods. | 246 // Public methods. |
| 250 | 247 |
| 251 bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) { | 248 bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) { |
| 252 if (!ShouldShowMessageCenter()) | 249 if (!ShouldShowMessageCenter()) |
| 253 return false; | 250 return false; |
| 254 | 251 |
| 255 should_block_shelf_auto_hide_ = true; | 252 should_block_shelf_auto_hide_ = true; |
| 256 message_center::MessageCenterBubble* message_center_bubble = | 253 message_center::MessageCenterBubble* message_center_bubble = |
| 257 new message_center::MessageCenterBubble( | 254 new message_center::MessageCenterBubble(message_center(), |
| 258 message_center(), | 255 message_center_tray_.get(), true); |
| 259 message_center_tray_.get(), | |
| 260 true); | |
| 261 | 256 |
| 262 int max_height; | 257 int max_height; |
| 263 if (IsHorizontalAlignment(shelf()->GetAlignment())) { | 258 if (IsHorizontalAlignment(shelf()->GetAlignment())) { |
| 264 max_height = shelf()->GetIdealBounds().y(); | 259 max_height = shelf()->GetIdealBounds().y(); |
| 265 } else { | 260 } else { |
| 266 // Assume the status area and bubble bottoms are aligned when vertical. | 261 // Assume the status area and bubble bottoms are aligned when vertical. |
| 267 WmWindow* status_area_window = | 262 WmWindow* status_area_window = |
| 268 WmLookup::Get()->GetWindowForWidget(status_area_widget_); | 263 WmLookup::Get()->GetWindowForWidget(status_area_widget_); |
| 269 gfx::Rect bounds_in_root = | 264 gfx::Rect bounds_in_root = |
| 270 status_area_window->GetRootWindow()->ConvertRectFromScreen( | 265 status_area_window->GetRootWindow()->ConvertRectFromScreen( |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 } | 359 } |
| 365 | 360 |
| 366 void WebNotificationTray::AnchorUpdated() { | 361 void WebNotificationTray::AnchorUpdated() { |
| 367 if (message_center_bubble()) { | 362 if (message_center_bubble()) { |
| 368 message_center_bubble()->bubble_view()->UpdateBubble(); | 363 message_center_bubble()->bubble_view()->UpdateBubble(); |
| 369 UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); | 364 UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); |
| 370 } | 365 } |
| 371 } | 366 } |
| 372 | 367 |
| 373 base::string16 WebNotificationTray::GetAccessibleNameForTray() { | 368 base::string16 WebNotificationTray::GetAccessibleNameForTray() { |
| 374 return l10n_util::GetStringUTF16( | 369 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_ACCESSIBLE_NAME); |
| 375 IDS_MESSAGE_CENTER_ACCESSIBLE_NAME); | |
| 376 } | 370 } |
| 377 | 371 |
| 378 void WebNotificationTray::HideBubbleWithView( | 372 void WebNotificationTray::HideBubbleWithView( |
| 379 const views::TrayBubbleView* bubble_view) { | 373 const views::TrayBubbleView* bubble_view) { |
| 380 if (message_center_bubble() && | 374 if (message_center_bubble() && |
| 381 bubble_view == message_center_bubble()->bubble_view()) { | 375 bubble_view == message_center_bubble()->bubble_view()) { |
| 382 message_center_tray_->HideMessageCenterBubble(); | 376 message_center_tray_->HideMessageCenterBubble(); |
| 383 } else if (popup_collection_.get()) { | 377 } else if (popup_collection_.get()) { |
| 384 message_center_tray_->HidePopupBubble(); | 378 message_center_tray_->HidePopupBubble(); |
| 385 } | 379 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 bubble_widget, kShellWindowId_SettingBubbleContainer, params); | 419 bubble_widget, kShellWindowId_SettingBubbleContainer, params); |
| 426 } | 420 } |
| 427 | 421 |
| 428 void WebNotificationTray::HideBubble(const views::TrayBubbleView* bubble_view) { | 422 void WebNotificationTray::HideBubble(const views::TrayBubbleView* bubble_view) { |
| 429 HideBubbleWithView(bubble_view); | 423 HideBubbleWithView(bubble_view); |
| 430 } | 424 } |
| 431 | 425 |
| 432 bool WebNotificationTray::ShowNotifierSettings() { | 426 bool WebNotificationTray::ShowNotifierSettings() { |
| 433 if (message_center_bubble()) { | 427 if (message_center_bubble()) { |
| 434 static_cast<message_center::MessageCenterBubble*>( | 428 static_cast<message_center::MessageCenterBubble*>( |
| 435 message_center_bubble()->bubble())->SetSettingsVisible(); | 429 message_center_bubble()->bubble()) |
| 430 ->SetSettingsVisible(); |
| 436 return true; | 431 return true; |
| 437 } | 432 } |
| 438 return ShowMessageCenterInternal(true /* show_settings */); | 433 return ShowMessageCenterInternal(true /* show_settings */); |
| 439 } | 434 } |
| 440 | 435 |
| 441 bool WebNotificationTray::IsContextMenuEnabled() const { | 436 bool WebNotificationTray::IsContextMenuEnabled() const { |
| 442 return IsLoggedIn(); | 437 return IsLoggedIn(); |
| 443 } | 438 } |
| 444 | 439 |
| 445 message_center::MessageCenterTray* WebNotificationTray::GetMessageCenterTray() { | 440 message_center::MessageCenterTray* WebNotificationTray::GetMessageCenterTray() { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 461 ui::Accelerator* accelerator) { | 456 ui::Accelerator* accelerator) { |
| 462 return false; | 457 return false; |
| 463 } | 458 } |
| 464 | 459 |
| 465 void WebNotificationTray::ExecuteCommand(int command_id, int event_flags) { | 460 void WebNotificationTray::ExecuteCommand(int command_id, int event_flags) { |
| 466 if (command_id == kToggleQuietMode) { | 461 if (command_id == kToggleQuietMode) { |
| 467 bool in_quiet_mode = message_center()->IsQuietMode(); | 462 bool in_quiet_mode = message_center()->IsQuietMode(); |
| 468 message_center()->SetQuietMode(!in_quiet_mode); | 463 message_center()->SetQuietMode(!in_quiet_mode); |
| 469 return; | 464 return; |
| 470 } | 465 } |
| 471 base::TimeDelta expires_in = command_id == kEnableQuietModeDay ? | 466 base::TimeDelta expires_in = command_id == kEnableQuietModeDay |
| 472 base::TimeDelta::FromDays(1): | 467 ? base::TimeDelta::FromDays(1) |
| 473 base::TimeDelta::FromHours(1); | 468 : base::TimeDelta::FromHours(1); |
| 474 message_center()->EnterQuietModeWithExpire(expires_in); | 469 message_center()->EnterQuietModeWithExpire(expires_in); |
| 475 } | 470 } |
| 476 | 471 |
| 477 void WebNotificationTray::ButtonPressed(views::Button* sender, | 472 void WebNotificationTray::ButtonPressed(views::Button* sender, |
| 478 const ui::Event& event) { | 473 const ui::Event& event) { |
| 479 DCHECK_EQ(button_, sender); | 474 DCHECK_EQ(button_, sender); |
| 480 PerformAction(event); | 475 PerformAction(event); |
| 481 } | 476 } |
| 482 | 477 |
| 483 void WebNotificationTray::OnMessageCenterTrayChanged() { | 478 void WebNotificationTray::OnMessageCenterTrayChanged() { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 | 533 |
| 539 message_center::MessageCenterBubble* | 534 message_center::MessageCenterBubble* |
| 540 WebNotificationTray::GetMessageCenterBubbleForTest() { | 535 WebNotificationTray::GetMessageCenterBubbleForTest() { |
| 541 if (!message_center_bubble()) | 536 if (!message_center_bubble()) |
| 542 return NULL; | 537 return NULL; |
| 543 return static_cast<message_center::MessageCenterBubble*>( | 538 return static_cast<message_center::MessageCenterBubble*>( |
| 544 message_center_bubble()->bubble()); | 539 message_center_bubble()->bubble()); |
| 545 } | 540 } |
| 546 | 541 |
| 547 } // namespace ash | 542 } // namespace ash |
| OLD | NEW |