123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- // Copyright 2020 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.
- #include "ash/components/phonehub/notification_manager.h"
- #include <sstream>
- #include "ash/components/multidevice/logging/logging.h"
- namespace ash {
- namespace phonehub {
- namespace {
- std::string GetIdStream(const base::flat_set<int64_t>& notification_ids) {
- std::ostringstream output(std::ostringstream::ate);
- for (const auto& id : notification_ids) {
- output << id << " ";
- }
- return output.str();
- }
- } // namespace
- NotificationManager::NotificationManager() = default;
- NotificationManager::~NotificationManager() = default;
- void NotificationManager::AddObserver(Observer* observer) {
- observer_list_.AddObserver(observer);
- }
- void NotificationManager::RemoveObserver(Observer* observer) {
- observer_list_.RemoveObserver(observer);
- }
- void NotificationManager::NotifyNotificationsAdded(
- const base::flat_set<int64_t>& notification_ids) {
- PA_LOG(INFO) << "Added the following notification ids: "
- << GetIdStream(notification_ids);
- for (auto& observer : observer_list_)
- observer.OnNotificationsAdded(notification_ids);
- }
- void NotificationManager::NotifyNotificationsUpdated(
- const base::flat_set<int64_t>& notification_ids) {
- PA_LOG(INFO) << "Updated the following notification id: "
- << GetIdStream(notification_ids);
- for (auto& observer : observer_list_)
- observer.OnNotificationsUpdated(notification_ids);
- }
- void NotificationManager::NotifyNotificationsRemoved(
- const base::flat_set<int64_t>& notification_ids) {
- PA_LOG(INFO) << "Removed the following notification id: "
- << GetIdStream(notification_ids);
- for (auto& observer : observer_list_)
- observer.OnNotificationsRemoved(notification_ids);
- }
- void NotificationManager::SetNotificationsInternal(
- const base::flat_set<Notification>& notifications) {
- base::flat_set<int64_t> added_ids;
- base::flat_set<int64_t> updated_ids;
- for (const Notification& notification : notifications) {
- int64_t id = notification.id();
- auto it = id_to_notification_map_.find(id);
- if (it == id_to_notification_map_.end()) {
- id_to_notification_map_.emplace(id, notification);
- added_ids.emplace(id);
- continue;
- }
- it->second = notification;
- updated_ids.emplace(id);
- }
- if (!added_ids.empty())
- NotifyNotificationsAdded(added_ids);
- if (!updated_ids.empty())
- NotifyNotificationsUpdated(updated_ids);
- }
- void NotificationManager::RemoveNotificationsInternal(
- const base::flat_set<int64_t>& notification_ids) {
- if (notification_ids.empty())
- return;
- for (int64_t id : notification_ids) {
- auto it = id_to_notification_map_.find(id);
- if (it == id_to_notification_map_.end())
- continue;
- id_to_notification_map_.erase(it);
- }
- NotifyNotificationsRemoved(notification_ids);
- }
- void NotificationManager::ClearNotificationsInternal() {
- base::flat_set<int64_t> removed_ids;
- for (const auto& pair : id_to_notification_map_) {
- removed_ids.emplace(pair.first);
- }
- if (!removed_ids.empty()) {
- id_to_notification_map_.clear();
- NotifyNotificationsRemoved(removed_ids);
- }
- }
- const Notification* NotificationManager::GetNotification(
- int64_t notification_id) const {
- auto it = id_to_notification_map_.find(notification_id);
- if (it == id_to_notification_map_.end())
- return nullptr;
- return &it->second;
- }
- } // namespace phonehub
- } // namespace ash
|