| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "athena/activity/activity_manager_impl.h" | 5 #include "athena/activity/activity_manager_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "athena/activity/activity_widget_delegate.h" | 9 #include "athena/activity/activity_widget_delegate.h" |
| 10 #include "athena/activity/public/activity.h" | 10 #include "athena/activity/public/activity.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 Activity::Delete(activities_.front()); | 62 Activity::Delete(activities_.front()); |
| 63 | 63 |
| 64 CHECK_EQ(this, instance); | 64 CHECK_EQ(this, instance); |
| 65 instance = nullptr; | 65 instance = nullptr; |
| 66 } | 66 } |
| 67 | 67 |
| 68 void ActivityManagerImpl::AddActivity(Activity* activity) { | 68 void ActivityManagerImpl::AddActivity(Activity* activity) { |
| 69 CHECK(activities_.end() == | 69 CHECK(activities_.end() == |
| 70 std::find(activities_.begin(), activities_.end(), activity)); | 70 std::find(activities_.begin(), activities_.end(), activity)); |
| 71 activities_.insert(activities_.begin(), activity); | 71 activities_.insert(activities_.begin(), activity); |
| 72 views::Widget* widget = CreateWidget(activity); | 72 InitializeActivity(activity); |
| 73 widget->GetNativeView()->AddObserver(this); | |
| 74 activity->GetActivityViewModel()->Init(); | |
| 75 | |
| 76 FOR_EACH_OBSERVER(ActivityManagerObserver, | |
| 77 observers_, | |
| 78 OnActivityStarted(activity)); | |
| 79 } | 73 } |
| 80 | 74 |
| 81 void ActivityManagerImpl::RemoveActivity(Activity* activity) { | 75 void ActivityManagerImpl::RemoveActivity(Activity* activity) { |
| 82 std::vector<Activity*>::iterator find = | 76 std::vector<Activity*>::iterator find = |
| 83 std::find(activities_.begin(), activities_.end(), activity); | 77 std::find(activities_.begin(), activities_.end(), activity); |
| 84 DCHECK(find != activities_.end()); | 78 if (find == activities_.end()) |
| 85 if (find != activities_.end()) { | 79 return; |
| 86 FOR_EACH_OBSERVER( | 80 activities_.erase(find); |
| 87 ActivityManagerObserver, observers_, OnActivityEnding(activity)); | 81 UninitializeActivity(activity); |
| 88 activities_.erase(find); | 82 } |
| 89 views::Widget* widget = GetWidget(activity); | 83 |
| 90 widget->GetNativeView()->RemoveObserver(this); | 84 ScopedActivity ActivityManagerImpl::ReplaceActivity(Activity* to_replace, |
| 91 widget->Close(); | 85 Activity* replace_with) { |
| 92 } | 86 std::vector<Activity*>::iterator find = |
| 87 std::find(activities_.begin(), activities_.end(), to_replace); |
| 88 if (find == activities_.end()) |
| 89 return ScopedActivity(); |
| 90 std::replace(find, find + 1, to_replace, replace_with); |
| 91 |
| 92 UninitializeActivity(to_replace); |
| 93 InitializeActivity(replace_with); |
| 94 return ScopedActivity(to_replace); |
| 93 } | 95 } |
| 94 | 96 |
| 95 const ActivityList& ActivityManagerImpl::GetActivityList() { | 97 const ActivityList& ActivityManagerImpl::GetActivityList() { |
| 96 return activities_; | 98 return activities_; |
| 97 } | 99 } |
| 98 | 100 |
| 99 Activity* ActivityManagerImpl::GetActivityForWindow(aura::Window* window) { | 101 Activity* ActivityManagerImpl::GetActivityForWindow(aura::Window* window) { |
| 100 struct Matcher { | 102 struct Matcher { |
| 101 Matcher(aura::Window* w) : window(w) {} | 103 Matcher(aura::Window* w) : window(w) {} |
| 102 bool operator()(Activity* activity) { | 104 bool operator()(Activity* activity) { |
| 103 return activity->GetWindow() == window; | 105 return activity->GetWindow() == window; |
| 104 } | 106 } |
| 105 aura::Window* window; | 107 aura::Window* window; |
| 106 }; | 108 }; |
| 107 std::vector<Activity*>::iterator iter = | 109 std::vector<Activity*>::iterator iter = |
| 108 std::find_if(activities_.begin(), activities_.end(), Matcher(window)); | 110 std::find_if(activities_.begin(), activities_.end(), Matcher(window)); |
| 109 return iter != activities_.end() ? *iter : nullptr; | 111 return iter != activities_.end() ? *iter : nullptr; |
| 110 } | 112 } |
| 111 | 113 |
| 112 void ActivityManagerImpl::AddObserver(ActivityManagerObserver* observer) { | 114 void ActivityManagerImpl::AddObserver(ActivityManagerObserver* observer) { |
| 113 observers_.AddObserver(observer); | 115 observers_.AddObserver(observer); |
| 114 } | 116 } |
| 115 | 117 |
| 116 void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) { | 118 void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) { |
| 117 observers_.RemoveObserver(observer); | 119 observers_.RemoveObserver(observer); |
| 118 } | 120 } |
| 119 | 121 |
| 122 void ActivityManagerImpl::InitializeActivity(Activity* activity) { |
| 123 views::Widget* widget = CreateWidget(activity); |
| 124 widget->GetNativeView()->AddObserver(this); |
| 125 activity->GetActivityViewModel()->Init(); |
| 126 FOR_EACH_OBSERVER(ActivityManagerObserver, |
| 127 observers_, |
| 128 OnActivityStarted(activity)); |
| 129 } |
| 130 |
| 131 void ActivityManagerImpl::UninitializeActivity(Activity* activity) { |
| 132 FOR_EACH_OBSERVER( |
| 133 ActivityManagerObserver, observers_, OnActivityEnding(activity)); |
| 134 views::Widget* widget = GetWidget(activity); |
| 135 widget->GetNativeView()->RemoveObserver(this); |
| 136 widget->Close(); |
| 137 } |
| 138 |
| 120 void ActivityManagerImpl::OnWindowDestroying(aura::Window* window) { | 139 void ActivityManagerImpl::OnWindowDestroying(aura::Window* window) { |
| 121 Activity* activity = GetActivityForWindow(window); | 140 Activity* activity = GetActivityForWindow(window); |
| 122 if (activity) { | 141 if (activity) { |
| 123 window->RemoveObserver(this); | 142 window->RemoveObserver(this); |
| 124 Activity::Delete(activity); | 143 Activity::Delete(activity); |
| 125 } | 144 } |
| 126 } | 145 } |
| 127 | 146 |
| 128 void ActivityManagerImpl::OnWindowActivated(aura::Window* gained_active, | 147 void ActivityManagerImpl::OnWindowActivated(aura::Window* gained_active, |
| 129 aura::Window* lost_active) { | 148 aura::Window* lost_active) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 155 return instance; | 174 return instance; |
| 156 } | 175 } |
| 157 | 176 |
| 158 void ActivityManager::Shutdown() { | 177 void ActivityManager::Shutdown() { |
| 159 CHECK(instance); | 178 CHECK(instance); |
| 160 delete instance; | 179 delete instance; |
| 161 } | 180 } |
| 162 | 181 |
| 163 | 182 |
| 164 } // namespace athena | 183 } // namespace athena |
| OLD | NEW |