#ifndef ASH_SYSTEM_MEDIA_MEDIA_NOTIFICATION_PROVIDER_H_
#define ASH_SYSTEM_MEDIA_MEDIA_NOTIFICATION_PROVIDER_H_
#include <memory>
#include <string>
#include "ash/ash_export.h"
#include "base/memory/weak_ptr.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/views/view.h"
namespace global_media_controls {
class MediaItemManager;
class MediaItemUIDeviceSelector;
class MediaItemUIFooter;
enum class GlobalMediaControlsEntryPoint;
}
namespace media_message_center {
class MediaNotificationItem;
struct NotificationTheme;
}
namespace ash {
class MediaNotificationProviderObserver;
class ASH_EXPORT MediaNotificationProvider {
public:
virtual ~MediaNotificationProvider() = default;
static MediaNotificationProvider* Get();
static void Set(MediaNotificationProvider* provider);
virtual void AddObserver(MediaNotificationProviderObserver* observer) = 0;
virtual void RemoveObserver(MediaNotificationProviderObserver* observer) = 0;
virtual bool HasActiveNotifications() = 0;
virtual bool HasFrozenNotifications() = 0;
virtual std::unique_ptr<views::View> GetMediaNotificationListView(
int separator_thickness,
bool should_clip_height,
global_media_controls::GlobalMediaControlsEntryPoint entry_point,
const std::string& show_devices_for_item_id = "") = 0;
virtual void OnBubbleClosing() = 0;
virtual void SetColorTheme(
const media_message_center::NotificationTheme& color_theme) = 0;
virtual global_media_controls::MediaItemManager* GetMediaItemManager() = 0;
virtual void OnPrimaryUserSessionStarted() {}
virtual void AddMediaItemManagerToCastService(
global_media_controls::MediaItemManager* media_item_manager) {}
virtual void RemoveMediaItemManagerFromCastService(
global_media_controls::MediaItemManager* media_item_manager) {}
virtual std::unique_ptr<global_media_controls::MediaItemUIDeviceSelector>
BuildDeviceSelectorView(
const std::string& id,
base::WeakPtr<media_message_center::MediaNotificationItem> item,
global_media_controls::GlobalMediaControlsEntryPoint entry_point,
bool show_devices = false) = 0;
virtual std::unique_ptr<global_media_controls::MediaItemUIFooter>
BuildFooterView(
const std::string& id,
base::WeakPtr<media_message_center::MediaNotificationItem> item) = 0;
};
}
#endif