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 |