| 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/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/root_window_controller.h" | 8 #include "ash/root_window_controller.h" |
| 9 #include "ash/shelf/shelf_layout_manager.h" | 9 #include "ash/shelf/shelf_layout_manager.h" |
| 10 #include "ash/shelf/shelf_layout_manager_observer.h" | 10 #include "ash/shelf/shelf_layout_manager_observer.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 | 56 |
| 57 namespace ash { | 57 namespace ash { |
| 58 namespace { | 58 namespace { |
| 59 | 59 |
| 60 // Menu commands | 60 // Menu commands |
| 61 const int kToggleQuietMode = 0; | 61 const int kToggleQuietMode = 0; |
| 62 const int kEnableQuietModeDay = 2; | 62 const int kEnableQuietModeDay = 2; |
| 63 | 63 |
| 64 } | 64 } |
| 65 | 65 |
| 66 namespace internal { | |
| 67 namespace { | 66 namespace { |
| 68 | 67 |
| 69 const SkColor kWebNotificationColorNoUnread = SkColorSetA(SK_ColorWHITE, 128); | 68 const SkColor kWebNotificationColorNoUnread = SkColorSetA(SK_ColorWHITE, 128); |
| 70 const SkColor kWebNotificationColorWithUnread = SK_ColorWHITE; | 69 const SkColor kWebNotificationColorWithUnread = SK_ColorWHITE; |
| 71 | 70 |
| 72 } | 71 } |
| 73 | 72 |
| 74 // Observes the change of work area (including temporary change by auto-hide) | 73 // Observes the change of work area (including temporary change by auto-hide) |
| 75 // and notifies MessagePopupCollection. | 74 // and notifies MessagePopupCollection. |
| 76 class WorkAreaObserver : public ShelfLayoutManagerObserver, | 75 class WorkAreaObserver : public ShelfLayoutManagerObserver, |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 bubble->InitializeContents(bubble_view); | 225 bubble->InitializeContents(bubble_view); |
| 227 } | 226 } |
| 228 | 227 |
| 229 message_center::MessageBubbleBase* bubble() const { return bubble_.get(); } | 228 message_center::MessageBubbleBase* bubble() const { return bubble_.get(); } |
| 230 | 229 |
| 231 // Convenience accessors. | 230 // Convenience accessors. |
| 232 views::TrayBubbleView* bubble_view() const { return bubble_->bubble_view(); } | 231 views::TrayBubbleView* bubble_view() const { return bubble_->bubble_view(); } |
| 233 | 232 |
| 234 private: | 233 private: |
| 235 scoped_ptr<message_center::MessageBubbleBase> bubble_; | 234 scoped_ptr<message_center::MessageBubbleBase> bubble_; |
| 236 scoped_ptr<internal::TrayBubbleWrapper> bubble_wrapper_; | 235 scoped_ptr<TrayBubbleWrapper> bubble_wrapper_; |
| 237 | 236 |
| 238 DISALLOW_COPY_AND_ASSIGN(WebNotificationBubbleWrapper); | 237 DISALLOW_COPY_AND_ASSIGN(WebNotificationBubbleWrapper); |
| 239 }; | 238 }; |
| 240 | 239 |
| 241 class WebNotificationButton : public views::CustomButton { | 240 class WebNotificationButton : public views::CustomButton { |
| 242 public: | 241 public: |
| 243 WebNotificationButton(views::ButtonListener* listener) | 242 WebNotificationButton(views::ButtonListener* listener) |
| 244 : views::CustomButton(listener), | 243 : views::CustomButton(listener), |
| 245 is_bubble_visible_(false), | 244 is_bubble_visible_(false), |
| 246 unread_count_(0) { | 245 unread_count_(0) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 } | 289 } |
| 291 | 290 |
| 292 bool is_bubble_visible_; | 291 bool is_bubble_visible_; |
| 293 int unread_count_; | 292 int unread_count_; |
| 294 | 293 |
| 295 views::Label* unread_label_; | 294 views::Label* unread_label_; |
| 296 | 295 |
| 297 DISALLOW_COPY_AND_ASSIGN(WebNotificationButton); | 296 DISALLOW_COPY_AND_ASSIGN(WebNotificationButton); |
| 298 }; | 297 }; |
| 299 | 298 |
| 300 } // namespace internal | 299 WebNotificationTray::WebNotificationTray(StatusAreaWidget* status_area_widget) |
| 301 | |
| 302 WebNotificationTray::WebNotificationTray( | |
| 303 internal::StatusAreaWidget* status_area_widget) | |
| 304 : TrayBackgroundView(status_area_widget), | 300 : TrayBackgroundView(status_area_widget), |
| 305 button_(NULL), | 301 button_(NULL), |
| 306 show_message_center_on_unlock_(false), | 302 show_message_center_on_unlock_(false), |
| 307 should_update_tray_content_(false), | 303 should_update_tray_content_(false), |
| 308 should_block_shelf_auto_hide_(false) { | 304 should_block_shelf_auto_hide_(false) { |
| 309 button_ = new internal::WebNotificationButton(this); | 305 button_ = new WebNotificationButton(this); |
| 310 button_->set_triggerable_event_flags( | 306 button_->set_triggerable_event_flags( |
| 311 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON); | 307 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON); |
| 312 tray_container()->AddChildView(button_); | 308 tray_container()->AddChildView(button_); |
| 313 SetContentsBackground(); | 309 SetContentsBackground(); |
| 314 tray_container()->SetBorder(views::Border::NullBorder()); | 310 tray_container()->SetBorder(views::Border::NullBorder()); |
| 315 SetVisible(false); | 311 SetVisible(false); |
| 316 message_center_tray_.reset(new message_center::MessageCenterTray( | 312 message_center_tray_.reset(new message_center::MessageCenterTray( |
| 317 this, | 313 this, |
| 318 message_center::MessageCenter::Get())); | 314 message_center::MessageCenter::Get())); |
| 319 popup_collection_.reset(new message_center::MessagePopupCollection( | 315 popup_collection_.reset(new message_center::MessagePopupCollection( |
| 320 ash::Shell::GetContainer( | 316 ash::Shell::GetContainer( |
| 321 status_area_widget->GetNativeView()->GetRootWindow(), | 317 status_area_widget->GetNativeView()->GetRootWindow(), |
| 322 internal::kShellWindowId_StatusContainer), | 318 kShellWindowId_StatusContainer), |
| 323 message_center(), | 319 message_center(), |
| 324 message_center_tray_.get(), | 320 message_center_tray_.get(), |
| 325 ash::switches::UseAlternateShelfLayout())); | 321 ash::switches::UseAlternateShelfLayout())); |
| 326 work_area_observer_.reset(new internal::WorkAreaObserver()); | 322 work_area_observer_.reset(new WorkAreaObserver()); |
| 327 work_area_observer_->StartObserving( | 323 work_area_observer_->StartObserving( |
| 328 popup_collection_.get(), | 324 popup_collection_.get(), |
| 329 status_area_widget->GetNativeView()->GetRootWindow()); | 325 status_area_widget->GetNativeView()->GetRootWindow()); |
| 330 OnMessageCenterTrayChanged(); | 326 OnMessageCenterTrayChanged(); |
| 331 } | 327 } |
| 332 | 328 |
| 333 WebNotificationTray::~WebNotificationTray() { | 329 WebNotificationTray::~WebNotificationTray() { |
| 334 // Release any child views that might have back pointers before ~View(). | 330 // Release any child views that might have back pointers before ~View(). |
| 335 message_center_bubble_.reset(); | 331 message_center_bubble_.reset(); |
| 336 popup_collection_.reset(); | 332 popup_collection_.reset(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 } | 369 } |
| 374 default: | 370 default: |
| 375 NOTREACHED(); | 371 NOTREACHED(); |
| 376 } | 372 } |
| 377 | 373 |
| 378 message_center_bubble->SetMaxHeight(std::max(0, | 374 message_center_bubble->SetMaxHeight(std::max(0, |
| 379 max_height - GetTraySpacing())); | 375 max_height - GetTraySpacing())); |
| 380 if (show_settings) | 376 if (show_settings) |
| 381 message_center_bubble->SetSettingsVisible(); | 377 message_center_bubble->SetSettingsVisible(); |
| 382 message_center_bubble_.reset( | 378 message_center_bubble_.reset( |
| 383 new internal::WebNotificationBubbleWrapper(this, message_center_bubble)); | 379 new WebNotificationBubbleWrapper(this, message_center_bubble)); |
| 384 | 380 |
| 385 status_area_widget()->SetHideSystemNotifications(true); | 381 status_area_widget()->SetHideSystemNotifications(true); |
| 386 GetShelfLayoutManager()->UpdateAutoHideState(); | 382 GetShelfLayoutManager()->UpdateAutoHideState(); |
| 387 button_->SetBubbleVisible(true); | 383 button_->SetBubbleVisible(true); |
| 388 SetDrawBackgroundAsActive(true); | 384 SetDrawBackgroundAsActive(true); |
| 389 return true; | 385 return true; |
| 390 } | 386 } |
| 391 | 387 |
| 392 bool WebNotificationTray::ShowMessageCenter() { | 388 bool WebNotificationTray::ShowMessageCenter() { |
| 393 return ShowMessageCenterInternal(false /* show_settings */); | 389 return ShowMessageCenterInternal(false /* show_settings */); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 } | 445 } |
| 450 | 446 |
| 451 void WebNotificationTray::UpdateAfterLoginStatusChange( | 447 void WebNotificationTray::UpdateAfterLoginStatusChange( |
| 452 user::LoginStatus login_status) { | 448 user::LoginStatus login_status) { |
| 453 OnMessageCenterTrayChanged(); | 449 OnMessageCenterTrayChanged(); |
| 454 } | 450 } |
| 455 | 451 |
| 456 void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) { | 452 void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) { |
| 457 if (alignment == shelf_alignment()) | 453 if (alignment == shelf_alignment()) |
| 458 return; | 454 return; |
| 459 internal::TrayBackgroundView::SetShelfAlignment(alignment); | 455 TrayBackgroundView::SetShelfAlignment(alignment); |
| 460 tray_container()->SetBorder(views::Border::NullBorder()); | 456 tray_container()->SetBorder(views::Border::NullBorder()); |
| 461 // Destroy any existing bubble so that it will be rebuilt correctly. | 457 // Destroy any existing bubble so that it will be rebuilt correctly. |
| 462 message_center_tray_->HideMessageCenterBubble(); | 458 message_center_tray_->HideMessageCenterBubble(); |
| 463 message_center_tray_->HidePopupBubble(); | 459 message_center_tray_->HidePopupBubble(); |
| 464 } | 460 } |
| 465 | 461 |
| 466 void WebNotificationTray::AnchorUpdated() { | 462 void WebNotificationTray::AnchorUpdated() { |
| 467 if (message_center_bubble()) { | 463 if (message_center_bubble()) { |
| 468 message_center_bubble()->bubble_view()->UpdateBubble(); | 464 message_center_bubble()->bubble_view()->UpdateBubble(); |
| 469 UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); | 465 UpdateBubbleViewArrow(message_center_bubble()->bubble_view()); |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 | 616 |
| 621 message_center::MessageCenterBubble* | 617 message_center::MessageCenterBubble* |
| 622 WebNotificationTray::GetMessageCenterBubbleForTest() { | 618 WebNotificationTray::GetMessageCenterBubbleForTest() { |
| 623 if (!message_center_bubble()) | 619 if (!message_center_bubble()) |
| 624 return NULL; | 620 return NULL; |
| 625 return static_cast<message_center::MessageCenterBubble*>( | 621 return static_cast<message_center::MessageCenterBubble*>( |
| 626 message_center_bubble()->bubble()); | 622 message_center_bubble()->bubble()); |
| 627 } | 623 } |
| 628 | 624 |
| 629 } // namespace ash | 625 } // namespace ash |
| OLD | NEW |