#ifndef UI_MESSAGE_CENTER_PUBLIC_CPP_NOTIFICATION_DELEGATE_H_
#define UI_MESSAGE_CENTER_PUBLIC_CPP_NOTIFICATION_DELEGATE_H_
#include <memory>
#include <optional>
#include <string>
#include "base/functional/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "ui/message_center/public/cpp/message_center_public_export.h"
namespace message_center {
class MESSAGE_CENTER_PUBLIC_EXPORT NotificationObserver {
public:
virtual void Close(bool by_user) {}
virtual void Click(const std::optional<int>& button_index,
const std::optional<std::u16string>& reply) {}
virtual void SettingsClick() {}
virtual void DisableNotification() {}
virtual void ExpandStateChanged(bool expanded) {}
virtual void SnoozeButtonClicked() {}
};
class MESSAGE_CENTER_PUBLIC_EXPORT NotificationDelegate
: public NotificationObserver,
public base::RefCountedThreadSafe<NotificationDelegate> {
public:
virtual NotificationDelegate* GetDelegateForParentCopy();
protected:
virtual ~NotificationDelegate() = default;
private:
friend class base::RefCountedThreadSafe<NotificationDelegate>;
};
class MESSAGE_CENTER_PUBLIC_EXPORT ThunkNotificationDelegate
: public NotificationDelegate {
public:
explicit ThunkNotificationDelegate(base::WeakPtr<NotificationObserver> impl);
ThunkNotificationDelegate(const ThunkNotificationDelegate&) = delete;
ThunkNotificationDelegate& operator=(const ThunkNotificationDelegate&) =
delete;
void Close(bool by_user) override;
void Click(const std::optional<int>& button_index,
const std::optional<std::u16string>& reply) override;
void SettingsClick() override;
void DisableNotification() override;
void ExpandStateChanged(bool expanded) override;
void SnoozeButtonClicked() override;
NotificationDelegate* GetDelegateForParentCopy() override;
protected:
~ThunkNotificationDelegate() override;
private:
base::WeakPtr<NotificationObserver> impl_;
};
class MESSAGE_CENTER_PUBLIC_EXPORT HandleNotificationClickDelegate
: public NotificationDelegate {
public:
using ButtonClickCallback = base::RepeatingCallback<void(std::optional<int>)>;
explicit HandleNotificationClickDelegate(const ButtonClickCallback& callback);
explicit HandleNotificationClickDelegate(
const base::RepeatingClosure& closure);
HandleNotificationClickDelegate(const HandleNotificationClickDelegate&) =
delete;
HandleNotificationClickDelegate& operator=(
const HandleNotificationClickDelegate&) = delete;
void SetCallback(const ButtonClickCallback& callback);
void SetCallback(const base::RepeatingClosure& closure);
void Click(const std::optional<int>& button_index,
const std::optional<std::u16string>& reply) override;
protected:
~HandleNotificationClickDelegate() override;
private:
ButtonClickCallback callback_;
};
}
#endif