// 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