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 15namespace ui { 16class MenuModel; 17} 18 19namespace message_center { 20 21class MessageCenter; 22class MessageBubbleBase; 23class MessagePopupBubble; 24class QuietModeBubble; 25 26// Implementation found with each supported platform's implementation of 27// MessageCenterTrayDelegate. 28MessageCenterTrayDelegate* 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. 33class 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: 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