| // Copyright 2014 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 "athena/activity/public/activity_manager.h" |
| |
| #include <algorithm> |
| #include <vector> |
| |
| #include "athena/activity/public/activity.h" |
| #include "athena/activity/public/activity_view_manager.h" |
| #include "base/logging.h" |
| |
| namespace athena { |
| |
| namespace { |
| |
| ActivityManager* instance = NULL; |
| |
| class ActivityManagerImpl : public ActivityManager { |
| public: |
| ActivityManagerImpl() { |
| CHECK(!instance); |
| instance = this; |
| } |
| virtual ~ActivityManagerImpl() { |
| while (!activities_.empty()) |
| delete activities_.front(); |
| |
| CHECK_EQ(this, instance); |
| instance = NULL; |
| } |
| |
| // ActivityManager: |
| virtual void AddActivity(Activity* activity) OVERRIDE { |
| CHECK(activities_.end() == std::find(activities_.begin(), |
| activities_.end(), |
| activity)); |
| activities_.push_back(activity); |
| ActivityViewManager* manager = ActivityViewManager::Get(); |
| manager->AddActivity(activity); |
| } |
| |
| virtual void RemoveActivity(Activity* activity) OVERRIDE { |
| std::vector<Activity*>::iterator find = std::find(activities_.begin(), |
| activities_.end(), |
| activity); |
| if (find != activities_.end()) { |
| activities_.erase(find); |
| |
| ActivityViewManager* manager = ActivityViewManager::Get(); |
| manager->RemoveActivity(activity); |
| } |
| } |
| |
| virtual void UpdateActivity(Activity* activity) OVERRIDE { |
| ActivityViewManager* manager = ActivityViewManager::Get(); |
| manager->UpdateActivity(activity); |
| } |
| |
| private: |
| std::vector<Activity*> activities_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ActivityManagerImpl); |
| }; |
| |
| } // namespace |
| |
| // static |
| ActivityManager* ActivityManager::Create() { |
| ActivityViewManager::Create(); |
| |
| new ActivityManagerImpl(); |
| CHECK(instance); |
| return instance; |
| } |
| |
| ActivityManager* ActivityManager::Get() { |
| return instance; |
| } |
| |
| void ActivityManager::Shutdown() { |
| CHECK(instance); |
| delete instance; |
| ActivityViewManager::Shutdown(); |
| } |
| |
| } // namespace athena |