| 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/root_window_controller.h" | 7 #include "ash/root_window_controller.h" |
| 8 #include "ash/shelf/shelf_layout_manager.h" | 8 #include "ash/shelf/shelf_layout_manager.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/shell_window_ids.h" | 10 #include "ash/shell_window_ids.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "grit/ui_strings.h" | 22 #include "grit/ui_strings.h" |
| 23 #include "ui/aura/root_window.h" | 23 #include "ui/aura/root_window.h" |
| 24 #include "ui/aura/window.h" | 24 #include "ui/aura/window.h" |
| 25 #include "ui/base/l10n/l10n_util.h" | 25 #include "ui/base/l10n/l10n_util.h" |
| 26 #include "ui/base/resource/resource_bundle.h" | 26 #include "ui/base/resource/resource_bundle.h" |
| 27 #include "ui/gfx/screen.h" | 27 #include "ui/gfx/screen.h" |
| 28 #include "ui/message_center/message_center_tray_delegate.h" | 28 #include "ui/message_center/message_center_tray_delegate.h" |
| 29 #include "ui/message_center/message_center_util.h" | 29 #include "ui/message_center/message_center_util.h" |
| 30 #include "ui/message_center/views/message_bubble_base.h" | 30 #include "ui/message_center/views/message_bubble_base.h" |
| 31 #include "ui/message_center/views/message_center_bubble.h" | 31 #include "ui/message_center/views/message_center_bubble.h" |
| 32 #include "ui/message_center/views/message_popup_bubble.h" | |
| 33 #include "ui/message_center/views/message_popup_collection.h" | 32 #include "ui/message_center/views/message_popup_collection.h" |
| 34 #include "ui/views/bubble/tray_bubble_view.h" | 33 #include "ui/views/bubble/tray_bubble_view.h" |
| 35 #include "ui/views/controls/button/custom_button.h" | 34 #include "ui/views/controls/button/custom_button.h" |
| 36 #include "ui/views/controls/image_view.h" | 35 #include "ui/views/controls/image_view.h" |
| 37 #include "ui/views/controls/label.h" | 36 #include "ui/views/controls/label.h" |
| 38 #include "ui/views/controls/menu/menu_runner.h" | 37 #include "ui/views/controls/menu/menu_runner.h" |
| 39 | 38 |
| 40 #if defined(OS_CHROMEOS) | 39 #if defined(OS_CHROMEOS) |
| 41 | 40 |
| 42 namespace message_center { | 41 namespace message_center { |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 SetVisible(false); | 184 SetVisible(false); |
| 186 message_center_tray_.reset(new message_center::MessageCenterTray( | 185 message_center_tray_.reset(new message_center::MessageCenterTray( |
| 187 this, | 186 this, |
| 188 message_center::MessageCenter::Get())); | 187 message_center::MessageCenter::Get())); |
| 189 OnMessageCenterTrayChanged(); | 188 OnMessageCenterTrayChanged(); |
| 190 } | 189 } |
| 191 | 190 |
| 192 WebNotificationTray::~WebNotificationTray() { | 191 WebNotificationTray::~WebNotificationTray() { |
| 193 // Release any child views that might have back pointers before ~View(). | 192 // Release any child views that might have back pointers before ~View(). |
| 194 message_center_bubble_.reset(); | 193 message_center_bubble_.reset(); |
| 195 popup_bubble_.reset(); | |
| 196 popup_collection_.reset(); | 194 popup_collection_.reset(); |
| 197 } | 195 } |
| 198 | 196 |
| 199 // Public methods. | 197 // Public methods. |
| 200 | 198 |
| 201 bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) { | 199 bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) { |
| 202 if (!ShouldShowMessageCenter()) | 200 if (!ShouldShowMessageCenter()) |
| 203 return false; | 201 return false; |
| 204 | 202 |
| 205 should_block_shelf_auto_hide_ = true; | 203 should_block_shelf_auto_hide_ = true; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 else | 263 else |
| 266 message_center_tray_->ShowPopupBubble(); | 264 message_center_tray_->ShowPopupBubble(); |
| 267 } | 265 } |
| 268 | 266 |
| 269 bool WebNotificationTray::ShowPopups() { | 267 bool WebNotificationTray::ShowPopups() { |
| 270 if (status_area_widget()->login_status() == user::LOGGED_IN_LOCKED || | 268 if (status_area_widget()->login_status() == user::LOGGED_IN_LOCKED || |
| 271 message_center_bubble() || | 269 message_center_bubble() || |
| 272 !status_area_widget()->ShouldShowWebNotifications()) { | 270 !status_area_widget()->ShouldShowWebNotifications()) { |
| 273 return false; | 271 return false; |
| 274 } | 272 } |
| 275 if (message_center::IsRichNotificationEnabled()) { | 273 |
| 276 // No bubble wrappers here, since |popup_collection_| is not a bubble but a | 274 popup_collection_.reset(new message_center::MessagePopupCollection( |
| 277 // collection of widgets. | 275 ash::Shell::GetContainer( |
| 278 popup_collection_.reset(new message_center::MessagePopupCollection( | 276 GetWidget()->GetNativeView()->GetRootWindow(), |
| 279 ash::Shell::GetContainer( | 277 internal::kShellWindowId_StatusContainer), |
| 280 GetWidget()->GetNativeView()->GetRootWindow(), | 278 message_center(), |
| 281 internal::kShellWindowId_StatusContainer), | 279 message_center_tray_.get())); |
| 282 message_center(), | 280 |
| 283 message_center_tray_.get())); | |
| 284 } else { | |
| 285 message_center::MessagePopupBubble* popup_bubble = | |
| 286 new message_center::MessagePopupBubble(message_center()); | |
| 287 popup_bubble_.reset(new internal::WebNotificationBubbleWrapper( | |
| 288 this, popup_bubble)); | |
| 289 } | |
| 290 return true; | 281 return true; |
| 291 } | 282 } |
| 292 | 283 |
| 293 void WebNotificationTray::UpdatePopups() { | |
| 294 if (popup_bubble()) | |
| 295 popup_bubble()->bubble()->ScheduleUpdate(); | |
| 296 }; | |
| 297 | |
| 298 void WebNotificationTray::HidePopups() { | 284 void WebNotificationTray::HidePopups() { |
| 299 popup_bubble_.reset(); | |
| 300 popup_collection_.reset(); | 285 popup_collection_.reset(); |
| 301 } | 286 } |
| 302 | 287 |
| 303 // Private methods. | 288 // Private methods. |
| 304 | 289 |
| 305 bool WebNotificationTray::ShouldShowMessageCenter() { | 290 bool WebNotificationTray::ShouldShowMessageCenter() { |
| 306 return status_area_widget()->login_status() != user::LOGGED_IN_LOCKED && | 291 return status_area_widget()->login_status() != user::LOGGED_IN_LOCKED && |
| 307 !(status_area_widget()->system_tray() && | 292 !(status_area_widget()->system_tray() && |
| 308 status_area_widget()->system_tray()->HasNotificationBubble()); | 293 status_area_widget()->system_tray()->HasNotificationBubble()); |
| 309 } | 294 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 bool WebNotificationTray::ShouldBlockLauncherAutoHide() const { | 343 bool WebNotificationTray::ShouldBlockLauncherAutoHide() const { |
| 359 return should_block_shelf_auto_hide_; | 344 return should_block_shelf_auto_hide_; |
| 360 } | 345 } |
| 361 | 346 |
| 362 bool WebNotificationTray::IsMessageCenterBubbleVisible() const { | 347 bool WebNotificationTray::IsMessageCenterBubbleVisible() const { |
| 363 return (message_center_bubble() && | 348 return (message_center_bubble() && |
| 364 message_center_bubble()->bubble()->IsVisible()); | 349 message_center_bubble()->bubble()->IsVisible()); |
| 365 } | 350 } |
| 366 | 351 |
| 367 bool WebNotificationTray::IsMouseInNotificationBubble() const { | 352 bool WebNotificationTray::IsMouseInNotificationBubble() const { |
| 368 if (!popup_bubble()) | 353 return false; |
| 369 return false; | |
| 370 return popup_bubble()->bubble_view()->GetBoundsInScreen().Contains( | |
| 371 Shell::GetScreen()->GetCursorScreenPoint()); | |
| 372 } | 354 } |
| 373 | 355 |
| 374 void WebNotificationTray::ShowMessageCenterBubble() { | 356 void WebNotificationTray::ShowMessageCenterBubble() { |
| 375 if (!IsMessageCenterBubbleVisible()) | 357 if (!IsMessageCenterBubbleVisible()) |
| 376 message_center_tray_->ShowMessageCenterBubble(); | 358 message_center_tray_->ShowMessageCenterBubble(); |
| 377 } | 359 } |
| 378 | 360 |
| 379 void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) { | 361 void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) { |
| 380 if (alignment == shelf_alignment()) | 362 if (alignment == shelf_alignment()) |
| 381 return; | 363 return; |
| 382 internal::TrayBackgroundView::SetShelfAlignment(alignment); | 364 internal::TrayBackgroundView::SetShelfAlignment(alignment); |
| 383 tray_container()->set_border(NULL); | 365 tray_container()->set_border(NULL); |
| 384 // Destroy any existing bubble so that it will be rebuilt correctly. | 366 // Destroy any existing bubble so that it will be rebuilt correctly. |
| 385 message_center_tray_->HideMessageCenterBubble(); | 367 message_center_tray_->HideMessageCenterBubble(); |
| 386 message_center_tray_->HidePopupBubble(); | 368 message_center_tray_->HidePopupBubble(); |
| 387 } | 369 } |
| 388 | 370 |
| 389 void WebNotificationTray::AnchorUpdated() { | 371 void WebNotificationTray::AnchorUpdated() { |
| 390 if (popup_bubble()) { | |
| 391 popup_bubble()->bubble_view()->UpdateBubble(); | |
| 392 // Ensure that the notification buble is above the launcher/status area. | |
| 393 popup_bubble()->bubble_view()->GetWidget()->StackAtTop(); | |
| 394 UpdateBubbleViewArrow(popup_bubble()->bubble_view()); | |
| 395 } | |
| 396 if (message_center_bubble()) { | 372 if (message_center_bubble()) { |
| 397 message_center_bubble()->bubble_view()->UpdateBubble(); | 373 message_center_bubble()->bubble_view()->UpdateBubble(); |
| 398 UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); | 374 UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); |
| 399 } | 375 } |
| 400 } | 376 } |
| 401 | 377 |
| 402 base::string16 WebNotificationTray::GetAccessibleNameForTray() { | 378 base::string16 WebNotificationTray::GetAccessibleNameForTray() { |
| 403 return l10n_util::GetStringUTF16( | 379 return l10n_util::GetStringUTF16( |
| 404 IDS_MESSAGE_CENTER_ACCESSIBLE_NAME); | 380 IDS_MESSAGE_CENTER_ACCESSIBLE_NAME); |
| 405 } | 381 } |
| 406 | 382 |
| 407 void WebNotificationTray::HideBubbleWithView( | 383 void WebNotificationTray::HideBubbleWithView( |
| 408 const views::TrayBubbleView* bubble_view) { | 384 const views::TrayBubbleView* bubble_view) { |
| 409 if (message_center_bubble() && | 385 if (message_center_bubble() && |
| 410 bubble_view == message_center_bubble()->bubble_view()) { | 386 bubble_view == message_center_bubble()->bubble_view()) { |
| 411 message_center_tray_->HideMessageCenterBubble(); | 387 message_center_tray_->HideMessageCenterBubble(); |
| 412 } else if ((popup_bubble() && bubble_view == popup_bubble()->bubble_view()) || | 388 } else if (popup_collection_.get()) { |
| 413 popup_collection_.get()) { | |
| 414 message_center_tray_->HidePopupBubble(); | 389 message_center_tray_->HidePopupBubble(); |
| 415 } | 390 } |
| 416 } | 391 } |
| 417 | 392 |
| 418 bool WebNotificationTray::PerformAction(const ui::Event& event) { | 393 bool WebNotificationTray::PerformAction(const ui::Event& event) { |
| 419 if (ShouldShowQuietModeMenu(event)) { | 394 if (ShouldShowQuietModeMenu(event)) { |
| 420 ShowQuietModeMenu(event); | 395 ShowQuietModeMenu(event); |
| 421 return true; | 396 return true; |
| 422 } | 397 } |
| 423 | 398 |
| 424 if (message_center_bubble()) | 399 if (message_center_bubble()) |
| 425 message_center_tray_->HideMessageCenterBubble(); | 400 message_center_tray_->HideMessageCenterBubble(); |
| 426 else | 401 else |
| 427 message_center_tray_->ShowMessageCenterBubble(); | 402 message_center_tray_->ShowMessageCenterBubble(); |
| 428 return true; | 403 return true; |
| 429 } | 404 } |
| 430 | 405 |
| 431 void WebNotificationTray::BubbleViewDestroyed() { | 406 void WebNotificationTray::BubbleViewDestroyed() { |
| 432 if (message_center_bubble()) | 407 if (message_center_bubble()) |
| 433 message_center_bubble()->bubble()->BubbleViewDestroyed(); | 408 message_center_bubble()->bubble()->BubbleViewDestroyed(); |
| 434 if (popup_bubble()) | |
| 435 popup_bubble()->bubble()->BubbleViewDestroyed(); | |
| 436 } | 409 } |
| 437 | 410 |
| 438 void WebNotificationTray::OnMouseEnteredView() { | 411 void WebNotificationTray::OnMouseEnteredView() {} |
| 439 if (popup_bubble()) | |
| 440 popup_bubble()->bubble()->OnMouseEnteredView(); | |
| 441 } | |
| 442 | 412 |
| 443 void WebNotificationTray::OnMouseExitedView() { | 413 void WebNotificationTray::OnMouseExitedView() {} |
| 444 if (popup_bubble()) | |
| 445 popup_bubble()->bubble()->OnMouseExitedView(); | |
| 446 } | |
| 447 | 414 |
| 448 base::string16 WebNotificationTray::GetAccessibleNameForBubble() { | 415 base::string16 WebNotificationTray::GetAccessibleNameForBubble() { |
| 449 return GetAccessibleNameForTray(); | 416 return GetAccessibleNameForTray(); |
| 450 } | 417 } |
| 451 | 418 |
| 452 gfx::Rect WebNotificationTray::GetAnchorRect( | 419 gfx::Rect WebNotificationTray::GetAnchorRect( |
| 453 views::Widget* anchor_widget, | 420 views::Widget* anchor_widget, |
| 454 views::TrayBubbleView::AnchorType anchor_type, | 421 views::TrayBubbleView::AnchorType anchor_type, |
| 455 views::TrayBubbleView::AnchorAlignment anchor_alignment) { | 422 views::TrayBubbleView::AnchorAlignment anchor_alignment) { |
| 456 return GetBubbleAnchorRect(anchor_widget, anchor_type, anchor_alignment); | 423 return GetBubbleAnchorRect(anchor_widget, anchor_type, anchor_alignment); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 } | 491 } |
| 525 | 492 |
| 526 message_center::MessageCenterBubble* | 493 message_center::MessageCenterBubble* |
| 527 WebNotificationTray::GetMessageCenterBubbleForTest() { | 494 WebNotificationTray::GetMessageCenterBubbleForTest() { |
| 528 if (!message_center_bubble()) | 495 if (!message_center_bubble()) |
| 529 return NULL; | 496 return NULL; |
| 530 return static_cast<message_center::MessageCenterBubble*>( | 497 return static_cast<message_center::MessageCenterBubble*>( |
| 531 message_center_bubble()->bubble()); | 498 message_center_bubble()->bubble()); |
| 532 } | 499 } |
| 533 | 500 |
| 534 message_center::MessagePopupBubble* | |
| 535 WebNotificationTray::GetPopupBubbleForTest() { | |
| 536 if (!popup_bubble()) | |
| 537 return NULL; | |
| 538 return static_cast<message_center::MessagePopupBubble*>( | |
| 539 popup_bubble()->bubble()); | |
| 540 } | |
| 541 | |
| 542 } // namespace ash | 501 } // namespace ash |
| OLD | NEW |