| 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/home/public/home_card.h" | 5 #include "athena/home/public/home_card.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "athena/common/container_priorities.h" | 10 #include "athena/common/container_priorities.h" |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 virtual void SetState(State state) OVERRIDE; | 362 virtual void SetState(State state) OVERRIDE; |
| 363 virtual State GetState() OVERRIDE; | 363 virtual State GetState() OVERRIDE; |
| 364 virtual void RegisterSearchProvider( | 364 virtual void RegisterSearchProvider( |
| 365 app_list::SearchProvider* search_provider) OVERRIDE; | 365 app_list::SearchProvider* search_provider) OVERRIDE; |
| 366 virtual void UpdateVirtualKeyboardBounds( | 366 virtual void UpdateVirtualKeyboardBounds( |
| 367 const gfx::Rect& bounds) OVERRIDE; | 367 const gfx::Rect& bounds) OVERRIDE; |
| 368 | 368 |
| 369 // AcceleratorHandler: | 369 // AcceleratorHandler: |
| 370 virtual bool IsCommandEnabled(int command_id) const OVERRIDE { return true; } | 370 virtual bool IsCommandEnabled(int command_id) const OVERRIDE { return true; } |
| 371 virtual bool OnAcceleratorFired(int command_id, | 371 virtual bool OnAcceleratorFired(int command_id, |
| 372 const ui::Accelerator& accelerator) OVERRIDE { | 372 const ui::Accelerator& accelerator) OVERRIDE; |
| 373 DCHECK_EQ(COMMAND_SHOW_HOME_CARD, command_id); | |
| 374 | |
| 375 if (state_ == VISIBLE_CENTERED && original_state_ != VISIBLE_BOTTOM) | |
| 376 SetState(VISIBLE_MINIMIZED); | |
| 377 else if (state_ == VISIBLE_MINIMIZED) | |
| 378 SetState(VISIBLE_CENTERED); | |
| 379 return true; | |
| 380 } | |
| 381 | 373 |
| 382 // HomeCardLayoutManager::Delegate: | 374 // HomeCardLayoutManager::Delegate: |
| 383 virtual aura::Window* GetNativeWindow() OVERRIDE { | 375 virtual aura::Window* GetNativeWindow() OVERRIDE; |
| 384 if (state_ == HIDDEN) | |
| 385 return NULL; | |
| 386 | |
| 387 return home_card_widget_ ? home_card_widget_->GetNativeWindow() : NULL; | |
| 388 } | |
| 389 | 376 |
| 390 // HomeCardGestureManager::Delegate: | 377 // HomeCardGestureManager::Delegate: |
| 391 virtual void OnGestureEnded(State final_state) OVERRIDE { | 378 virtual void OnGestureEnded(State final_state) OVERRIDE; |
| 392 home_card_view_->ClearGesture(); | |
| 393 if (state_ != final_state && | |
| 394 (state_ == VISIBLE_MINIMIZED || final_state == VISIBLE_MINIMIZED)) { | |
| 395 WindowManager::GetInstance()->ToggleOverview(); | |
| 396 } else { | |
| 397 state_ = final_state; | |
| 398 home_card_view_->SetState(final_state); | |
| 399 layout_manager_->Layout(); | |
| 400 } | |
| 401 } | |
| 402 | |
| 403 virtual void OnGestureProgressed( | 379 virtual void OnGestureProgressed( |
| 404 State from_state, State to_state, float progress) OVERRIDE { | 380 State from_state, State to_state, float progress) OVERRIDE; |
| 405 // Do not update |state_| but update the look of home_card_view. | |
| 406 // TODO(mukai): allow mixed visual of |from_state| and |to_state|. | |
| 407 home_card_view_->SetState(to_state); | |
| 408 | |
| 409 gfx::Rect screen_bounds = | |
| 410 home_card_widget_->GetNativeWindow()->GetRootWindow()->bounds(); | |
| 411 home_card_widget_->SetBounds(gfx::Tween::RectValueBetween( | |
| 412 progress, | |
| 413 GetBoundsForState(screen_bounds, from_state), | |
| 414 GetBoundsForState(screen_bounds, to_state))); | |
| 415 | |
| 416 // TODO(mukai): signals the update to the window manager so that it shows | |
| 417 // the intermediate visual state of overview mode. | |
| 418 } | |
| 419 | 381 |
| 420 // WindowManagerObserver: | 382 // WindowManagerObserver: |
| 421 virtual void OnOverviewModeEnter() OVERRIDE { | 383 virtual void OnOverviewModeEnter() OVERRIDE; |
| 422 SetState(VISIBLE_BOTTOM); | 384 virtual void OnOverviewModeExit() OVERRIDE; |
| 423 } | |
| 424 | |
| 425 virtual void OnOverviewModeExit() OVERRIDE { | |
| 426 SetState(VISIBLE_MINIMIZED); | |
| 427 } | |
| 428 | 385 |
| 429 // aura::client::ActivationChangeObserver: | 386 // aura::client::ActivationChangeObserver: |
| 430 virtual void OnWindowActivated(aura::Window* gained_active, | 387 virtual void OnWindowActivated(aura::Window* gained_active, |
| 431 aura::Window* lost_active) OVERRIDE { | 388 aura::Window* lost_active) OVERRIDE; |
| 432 if (state_ != HIDDEN && | |
| 433 gained_active != home_card_widget_->GetNativeWindow()) { | |
| 434 SetState(VISIBLE_MINIMIZED); | |
| 435 } | |
| 436 } | |
| 437 | 389 |
| 438 scoped_ptr<AppModelBuilder> model_builder_; | 390 scoped_ptr<AppModelBuilder> model_builder_; |
| 439 | 391 |
| 440 HomeCard::State state_; | 392 HomeCard::State state_; |
| 441 | 393 |
| 442 // original_state_ is the state which the home card should go back to after | 394 // original_state_ is the state which the home card should go back to after |
| 443 // the virtual keyboard is hidden. | 395 // the virtual keyboard is hidden. |
| 444 HomeCard::State original_state_; | 396 HomeCard::State original_state_; |
| 445 | 397 |
| 446 views::Widget* home_card_widget_; | 398 views::Widget* home_card_widget_; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 471 | 423 |
| 472 HomeCardImpl::~HomeCardImpl() { | 424 HomeCardImpl::~HomeCardImpl() { |
| 473 DCHECK(instance); | 425 DCHECK(instance); |
| 474 WindowManager::GetInstance()->RemoveObserver(this); | 426 WindowManager::GetInstance()->RemoveObserver(this); |
| 475 if (activation_client_) | 427 if (activation_client_) |
| 476 activation_client_->RemoveObserver(this); | 428 activation_client_->RemoveObserver(this); |
| 477 home_card_widget_->CloseNow(); | 429 home_card_widget_->CloseNow(); |
| 478 instance = NULL; | 430 instance = NULL; |
| 479 } | 431 } |
| 480 | 432 |
| 433 void HomeCardImpl::Init() { |
| 434 InstallAccelerators(); |
| 435 ScreenManager::ContainerParams params("HomeCardContainer", CP_HOME_CARD); |
| 436 params.can_activate_children = true; |
| 437 aura::Window* container = ScreenManager::Get()->CreateContainer(params); |
| 438 layout_manager_ = new HomeCardLayoutManager(this); |
| 439 |
| 440 container->SetLayoutManager(layout_manager_); |
| 441 wm::SetChildWindowVisibilityChangesAnimated(container); |
| 442 |
| 443 view_delegate_.reset(new AppListViewDelegate(model_builder_.get())); |
| 444 if (search_provider_) |
| 445 view_delegate_->RegisterSearchProvider(search_provider_.get()); |
| 446 |
| 447 home_card_view_ = new HomeCardView(view_delegate_.get(), container, this); |
| 448 home_card_widget_ = new views::Widget(); |
| 449 views::Widget::InitParams widget_params( |
| 450 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| 451 widget_params.parent = container; |
| 452 widget_params.delegate = home_card_view_; |
| 453 widget_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| 454 home_card_widget_->Init(widget_params); |
| 455 |
| 456 SetState(VISIBLE_MINIMIZED); |
| 457 home_card_view_->Layout(); |
| 458 |
| 459 activation_client_ = |
| 460 aura::client::GetActivationClient(container->GetRootWindow()); |
| 461 if (activation_client_) |
| 462 activation_client_->AddObserver(this); |
| 463 } |
| 464 |
| 465 void HomeCardImpl::InstallAccelerators() { |
| 466 const AcceleratorData accelerator_data[] = { |
| 467 {TRIGGER_ON_PRESS, ui::VKEY_L, ui::EF_CONTROL_DOWN, |
| 468 COMMAND_SHOW_HOME_CARD, AF_NONE}, |
| 469 }; |
| 470 AcceleratorManager::Get()->RegisterAccelerators( |
| 471 accelerator_data, arraysize(accelerator_data), this); |
| 472 } |
| 473 |
| 481 void HomeCardImpl::SetState(HomeCard::State state) { | 474 void HomeCardImpl::SetState(HomeCard::State state) { |
| 482 if (state_ == state) | 475 if (state_ == state) |
| 483 return; | 476 return; |
| 484 | 477 |
| 485 // Update |state_| before changing the visibility of the widgets, so that | 478 // Update |state_| before changing the visibility of the widgets, so that |
| 486 // LayoutManager callbacks get the correct state. | 479 // LayoutManager callbacks get the correct state. |
| 487 state_ = state; | 480 state_ = state; |
| 488 original_state_ = state; | 481 original_state_ = state; |
| 489 if (state_ == HIDDEN) { | 482 if (state_ == HIDDEN) { |
| 490 home_card_widget_->Hide(); | 483 home_card_widget_->Hide(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 515 SetState(HIDDEN); | 508 SetState(HIDDEN); |
| 516 original_state_ = VISIBLE_MINIMIZED; | 509 original_state_ = VISIBLE_MINIMIZED; |
| 517 } else if (state_ == VISIBLE_BOTTOM && !bounds.IsEmpty()) { | 510 } else if (state_ == VISIBLE_BOTTOM && !bounds.IsEmpty()) { |
| 518 SetState(VISIBLE_CENTERED); | 511 SetState(VISIBLE_CENTERED); |
| 519 original_state_ = VISIBLE_BOTTOM; | 512 original_state_ = VISIBLE_BOTTOM; |
| 520 } else if (state_ != original_state_ && bounds.IsEmpty()) { | 513 } else if (state_ != original_state_ && bounds.IsEmpty()) { |
| 521 SetState(original_state_); | 514 SetState(original_state_); |
| 522 } | 515 } |
| 523 } | 516 } |
| 524 | 517 |
| 525 void HomeCardImpl::Init() { | 518 bool HomeCardImpl::OnAcceleratorFired(int command_id, |
| 526 InstallAccelerators(); | 519 const ui::Accelerator& accelerator) { |
| 527 ScreenManager::ContainerParams params("HomeCardContainer", CP_HOME_CARD); | 520 DCHECK_EQ(COMMAND_SHOW_HOME_CARD, command_id); |
| 528 params.can_activate_children = true; | |
| 529 aura::Window* container = ScreenManager::Get()->CreateContainer(params); | |
| 530 layout_manager_ = new HomeCardLayoutManager(this); | |
| 531 | 521 |
| 532 container->SetLayoutManager(layout_manager_); | 522 if (state_ == VISIBLE_CENTERED && original_state_ != VISIBLE_BOTTOM) |
| 533 wm::SetChildWindowVisibilityChangesAnimated(container); | 523 SetState(VISIBLE_MINIMIZED); |
| 534 | 524 else if (state_ == VISIBLE_MINIMIZED) |
| 535 view_delegate_.reset(new AppListViewDelegate(model_builder_.get())); | 525 SetState(VISIBLE_CENTERED); |
| 536 if (search_provider_) | 526 return true; |
| 537 view_delegate_->RegisterSearchProvider(search_provider_.get()); | |
| 538 | |
| 539 home_card_view_ = new HomeCardView(view_delegate_.get(), container, this); | |
| 540 home_card_widget_ = new views::Widget(); | |
| 541 views::Widget::InitParams widget_params( | |
| 542 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); | |
| 543 widget_params.parent = container; | |
| 544 widget_params.delegate = home_card_view_; | |
| 545 widget_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; | |
| 546 home_card_widget_->Init(widget_params); | |
| 547 | |
| 548 SetState(VISIBLE_MINIMIZED); | |
| 549 home_card_view_->Layout(); | |
| 550 | |
| 551 activation_client_ = | |
| 552 aura::client::GetActivationClient(container->GetRootWindow()); | |
| 553 if (activation_client_) | |
| 554 activation_client_->AddObserver(this); | |
| 555 } | 527 } |
| 556 | 528 |
| 557 void HomeCardImpl::InstallAccelerators() { | 529 aura::Window* HomeCardImpl::GetNativeWindow() { |
| 558 const AcceleratorData accelerator_data[] = { | 530 if (state_ == HIDDEN) |
| 559 {TRIGGER_ON_PRESS, ui::VKEY_L, ui::EF_CONTROL_DOWN, | 531 return NULL; |
| 560 COMMAND_SHOW_HOME_CARD, AF_NONE}, | 532 |
| 561 }; | 533 return home_card_widget_ ? home_card_widget_->GetNativeWindow() : NULL; |
| 562 AcceleratorManager::Get()->RegisterAccelerators( | 534 } |
| 563 accelerator_data, arraysize(accelerator_data), this); | 535 |
| 536 void HomeCardImpl::OnGestureEnded(State final_state) { |
| 537 home_card_view_->ClearGesture(); |
| 538 if (state_ != final_state && |
| 539 (state_ == VISIBLE_MINIMIZED || final_state == VISIBLE_MINIMIZED)) { |
| 540 WindowManager::GetInstance()->ToggleOverview(); |
| 541 } else { |
| 542 state_ = final_state; |
| 543 home_card_view_->SetState(final_state); |
| 544 layout_manager_->Layout(); |
| 545 } |
| 546 } |
| 547 |
| 548 void HomeCardImpl::OnGestureProgressed( |
| 549 State from_state, State to_state, float progress) { |
| 550 // Do not update |state_| but update the look of home_card_view. |
| 551 // TODO(mukai): allow mixed visual of |from_state| and |to_state|. |
| 552 home_card_view_->SetState(to_state); |
| 553 |
| 554 gfx::Rect screen_bounds = |
| 555 home_card_widget_->GetNativeWindow()->GetRootWindow()->bounds(); |
| 556 home_card_widget_->SetBounds(gfx::Tween::RectValueBetween( |
| 557 progress, |
| 558 GetBoundsForState(screen_bounds, from_state), |
| 559 GetBoundsForState(screen_bounds, to_state))); |
| 560 |
| 561 // TODO(mukai): signals the update to the window manager so that it shows the |
| 562 // intermediate visual state of overview mode. |
| 563 } |
| 564 |
| 565 void HomeCardImpl::OnOverviewModeEnter() { |
| 566 SetState(VISIBLE_BOTTOM); |
| 567 } |
| 568 |
| 569 void HomeCardImpl::OnOverviewModeExit() { |
| 570 SetState(VISIBLE_MINIMIZED); |
| 571 } |
| 572 |
| 573 void HomeCardImpl::OnWindowActivated(aura::Window* gained_active, |
| 574 aura::Window* lost_active) { |
| 575 if (state_ != HIDDEN && |
| 576 gained_active != home_card_widget_->GetNativeWindow()) { |
| 577 SetState(VISIBLE_MINIMIZED); |
| 578 } |
| 564 } | 579 } |
| 565 | 580 |
| 566 } // namespace | 581 } // namespace |
| 567 | 582 |
| 568 // static | 583 // static |
| 569 HomeCard* HomeCard::Create(AppModelBuilder* model_builder) { | 584 HomeCard* HomeCard::Create(AppModelBuilder* model_builder) { |
| 570 (new HomeCardImpl(model_builder))->Init(); | 585 (new HomeCardImpl(model_builder))->Init(); |
| 571 DCHECK(instance); | 586 DCHECK(instance); |
| 572 return instance; | 587 return instance; |
| 573 } | 588 } |
| 574 | 589 |
| 575 // static | 590 // static |
| 576 void HomeCard::Shutdown() { | 591 void HomeCard::Shutdown() { |
| 577 DCHECK(instance); | 592 DCHECK(instance); |
| 578 delete instance; | 593 delete instance; |
| 579 instance = NULL; | 594 instance = NULL; |
| 580 } | 595 } |
| 581 | 596 |
| 582 // static | 597 // static |
| 583 HomeCard* HomeCard::Get() { | 598 HomeCard* HomeCard::Get() { |
| 584 DCHECK(instance); | 599 DCHECK(instance); |
| 585 return instance; | 600 return instance; |
| 586 } | 601 } |
| 587 | 602 |
| 588 } // namespace athena | 603 } // namespace athena |
| OLD | NEW |