Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: athena/activity/activity_manager_impl.cc

Issue 707603002: athena: Use ActivityList where appropriate, and fix AppActivity tests. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « athena/activity/activity_manager_impl.h ('k') | athena/activity/public/DEPS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « athena/activity/activity_manager_impl.h ('k') | athena/activity/public/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698