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

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

Issue 694353004: athena: Expose the list of activities from the ActivityManager. (Closed) 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/activity_manager_unittest.cc » ('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"
11 #include "athena/activity/public/activity_manager_observer.h" 11 #include "athena/activity/public/activity_manager_observer.h"
12 #include "athena/activity/public/activity_view_model.h" 12 #include "athena/activity/public/activity_view_model.h"
13 #include "athena/screen/public/screen_manager.h"
13 #include "base/logging.h" 14 #include "base/logging.h"
14 #include "base/observer_list.h" 15 #include "base/observer_list.h"
16 #include "ui/aura/window.h"
15 #include "ui/views/widget/widget.h" 17 #include "ui/views/widget/widget.h"
18 #include "ui/wm/public/activation_client.h"
16 19
17 namespace athena { 20 namespace athena {
18 21
19 namespace { 22 namespace {
20 23
21 ActivityManager* instance = nullptr; 24 ActivityManager* instance = nullptr;
22 25
23 views::Widget* CreateWidget(Activity* activity) { 26 views::Widget* CreateWidget(Activity* activity) {
24 aura::Window* window = activity->GetWindow(); 27 aura::Window* window = activity->GetWindow();
25 views::Widget* widget = 28 views::Widget* widget =
(...skipping 13 matching lines...) Expand all
39 CHECK(activity); 42 CHECK(activity);
40 CHECK(activity->GetWindow()); 43 CHECK(activity->GetWindow());
41 return views::Widget::GetWidgetForNativeWindow(activity->GetWindow()); 44 return views::Widget::GetWidgetForNativeWindow(activity->GetWindow());
42 } 45 }
43 46
44 } // namespace 47 } // namespace
45 48
46 ActivityManagerImpl::ActivityManagerImpl() { 49 ActivityManagerImpl::ActivityManagerImpl() {
47 CHECK(!instance); 50 CHECK(!instance);
48 instance = this; 51 instance = this;
52
53 aura::Window* root_window =
54 ScreenManager::Get()->GetContext()->GetRootWindow();
55 aura::client::GetActivationClient(root_window)->AddObserver(this);
49 } 56 }
50 57
51 ActivityManagerImpl::~ActivityManagerImpl() { 58 ActivityManagerImpl::~ActivityManagerImpl() {
59 aura::Window* root_window =
60 ScreenManager::Get()->GetContext()->GetRootWindow();
61 aura::client::GetActivationClient(root_window)->RemoveObserver(this);
52 while (!activities_.empty()) 62 while (!activities_.empty())
53 Activity::Delete(activities_.front()); 63 Activity::Delete(activities_.front());
54 64
55 CHECK_EQ(this, instance); 65 CHECK_EQ(this, instance);
56 instance = nullptr; 66 instance = nullptr;
57 } 67 }
58 68
59 void ActivityManagerImpl::AddActivity(Activity* activity) { 69 void ActivityManagerImpl::AddActivity(Activity* activity) {
60 CHECK(activities_.end() == 70 CHECK(activities_.end() ==
61 std::find(activities_.begin(), activities_.end(), activity)); 71 std::find(activities_.begin(), activities_.end(), activity));
62 activities_.push_back(activity); 72 activities_.insert(activities_.begin(), activity);
63 views::Widget* widget = CreateWidget(activity); 73 views::Widget* widget = CreateWidget(activity);
64 widget->AddObserver(this); 74 widget->GetNativeView()->AddObserver(this);
65 FOR_EACH_OBSERVER(ActivityManagerObserver, 75 FOR_EACH_OBSERVER(ActivityManagerObserver,
66 observers_, 76 observers_,
67 OnActivityStarted(activity)); 77 OnActivityStarted(activity));
68 } 78 }
69 79
70 void ActivityManagerImpl::RemoveActivity(Activity* activity) { 80 void ActivityManagerImpl::RemoveActivity(Activity* activity) {
71 std::vector<Activity*>::iterator find = 81 std::vector<Activity*>::iterator find =
72 std::find(activities_.begin(), activities_.end(), activity); 82 std::find(activities_.begin(), activities_.end(), activity);
73 DCHECK(find != activities_.end()); 83 DCHECK(find != activities_.end());
74 if (find != activities_.end()) { 84 if (find != activities_.end()) {
75 FOR_EACH_OBSERVER( 85 FOR_EACH_OBSERVER(
76 ActivityManagerObserver, observers_, OnActivityEnding(activity)); 86 ActivityManagerObserver, observers_, OnActivityEnding(activity));
77 activities_.erase(find); 87 activities_.erase(find);
78 views::Widget* widget = GetWidget(activity); 88 views::Widget* widget = GetWidget(activity);
79 widget->RemoveObserver(this); 89 widget->GetNativeView()->RemoveObserver(this);
80 widget->Close(); 90 widget->Close();
81 } 91 }
82 } 92 }
83 93
84 void ActivityManagerImpl::UpdateActivity(Activity* activity) { 94 void ActivityManagerImpl::UpdateActivity(Activity* activity) {
85 views::Widget* widget = GetWidget(activity); 95 views::Widget* widget = GetWidget(activity);
86 widget->UpdateWindowIcon(); 96 widget->UpdateWindowIcon();
87 widget->UpdateWindowTitle(); 97 widget->UpdateWindowTitle();
88 } 98 }
89 99
100 const ActivityList& ActivityManagerImpl::GetActivityList() {
101 return activities_;
102 }
103
90 Activity* ActivityManagerImpl::GetActivityForWindow(aura::Window* window) { 104 Activity* ActivityManagerImpl::GetActivityForWindow(aura::Window* window) {
91 struct Matcher { 105 struct Matcher {
92 Matcher(aura::Window* w) : window(w) {} 106 Matcher(aura::Window* w) : window(w) {}
93 bool operator()(Activity* activity) { 107 bool operator()(Activity* activity) {
94 return activity->GetWindow() == window; 108 return activity->GetWindow() == window;
95 } 109 }
96 aura::Window* window; 110 aura::Window* window;
97 }; 111 };
98 std::vector<Activity*>::iterator iter = 112 std::vector<Activity*>::iterator iter =
99 std::find_if(activities_.begin(), activities_.end(), Matcher(window)); 113 std::find_if(activities_.begin(), activities_.end(), Matcher(window));
100 return iter != activities_.end() ? *iter : nullptr; 114 return iter != activities_.end() ? *iter : nullptr;
101 } 115 }
102 116
103 void ActivityManagerImpl::AddObserver(ActivityManagerObserver* observer) { 117 void ActivityManagerImpl::AddObserver(ActivityManagerObserver* observer) {
104 observers_.AddObserver(observer); 118 observers_.AddObserver(observer);
105 } 119 }
106 120
107 void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) { 121 void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) {
108 observers_.RemoveObserver(observer); 122 observers_.RemoveObserver(observer);
109 } 123 }
110 124
111 void ActivityManagerImpl::OnWidgetDestroying(views::Widget* widget) { 125 void ActivityManagerImpl::OnWindowDestroying(aura::Window* window) {
112 Activity* activity = GetActivityForWindow(widget->GetNativeWindow()); 126 Activity* activity = GetActivityForWindow(window);
113 if (activity) { 127 if (activity) {
114 widget->RemoveObserver(this); 128 window->RemoveObserver(this);
115 Activity::Delete(activity); 129 Activity::Delete(activity);
116 } 130 }
117 } 131 }
118 132
133 void ActivityManagerImpl::OnWindowActivated(aura::Window* gained_active,
134 aura::Window* lost_active) {
135 Activity* activity = GetActivityForWindow(gained_active);
136 if (!activity)
137 return;
138 CHECK(!activities_.empty());
139 if (activity == activities_.front())
140 return;
141 // Move the activity for |gained_active| at the front of the list.
142 ActivityList::reverse_iterator iter = std::find(activities_.rbegin(),
143 activities_.rend(),
144 activity);
145 CHECK(iter != activities_.rend());
146 std::rotate(iter, iter + 1, activities_.rend());
147 FOR_EACH_OBSERVER(ActivityManagerObserver,
148 observers_,
149 OnActivityOrderChanged());
150 }
151
119 // static 152 // static
120 ActivityManager* ActivityManager::Create() { 153 ActivityManager* ActivityManager::Create() {
121 new ActivityManagerImpl(); 154 new ActivityManagerImpl();
122 CHECK(instance); 155 CHECK(instance);
123 return instance; 156 return instance;
124 } 157 }
125 158
126 ActivityManager* ActivityManager::Get() { 159 ActivityManager* ActivityManager::Get() {
127 return instance; 160 return instance;
128 } 161 }
129 162
130 void ActivityManager::Shutdown() { 163 void ActivityManager::Shutdown() {
131 CHECK(instance); 164 CHECK(instance);
132 delete instance; 165 delete instance;
133 } 166 }
134 167
135 168
136 } // namespace athena 169 } // namespace athena
OLDNEW
« no previous file with comments | « athena/activity/activity_manager_impl.h ('k') | athena/activity/activity_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698