blob: 404a0cd4b9ba817dfbae0943dbc71f783ada9a40 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_ARC_NOTIFICATION_ARC_CUSTOM_NOTIFICATION_ITEM_H_
#define UI_ARC_NOTIFICATION_ARC_CUSTOM_NOTIFICATION_ITEM_H_
#include "base/macros.h"
#include "base/observer_list.h"
#include "ui/arc/notification/arc_notification_item.h"
#include "ui/gfx/image/image_skia.h"
namespace arc {
class ArcCustomNotificationItem : public ArcNotificationItem {
public:
class Observer {
public:
// Invoked when the notification data for this item has changed.
virtual void OnItemDestroying() = 0;
// Invoked when the notification data for the item is updated.
virtual void OnItemUpdated() = 0;
protected:
virtual ~Observer() = default;
};
ArcCustomNotificationItem(ArcNotificationManager* manager,
message_center::MessageCenter* message_center,
const std::string& notification_key,
const AccountId& profile_id);
~ArcCustomNotificationItem() override;
void UpdateWithArcNotificationData(
mojom::ArcNotificationDataPtr data) override;
void CloseFromCloseButton();
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Increment |window_ref_count_| and a CreateNotificationWindow request
// is sent when |window_ref_count_| goes from zero to one.
void IncrementWindowRefCount();
// Decrement |window_ref_count_| and a CloseNotificationWindow request
// is sent when |window_ref_count_| goes from one to zero.
void DecrementWindowRefCount();
bool pinned() const { return pinned_; }
const gfx::ImageSkia& snapshot() const { return snapshot_; }
private:
bool pinned_ = false;
gfx::ImageSkia snapshot_;
int window_ref_count_ = 0;
base::ObserverList<Observer> observers_;
DISALLOW_COPY_AND_ASSIGN(ArcCustomNotificationItem);
};
} // namespace arc
#endif // UI_ARC_NOTIFICATION_ARC_CUSTOM_NOTIFICATION_ITEM_H_