| 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) {
|
|
|