#ifndef ASH_SYSTEM_MESSAGE_CENTER_NOTIFICATION_GROUPING_CONTROLLER_H_
#define ASH_SYSTEM_MESSAGE_CENTER_NOTIFICATION_GROUPING_CONTROLLER_H_
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_observer.h"
namespace message_center {
class NotificationViewController;
}
namespace ash {
namespace {
class GroupedNotificationList;
}
class NotificationCenterTray;
class UnifiedSystemTray;
class NotificationGroupingController
: public message_center::MessageCenterObserver {
public:
NotificationGroupingController(UnifiedSystemTray* system_tray,
NotificationCenterTray* notification_tray);
NotificationGroupingController(const NotificationGroupingController& other) =
delete;
NotificationGroupingController& operator=(
const NotificationGroupingController& other) = delete;
~NotificationGroupingController() override;
void OnNotificationAdded(const std::string& notification_id) override;
void OnNotificationDisplayed(
const std::string& notification_id,
const message_center::DisplaySource source) override;
void OnNotificationRemoved(const std::string& notification_id,
bool by_user) override;
void OnNotificationUpdated(const std::string& notification_id) override;
void ConvertFromSingleToGroupNotificationAfterAnimation(
const std::string& notification_id,
std::string& parent_id,
message_center::Notification* parent_notification);
message_center::NotificationViewController*
GetActiveNotificationViewController();
protected:
void PopulateGroupParent(const std::string& notification_id);
const std::string& GetParentIdForChildForTest(
const std::string& notification_id) const;
private:
friend class NotificationGroupingControllerTest;
const std::string& SetupParentNotification(
message_center::Notification* parent_notification,
const std::string& parent_id);
std::unique_ptr<message_center::Notification> CreateCopyForParentNotification(
const message_center::Notification& parent_notification);
void RemoveGroupedChild(const std::string& notification_id);
void AddNotificationToGroup(const std::string& notification_id,
const std::string& parent_id);
void UpdateParentNotificationPinnedState(const std::string& parent_id);
bool adding_parent_grouped_notification_ = false;
const raw_ptr<UnifiedSystemTray, ExperimentalAsh> system_tray_;
const raw_ptr<NotificationCenterTray, DanglingUntriaged | ExperimentalAsh>
notification_tray_;
const raw_ptr<GroupedNotificationList, ExperimentalAsh>
grouped_notification_list_;
base::ScopedObservation<message_center::MessageCenter, MessageCenterObserver>
observer_{this};
};
}
#endif