#ifndef ASH_APP_MENU_NOTIFICATION_MENU_CONTROLLER_H_
#define ASH_APP_MENU_NOTIFICATION_MENU_CONTROLLER_H_
#include "ash/app_menu/app_menu_export.h"
#include "ash/app_menu/notification_menu_view.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"
#include "ui/views/animation/slide_out_controller_delegate.h"
namespace views {
class MenuItemView;
}
namespace ash {
class AppMenuModelAdapter;
class APP_MENU_EXPORT NotificationMenuController
: public message_center::MessageCenterObserver,
public views::SlideOutControllerDelegate,
public NotificationMenuView::Delegate {
public:
NotificationMenuController(const std::string& app_id,
views::MenuItemView* root_menu,
AppMenuModelAdapter* app_menu_model_adapter);
NotificationMenuController(const NotificationMenuController&) = delete;
NotificationMenuController& operator=(const NotificationMenuController&) =
delete;
~NotificationMenuController() override;
void OnNotificationAdded(const std::string& notification_id) override;
void OnNotificationUpdated(const std::string& notification_id) override;
void OnNotificationRemoved(const std::string& notification_id,
bool by_user) override;
ui::Layer* GetSlideOutLayer() override;
void OnSlideChanged(bool in_progress) override;
void OnSlideOut() override;
void OnOverflowAddedOrRemoved() override;
void ActivateNotificationAndClose(
const std::string& notification_id) override;
private:
void InitializeNotificationMenuView();
const std::string app_id_;
const raw_ptr<views::MenuItemView, DanglingUntriaged> root_menu_;
const raw_ptr<AppMenuModelAdapter, DanglingUntriaged> app_menu_model_adapter_;
raw_ptr<NotificationMenuView, DanglingUntriaged> notification_menu_view_ = nullptr;
base::ScopedObservation<message_center::MessageCenter,
message_center::MessageCenterObserver>
message_center_observation_{this};
};
}
#endif