James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 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 | |
| 68 | bool message_center_visible() { return message_center_visible_; } |
| 69 | bool popups_visible() { return popups_visible_; } |
| 70 | MessageCenterTrayDelegate* delegate() { return delegate_; } |
| 71 | const message_center::MessageCenter* message_center() const { |
| 72 | return message_center_; |
| 73 | } |
| 74 | message_center::MessageCenter* message_center() { return message_center_; } |
| 75 | |
| 76 | // Overridden from MessageCenterObserver: |
James Robinson | e2ac7e8 | 2014-10-15 13:21:59 -0700 | [diff] [blame^] | 77 | virtual void OnNotificationAdded(const std::string& notification_id) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 78 | virtual void OnNotificationRemoved(const std::string& notification_id, |
James Robinson | e2ac7e8 | 2014-10-15 13:21:59 -0700 | [diff] [blame^] | 79 | bool by_user) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 80 | virtual void OnNotificationUpdated( |
James Robinson | e2ac7e8 | 2014-10-15 13:21:59 -0700 | [diff] [blame^] | 81 | const std::string& notification_id) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 82 | virtual void OnNotificationClicked( |
James Robinson | e2ac7e8 | 2014-10-15 13:21:59 -0700 | [diff] [blame^] | 83 | const std::string& notification_id) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 84 | virtual void OnNotificationButtonClicked( |
| 85 | const std::string& notification_id, |
James Robinson | e2ac7e8 | 2014-10-15 13:21:59 -0700 | [diff] [blame^] | 86 | int button_index) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 87 | virtual void OnNotificationDisplayed( |
| 88 | const std::string& notification_id, |
James Robinson | e2ac7e8 | 2014-10-15 13:21:59 -0700 | [diff] [blame^] | 89 | const DisplaySource source) override; |
| 90 | virtual void OnQuietModeChanged(bool in_quiet_mode) override; |
| 91 | virtual void OnBlockingStateChanged(NotificationBlocker* blocker) override; |
James Robinson | 646469d | 2014-10-03 15:33:28 -0700 | [diff] [blame] | 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_ |