Index: athena/activity/activity_manager_impl.cc |
diff --git a/athena/activity/activity_manager_impl.cc b/athena/activity/activity_manager_impl.cc |
index 32db67203413b582d056457eff74274cddd5922b..825ca90edabb8906977c87a4d4f00cacb80e7e14 100644 |
--- a/athena/activity/activity_manager_impl.cc |
+++ b/athena/activity/activity_manager_impl.cc |
@@ -8,11 +8,15 @@ |
#include <vector> |
#include "athena/activity/public/activity.h" |
+#include "athena/activity/public/activity_manager_observer.h" |
#include "athena/activity/public/activity_view_manager.h" |
#include "base/logging.h" |
+#include "base/observer_list.h" |
namespace athena { |
+class ActivityManagerObserver; |
+ |
namespace { |
ActivityManager* instance = NULL; |
@@ -39,12 +43,18 @@ class ActivityManagerImpl : public ActivityManager { |
activities_.push_back(activity); |
ActivityViewManager* manager = ActivityViewManager::Get(); |
manager->AddActivity(activity); |
+ FOR_EACH_OBSERVER(ActivityManagerObserver, |
+ observers_, |
+ OnActivityStarted(activity)); |
} |
virtual void RemoveActivity(Activity* activity) OVERRIDE { |
std::vector<Activity*>::iterator find = std::find(activities_.begin(), |
activities_.end(), |
activity); |
+ FOR_EACH_OBSERVER(ActivityManagerObserver, |
+ observers_, |
+ OnActivityEnding(activity)); |
if (find != activities_.end()) { |
activities_.erase(find); |
@@ -58,8 +68,17 @@ class ActivityManagerImpl : public ActivityManager { |
manager->UpdateActivity(activity); |
} |
+ virtual void AddObserver(ActivityManagerObserver* observer) OVERRIDE { |
+ observers_.AddObserver(observer); |
+ } |
+ |
+ virtual void RemoveObserver(ActivityManagerObserver* observer) OVERRIDE { |
+ observers_.RemoveObserver(observer); |
+ } |
+ |
private: |
std::vector<Activity*> activities_; |
+ ObserverList<ActivityManagerObserver> observers_; |
DISALLOW_COPY_AND_ASSIGN(ActivityManagerImpl); |
}; |