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 3 // found in the LICENSE file. 4 5 #ifndef ATHENA_HOME_HOME_CARD_IMPL_H_ 6 #define ATHENA_HOME_HOME_CARD_IMPL_H_ 7 8 #include "athena/athena_export.h" 9 #include "athena/home/home_card_gesture_manager.h" 10 #include "athena/home/public/home_card.h" 11 #include "athena/input/public/accelerator_manager.h" 12 #include "athena/wm/public/window_manager_observer.h" 13 #include "ui/wm/public/activation_change_observer.h" 14 15 namespace app_list { 16 class SearchProvider; 17 } 18 19 namespace aura { 20 class Window; 21 22 namespace client { 23 class ActivationClient; 24 } 25 } 26 27 namespace gfx { 28 class Rect; 29 } 30 31 namespace ui { 32 class LayerOwner; 33 } 34 35 namespace views { 36 class Widget; 37 } 38 39 namespace athena { 40 class AppModelBuilder; 41 class AppListViewDelegate; 42 class HomeCardLayoutManager; 43 class HomeCardView; 44 45 class ATHENA_EXPORT HomeCardImpl 46 : public HomeCard, 47 public AcceleratorHandler, 48 public HomeCardGestureManager::Delegate, 49 public WindowManagerObserver, 50 public aura::client::ActivationChangeObserver { 51 public: 52 explicit HomeCardImpl(AppModelBuilder* model_builder); 53 virtual ~HomeCardImpl(); 54 55 void Init(); 56 57 aura::Window* GetHomeCardWindowForTest() const; 58 59 private: 60 enum Command { 61 COMMAND_SHOW_HOME_CARD, 62 }; 63 void InstallAccelerators(); 64 65 // Overridden from HomeCard: 66 virtual void SetState(HomeCard::State state) OVERRIDE; 67 virtual State GetState() OVERRIDE; 68 virtual void RegisterSearchProvider( 69 app_list::SearchProvider* search_provider) OVERRIDE; 70 virtual void UpdateVirtualKeyboardBounds( 71 const gfx::Rect& bounds) OVERRIDE; 72 73 // AcceleratorHandler: 74 virtual bool IsCommandEnabled(int command_id) const OVERRIDE; 75 virtual bool OnAcceleratorFired(int command_id, 76 const ui::Accelerator& accelerator) OVERRIDE; 77 78 // HomeCardGestureManager::Delegate: 79 virtual void OnGestureEnded(HomeCard::State final_state, 80 bool is_fling) OVERRIDE; 81 virtual void OnGestureProgressed( 82 HomeCard::State from_state, 83 HomeCard::State to_state, 84 float progress) OVERRIDE; 85 86 // WindowManagerObserver: 87 virtual void OnOverviewModeEnter() OVERRIDE; 88 virtual void OnOverviewModeExit() OVERRIDE; 89 virtual void OnSplitViewModeEnter() OVERRIDE; 90 virtual void OnSplitViewModeExit() OVERRIDE; 91 92 // aura::client::ActivationChangeObserver: 93 virtual void OnWindowActivated(aura::Window* gained_active, 94 aura::Window* lost_active) OVERRIDE; 95 96 scoped_ptr<AppModelBuilder> model_builder_; 97 98 HomeCard::State state_; 99 100 // original_state_ is the state which the home card should go back to after 101 // the virtual keyboard is hidden. 102 HomeCard::State original_state_; 103 104 views::Widget* home_card_widget_; 105 HomeCardView* home_card_view_; 106 scoped_ptr<AppListViewDelegate> view_delegate_; 107 HomeCardLayoutManager* layout_manager_; 108 aura::client::ActivationClient* activation_client_; // Not owned 109 scoped_ptr<ui::LayerOwner> minimized_home_; 110 111 // Right now HomeCard allows only one search provider. 112 // TODO(mukai): port app-list's SearchController and Mixer. 113 scoped_ptr<app_list::SearchProvider> search_provider_; 114 115 DISALLOW_COPY_AND_ASSIGN(HomeCardImpl); 116 }; 117 118 } // namespace athena 119 120 #endif // ATHENA_HOME_HOME_CARD_IMPL_H_ 121