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_IMPL_H_ 6 #define UI_MESSAGE_CENTER_MESSAGE_CENTER_IMPL_H_ 7 8 #include <stddef.h> 9 10 #include <memory> 11 #include <string> 12 #include <vector> 13 14 #include "base/callback.h" 15 #include "base/macros.h" 16 #include "base/memory/weak_ptr.h" 17 #include "base/threading/thread_checker.h" 18 #include "base/time/time.h" 19 #include "base/timer/timer.h" 20 #include "ui/message_center/message_center.h" 21 #include "ui/message_center/message_center_observer.h" 22 #include "ui/message_center/message_center_stats_collector.h" 23 #include "ui/message_center/message_center_types.h" 24 #include "ui/message_center/notification_blocker.h" 25 #include "ui/message_center/popup_timers_controller.h" 26 #include "ui/message_center/public/cpp/notifier_id.h" 27 28 namespace message_center { 29 30 class LockScreenController; 31 32 // The default implementation of MessageCenter. 33 class MessageCenterImpl : public MessageCenter, 34 public NotificationBlocker::Observer { 35 public: 36 explicit MessageCenterImpl( 37 std::unique_ptr<LockScreenController> lock_screen_controller); 38 ~MessageCenterImpl() override; 39 40 // MessageCenter overrides: 41 void AddObserver(MessageCenterObserver* observer) override; 42 void RemoveObserver(MessageCenterObserver* observer) override; 43 void AddNotificationBlocker(NotificationBlocker* blocker) override; 44 void RemoveNotificationBlocker(NotificationBlocker* blocker) override; 45 void SetVisibility(Visibility visible) override; 46 bool IsMessageCenterVisible() const override; 47 void SetHasMessageCenterView(bool has_message_center_view) override; 48 bool HasMessageCenterView() const override; 49 size_t NotificationCount() const override; 50 bool HasPopupNotifications() const override; 51 bool IsQuietMode() const override; 52 bool IsSpokenFeedbackEnabled() const override; 53 Notification* FindVisibleNotificationById(const std::string& id) override; 54 NotificationList::Notifications FindNotificationsByAppId( 55 const std::string& app_id) override; 56 NotificationList::Notifications GetNotifications() override; 57 const NotificationList::Notifications& GetVisibleNotifications() override; 58 NotificationList::PopupNotifications GetPopupNotifications() override; 59 void AddNotification(std::unique_ptr<Notification> notification) override; 60 void UpdateNotification( 61 const std::string& old_id, 62 std::unique_ptr<Notification> new_notification) override; 63 void RemoveNotification(const std::string& id, bool by_user) override; 64 void RemoveNotificationsForNotifierId(const NotifierId& notifier_id) override; 65 void RemoveAllNotifications(bool by_user, RemoveType type) override; 66 void SetNotificationIcon(const std::string& notification_id, 67 const gfx::Image& image) override; 68 void SetNotificationImage(const std::string& notification_id, 69 const gfx::Image& image) override; 70 void ClickOnNotification(const std::string& id) override; 71 void ClickOnNotificationButton(const std::string& id, 72 int button_index) override; 73 void ClickOnNotificationButtonWithReply(const std::string& id, 74 int button_index, 75 const base::string16& reply) override; 76 void ClickOnSettingsButton(const std::string& id) override; 77 void DisableNotification(const std::string& id) override; 78 void MarkSinglePopupAsShown(const std::string& id, 79 bool mark_notification_as_read) override; 80 void DisplayedNotification(const std::string& id, 81 const DisplaySource source) override; 82 void SetQuietMode(bool in_quiet_mode) override; 83 void SetSpokenFeedbackEnabled(bool enabled) override; 84 void EnterQuietModeWithExpire(const base::TimeDelta& expires_in) override; 85 void RestartPopupTimers() override; 86 void PausePopupTimers() override; 87 const base::string16& GetSystemNotificationAppName() const override; 88 void SetSystemNotificationAppName(const base::string16& name) override; 89 90 // NotificationBlocker::Observer overrides: 91 void OnBlockingStateChanged(NotificationBlocker* blocker) override; 92 lock_screen_controller()93 LockScreenController* lock_screen_controller() { 94 return lock_screen_controller_.get(); 95 } lock_screen_controller()96 const LockScreenController* lock_screen_controller() const { 97 return lock_screen_controller_.get(); 98 } 99 100 protected: 101 void DisableTimersForTest() override; 102 103 private: 104 THREAD_CHECKER(thread_checker_); 105 106 void ClickOnNotificationUnlocked(const std::string& id, 107 const base::Optional<int>& button_index, 108 const base::Optional<base::string16>& reply); 109 110 const std::unique_ptr<LockScreenController> lock_screen_controller_; 111 112 std::unique_ptr<NotificationList> notification_list_; 113 NotificationList::Notifications visible_notifications_; 114 base::ObserverList<MessageCenterObserver> observer_list_; 115 std::unique_ptr<PopupTimersController> popup_timers_controller_; 116 std::unique_ptr<base::OneShotTimer> quiet_mode_timer_; 117 std::vector<NotificationBlocker*> blockers_; 118 119 bool visible_ = false; 120 bool has_message_center_view_ = true; 121 bool spoken_feedback_enabled_ = false; 122 123 base::string16 system_notification_app_name_; 124 125 MessageCenterStatsCollector stats_collector_; 126 127 DISALLOW_COPY_AND_ASSIGN(MessageCenterImpl); 128 }; 129 130 } // namespace message_center 131 132 #endif // UI_MESSAGE_CENTER_MESSAGE_CENTER_H_ 133