1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_MESSAGE_CENTER_MESSAGE_CENTER_TRAY_H_ 6 #define UI_MESSAGE_CENTER_MESSAGE_CENTER_TRAY_H_ 7 8 #include "base/observer_list.h" 9 #include "base/strings/string16.h" 10 #include "ui/message_center/message_center_export.h" 11 #include "ui/message_center/message_center_observer.h" 12 #include "ui/message_center/message_center_tray_delegate.h" 13 #include "ui/message_center/notifier_settings.h" 14 15 namespace ui { 16 class MenuModel; 17 } 18 19 namespace message_center { 20 21 class MessageCenter; 22 class MessageBubbleBase; 23 class MessagePopupBubble; 24 class QuietModeBubble; 25 26 // Implementation found with each supported platform's implementation of 27 // MessageCenterTrayDelegate. 28 MessageCenterTrayDelegate* CreateMessageCenterTray(); 29 30 // Class that observes a MessageCenter. Manages the popup and message center 31 // bubbles. Tells the MessageCenterTrayHost when the tray is changed, as well 32 // as when bubbles are shown and hidden. 33 class MESSAGE_CENTER_EXPORT MessageCenterTray : public MessageCenterObserver { 34 public: 35 MessageCenterTray(MessageCenterTrayDelegate* delegate, 36 message_center::MessageCenter* message_center); 37 virtual ~MessageCenterTray(); 38 39 // Shows or updates the message center bubble and hides the popup bubble. 40 // Returns whether the message center is visible after the call, whether or 41 // not it was visible before. 42 bool ShowMessageCenterBubble(); 43 44 // Hides the message center if visible and returns whether the message center 45 // was visible before. 46 bool HideMessageCenterBubble(); 47 48 // Marks the message center as "not visible" (this method will not hide the 49 // message center). 50 void MarkMessageCenterHidden(); 51 52 void ToggleMessageCenterBubble(); 53 54 // Causes an update if the popup bubble is already shown. 55 void ShowPopupBubble(); 56 57 // Returns whether the popup was visible before. 58 bool HidePopupBubble(); 59 60 // Toggles the visibility of the settings view in the message center bubble. 61 void ShowNotifierSettingsBubble(); 62 63 // Creates a model for the context menu for a notification card. 64 scoped_ptr<ui::MenuModel> CreateNotificationMenuModel( 65 const NotifierId& notifier_id, 66 const base::string16& display_source); 67 message_center_visible()68 bool message_center_visible() { return message_center_visible_; } popups_visible()69 bool popups_visible() { return popups_visible_; } delegate()70 MessageCenterTrayDelegate* delegate() { return delegate_; } message_center()71 const message_center::MessageCenter* message_center() const { 72 return message_center_; 73 } message_center()74 message_center::MessageCenter* message_center() { return message_center_; } 75 76 // Overridden from MessageCenterObserver: 77 virtual void OnNotificationAdded(const std::string& notification_id) OVERRIDE; 78 virtual void OnNotificationRemoved(const std::string& notification_id, 79 bool by_user) OVERRIDE; 80 virtual void OnNotificationUpdated( 81 const std::string& notification_id) OVERRIDE; 82 virtual void OnNotificationClicked( 83 const std::string& notification_id) OVERRIDE; 84 virtual void OnNotificationButtonClicked( 85 const std::string& notification_id, 86 int button_index) OVERRIDE; 87 virtual void OnNotificationDisplayed( 88 const std::string& notification_id, 89 const DisplaySource source) OVERRIDE; 90 virtual void OnQuietModeChanged(bool in_quiet_mode) OVERRIDE; 91 virtual void OnBlockingStateChanged(NotificationBlocker* blocker) OVERRIDE; 92 93 private: 94 void OnMessageCenterChanged(); 95 void NotifyMessageCenterTrayChanged(); 96 void HidePopupBubbleInternal(); 97 98 // |message_center_| is a weak pointer that must live longer than 99 // MessageCenterTray. 100 message_center::MessageCenter* message_center_; 101 bool message_center_visible_; 102 bool popups_visible_; 103 // |delegate_| is a weak pointer that must live longer than MessageCenterTray. 104 MessageCenterTrayDelegate* delegate_; 105 106 DISALLOW_COPY_AND_ASSIGN(MessageCenterTray); 107 }; 108 109 } // namespace message_center 110 111 #endif // UI_MESSAGE_CENTER_MESSAGE_CENTER_TRAY_H_ 112