Index: athena/activity/activity_manager_impl.cc |
diff --git a/athena/activity/activity_manager_impl.cc b/athena/activity/activity_manager_impl.cc |
index a9981556d7f65dfc60e35944efe99fd01790b9e5..210c83b11301960ef6a992e3b4a5215c9a192ae5 100644 |
--- a/athena/activity/activity_manager_impl.cc |
+++ b/athena/activity/activity_manager_impl.cc |
@@ -69,27 +69,29 @@ void ActivityManagerImpl::AddActivity(Activity* activity) { |
CHECK(activities_.end() == |
std::find(activities_.begin(), activities_.end(), activity)); |
activities_.insert(activities_.begin(), activity); |
- views::Widget* widget = CreateWidget(activity); |
- widget->GetNativeView()->AddObserver(this); |
- activity->GetActivityViewModel()->Init(); |
- |
- FOR_EACH_OBSERVER(ActivityManagerObserver, |
- observers_, |
- OnActivityStarted(activity)); |
+ InitializeActivity(activity); |
} |
void ActivityManagerImpl::RemoveActivity(Activity* activity) { |
std::vector<Activity*>::iterator find = |
std::find(activities_.begin(), activities_.end(), activity); |
- DCHECK(find != activities_.end()); |
- if (find != activities_.end()) { |
- FOR_EACH_OBSERVER( |
- ActivityManagerObserver, observers_, OnActivityEnding(activity)); |
- activities_.erase(find); |
- views::Widget* widget = GetWidget(activity); |
- widget->GetNativeView()->RemoveObserver(this); |
- widget->Close(); |
- } |
+ if (find == activities_.end()) |
+ return; |
+ activities_.erase(find); |
+ UninitializeActivity(activity); |
+} |
+ |
+ScopedActivity ActivityManagerImpl::ReplaceActivity(Activity* to_replace, |
+ Activity* replace_with) { |
+ std::vector<Activity*>::iterator find = |
+ std::find(activities_.begin(), activities_.end(), to_replace); |
+ if (find == activities_.end()) |
+ return ScopedActivity(); |
+ std::replace(find, find + 1, to_replace, replace_with); |
+ |
+ UninitializeActivity(to_replace); |
+ InitializeActivity(replace_with); |
+ return ScopedActivity(to_replace); |
} |
const ActivityList& ActivityManagerImpl::GetActivityList() { |
@@ -117,6 +119,23 @@ void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) { |
observers_.RemoveObserver(observer); |
} |
+void ActivityManagerImpl::InitializeActivity(Activity* activity) { |
+ views::Widget* widget = CreateWidget(activity); |
+ widget->GetNativeView()->AddObserver(this); |
+ activity->GetActivityViewModel()->Init(); |
+ FOR_EACH_OBSERVER(ActivityManagerObserver, |
+ observers_, |
+ OnActivityStarted(activity)); |
+} |
+ |
+void ActivityManagerImpl::UninitializeActivity(Activity* activity) { |
+ FOR_EACH_OBSERVER( |
+ ActivityManagerObserver, observers_, OnActivityEnding(activity)); |
+ views::Widget* widget = GetWidget(activity); |
+ widget->GetNativeView()->RemoveObserver(this); |
+ widget->Close(); |
+} |
+ |
void ActivityManagerImpl::OnWindowDestroying(aura::Window* window) { |
Activity* activity = GetActivityForWindow(window); |
if (activity) { |