Home | History | Annotate | Download | only in home
      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