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

Side by Side Diff: athena/home/home_card_impl.cc

Issue 408623003: Minimize HomeCard if the user opens something in the home card. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 5 months 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 | Annotate | Revision Log
« no previous file with comments | « athena/home/DEPS ('k') | athena/home/home_card_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/home/public/home_card.h" 5 #include "athena/home/public/home_card.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "athena/home/app_list_view_delegate.h" 9 #include "athena/home/app_list_view_delegate.h"
10 #include "athena/home/bottom_home_view.h" 10 #include "athena/home/bottom_home_view.h"
11 #include "athena/home/minimized_home.h" 11 #include "athena/home/minimized_home.h"
12 #include "athena/home/public/app_model_builder.h" 12 #include "athena/home/public/app_model_builder.h"
13 #include "athena/input/public/accelerator_manager.h" 13 #include "athena/input/public/accelerator_manager.h"
14 #include "athena/screen/public/screen_manager.h" 14 #include "athena/screen/public/screen_manager.h"
15 #include "athena/wm/public/window_manager.h" 15 #include "athena/wm/public/window_manager.h"
16 #include "athena/wm/public/window_manager_observer.h" 16 #include "athena/wm/public/window_manager_observer.h"
17 #include "base/bind.h" 17 #include "base/bind.h"
18 #include "ui/app_list/search_provider.h" 18 #include "ui/app_list/search_provider.h"
19 #include "ui/app_list/views/app_list_main_view.h" 19 #include "ui/app_list/views/app_list_main_view.h"
20 #include "ui/app_list/views/contents_view.h" 20 #include "ui/app_list/views/contents_view.h"
21 #include "ui/aura/layout_manager.h" 21 #include "ui/aura/layout_manager.h"
22 #include "ui/aura/window.h" 22 #include "ui/aura/window.h"
23 #include "ui/views/background.h" 23 #include "ui/views/background.h"
24 #include "ui/views/layout/box_layout.h" 24 #include "ui/views/layout/box_layout.h"
25 #include "ui/views/widget/widget.h" 25 #include "ui/views/widget/widget.h"
26 #include "ui/views/widget/widget_delegate.h" 26 #include "ui/views/widget/widget_delegate.h"
27 #include "ui/wm/core/visibility_controller.h" 27 #include "ui/wm/core/visibility_controller.h"
28 #include "ui/wm/core/window_animations.h" 28 #include "ui/wm/core/window_animations.h"
29 #include "ui/wm/public/activation_change_observer.h"
30 #include "ui/wm/public/activation_client.h"
29 31
30 namespace athena { 32 namespace athena {
31 namespace { 33 namespace {
32 34
33 HomeCard* instance = NULL; 35 HomeCard* instance = NULL;
34 36
35 // Makes sure the homecard is center-aligned horizontally and bottom-aligned 37 // Makes sure the homecard is center-aligned horizontally and bottom-aligned
36 // vertically. 38 // vertically.
37 class HomeCardLayoutManager : public aura::LayoutManager { 39 class HomeCardLayoutManager : public aura::LayoutManager {
38 public: 40 public:
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 BottomHomeView* bottom_view_; 148 BottomHomeView* bottom_view_;
147 views::View* minimized_view_; 149 views::View* minimized_view_;
148 150
149 DISALLOW_COPY_AND_ASSIGN(HomeCardView); 151 DISALLOW_COPY_AND_ASSIGN(HomeCardView);
150 }; 152 };
151 153
152 class HomeCardImpl : public HomeCard, 154 class HomeCardImpl : public HomeCard,
153 public AcceleratorHandler, 155 public AcceleratorHandler,
154 public HomeCardLayoutManager::Delegate, 156 public HomeCardLayoutManager::Delegate,
155 public MinimizedHomeDragDelegate, 157 public MinimizedHomeDragDelegate,
156 public WindowManagerObserver { 158 public WindowManagerObserver,
159 public aura::client::ActivationChangeObserver {
157 public: 160 public:
158 explicit HomeCardImpl(AppModelBuilder* model_builder); 161 explicit HomeCardImpl(AppModelBuilder* model_builder);
159 virtual ~HomeCardImpl(); 162 virtual ~HomeCardImpl();
160 163
161 void Init(); 164 void Init();
162 165
163 private: 166 private:
164 enum Command { 167 enum Command {
165 COMMAND_SHOW_HOME_CARD, 168 COMMAND_SHOW_HOME_CARD,
166 }; 169 };
167 void InstallAccelerators(); 170 void InstallAccelerators();
168 171
169 // Overridden from HomeCard: 172 // Overridden from HomeCard:
170 virtual void SetState(State state) OVERRIDE; 173 virtual void SetState(State state) OVERRIDE;
174 virtual State GetState() OVERRIDE;
171 virtual void RegisterSearchProvider( 175 virtual void RegisterSearchProvider(
172 app_list::SearchProvider* search_provider) OVERRIDE; 176 app_list::SearchProvider* search_provider) OVERRIDE;
173 virtual void UpdateVirtualKeyboardBounds( 177 virtual void UpdateVirtualKeyboardBounds(
174 const gfx::Rect& bounds) OVERRIDE; 178 const gfx::Rect& bounds) OVERRIDE;
175 179
176 // AcceleratorHandler: 180 // AcceleratorHandler:
177 virtual bool IsCommandEnabled(int command_id) const OVERRIDE { return true; } 181 virtual bool IsCommandEnabled(int command_id) const OVERRIDE { return true; }
178 virtual bool OnAcceleratorFired(int command_id, 182 virtual bool OnAcceleratorFired(int command_id,
179 const ui::Accelerator& accelerator) OVERRIDE { 183 const ui::Accelerator& accelerator) OVERRIDE {
180 DCHECK_EQ(COMMAND_SHOW_HOME_CARD, command_id); 184 DCHECK_EQ(COMMAND_SHOW_HOME_CARD, command_id);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 229
226 // WindowManagerObserver: 230 // WindowManagerObserver:
227 virtual void OnOverviewModeEnter() OVERRIDE { 231 virtual void OnOverviewModeEnter() OVERRIDE {
228 SetState(VISIBLE_BOTTOM); 232 SetState(VISIBLE_BOTTOM);
229 } 233 }
230 234
231 virtual void OnOverviewModeExit() OVERRIDE { 235 virtual void OnOverviewModeExit() OVERRIDE {
232 SetState(VISIBLE_MINIMIZED); 236 SetState(VISIBLE_MINIMIZED);
233 } 237 }
234 238
239 // aura::client::ActivationChangeObserver:
240 virtual void OnWindowActivated(aura::Window* gained_active,
241 aura::Window* lost_active) OVERRIDE {
242 if (gained_active != home_card_widget_->GetNativeWindow())
243 SetState(VISIBLE_MINIMIZED);
244 }
245
235 scoped_ptr<AppModelBuilder> model_builder_; 246 scoped_ptr<AppModelBuilder> model_builder_;
236 247
237 HomeCard::State state_; 248 HomeCard::State state_;
238 249
239 // original_state_ is the state which the home card should go back to after 250 // original_state_ is the state which the home card should go back to after
240 // the virtual keyboard is hidden. 251 // the virtual keyboard is hidden.
241 HomeCard::State original_state_; 252 HomeCard::State original_state_;
242 253
243 views::Widget* home_card_widget_; 254 views::Widget* home_card_widget_;
244 HomeCardView* home_card_view_; 255 HomeCardView* home_card_view_;
245 scoped_ptr<AppListViewDelegate> view_delegate_; 256 scoped_ptr<AppListViewDelegate> view_delegate_;
246 HomeCardLayoutManager* layout_manager_; 257 HomeCardLayoutManager* layout_manager_;
258 aura::client::ActivationClient* activation_client_; // Not owned
247 259
248 // Right now HomeCard allows only one search provider. 260 // Right now HomeCard allows only one search provider.
249 // TODO(mukai): port app-list's SearchController and Mixer. 261 // TODO(mukai): port app-list's SearchController and Mixer.
250 scoped_ptr<app_list::SearchProvider> search_provider_; 262 scoped_ptr<app_list::SearchProvider> search_provider_;
251 263
252 DISALLOW_COPY_AND_ASSIGN(HomeCardImpl); 264 DISALLOW_COPY_AND_ASSIGN(HomeCardImpl);
253 }; 265 };
254 266
255 HomeCardImpl::HomeCardImpl(AppModelBuilder* model_builder) 267 HomeCardImpl::HomeCardImpl(AppModelBuilder* model_builder)
256 : model_builder_(model_builder), 268 : model_builder_(model_builder),
257 state_(VISIBLE_MINIMIZED), 269 state_(HIDDEN),
258 original_state_(VISIBLE_MINIMIZED), 270 original_state_(VISIBLE_MINIMIZED),
259 home_card_widget_(NULL), 271 home_card_widget_(NULL),
260 home_card_view_(NULL), 272 home_card_view_(NULL),
261 layout_manager_(NULL) { 273 layout_manager_(NULL),
274 activation_client_(NULL) {
262 DCHECK(!instance); 275 DCHECK(!instance);
263 instance = this; 276 instance = this;
264 WindowManager::GetInstance()->AddObserver(this); 277 WindowManager::GetInstance()->AddObserver(this);
265 } 278 }
266 279
267 HomeCardImpl::~HomeCardImpl() { 280 HomeCardImpl::~HomeCardImpl() {
268 DCHECK(instance); 281 DCHECK(instance);
269 WindowManager::GetInstance()->RemoveObserver(this); 282 WindowManager::GetInstance()->RemoveObserver(this);
283 if (activation_client_)
284 activation_client_->RemoveObserver(this);
270 home_card_widget_->CloseNow(); 285 home_card_widget_->CloseNow();
271 instance = NULL; 286 instance = NULL;
272 } 287 }
273 288
274 void HomeCardImpl::SetState(HomeCard::State state) { 289 void HomeCardImpl::SetState(HomeCard::State state) {
290 if (state_ == state)
291 return;
292
275 // Update |state_| before changing the visibility of the widgets, so that 293 // Update |state_| before changing the visibility of the widgets, so that
276 // LayoutManager callbacks get the correct state. 294 // LayoutManager callbacks get the correct state.
277 state_ = state; 295 state_ = state;
278 original_state_ = state; 296 original_state_ = state;
279 if (state_ == HIDDEN) { 297 if (state_ == HIDDEN) {
280 home_card_widget_->Hide(); 298 home_card_widget_->Hide();
281 } else { 299 } else {
282 home_card_widget_->Show(); 300 home_card_widget_->Show();
283 home_card_view_->SetState(state); 301 home_card_view_->SetState(state);
284 layout_manager_->Layout(); 302 layout_manager_->Layout();
285 } 303 }
286 } 304 }
287 305
306 HomeCard::State HomeCardImpl::GetState() {
307 return state_;
308 }
309
288 void HomeCardImpl::RegisterSearchProvider( 310 void HomeCardImpl::RegisterSearchProvider(
289 app_list::SearchProvider* search_provider) { 311 app_list::SearchProvider* search_provider) {
290 DCHECK(!search_provider_); 312 DCHECK(!search_provider_);
291 search_provider_.reset(search_provider); 313 search_provider_.reset(search_provider);
292 view_delegate_->RegisterSearchProvider(search_provider_.get()); 314 view_delegate_->RegisterSearchProvider(search_provider_.get());
293 } 315 }
294 316
295 void HomeCardImpl::UpdateVirtualKeyboardBounds( 317 void HomeCardImpl::UpdateVirtualKeyboardBounds(
296 const gfx::Rect& bounds) { 318 const gfx::Rect& bounds) {
297 if (state_ == VISIBLE_MINIMIZED && !bounds.IsEmpty()) { 319 if (state_ == VISIBLE_MINIMIZED && !bounds.IsEmpty()) {
(...skipping 25 matching lines...) Expand all
323 home_card_widget_ = new views::Widget(); 345 home_card_widget_ = new views::Widget();
324 views::Widget::InitParams widget_params( 346 views::Widget::InitParams widget_params(
325 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); 347 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
326 widget_params.parent = container; 348 widget_params.parent = container;
327 widget_params.delegate = home_card_view_; 349 widget_params.delegate = home_card_view_;
328 widget_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 350 widget_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
329 home_card_widget_->Init(widget_params); 351 home_card_widget_->Init(widget_params);
330 352
331 SetState(VISIBLE_MINIMIZED); 353 SetState(VISIBLE_MINIMIZED);
332 home_card_view_->Layout(); 354 home_card_view_->Layout();
355
356 activation_client_ =
357 aura::client::GetActivationClient(container->GetRootWindow());
358 if (activation_client_)
359 activation_client_->AddObserver(this);
333 } 360 }
334 361
335 void HomeCardImpl::InstallAccelerators() { 362 void HomeCardImpl::InstallAccelerators() {
336 const AcceleratorData accelerator_data[] = { 363 const AcceleratorData accelerator_data[] = {
337 {TRIGGER_ON_PRESS, ui::VKEY_L, ui::EF_CONTROL_DOWN, 364 {TRIGGER_ON_PRESS, ui::VKEY_L, ui::EF_CONTROL_DOWN,
338 COMMAND_SHOW_HOME_CARD, AF_NONE}, 365 COMMAND_SHOW_HOME_CARD, AF_NONE},
339 }; 366 };
340 AcceleratorManager::Get()->RegisterAccelerators( 367 AcceleratorManager::Get()->RegisterAccelerators(
341 accelerator_data, arraysize(accelerator_data), this); 368 accelerator_data, arraysize(accelerator_data), this);
342 } 369 }
(...skipping 14 matching lines...) Expand all
357 instance = NULL; 384 instance = NULL;
358 } 385 }
359 386
360 // static 387 // static
361 HomeCard* HomeCard::Get() { 388 HomeCard* HomeCard::Get() {
362 DCHECK(instance); 389 DCHECK(instance);
363 return instance; 390 return instance;
364 } 391 }
365 392
366 } // namespace athena 393 } // namespace athena
OLDNEW
« no previous file with comments | « athena/home/DEPS ('k') | athena/home/home_card_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698