Home | History | Annotate | Download | only in keyboard
      1 // Copyright (c) 2013 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 UI_KEYBOARD_KEYBOARD_CONTROLLER_H_
      6 #define UI_KEYBOARD_KEYBOARD_CONTROLLER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/observer_list.h"
     11 #include "ui/aura/window_observer.h"
     12 #include "ui/base/ime/input_method_observer.h"
     13 #include "ui/keyboard/keyboard_export.h"
     14 
     15 namespace aura {
     16 class Window;
     17 }
     18 namespace gfx {
     19 class Rect;
     20 }
     21 namespace ui {
     22 class InputMethod;
     23 class TextInputClient;
     24 }
     25 
     26 namespace keyboard {
     27 
     28 class KeyboardControllerObserver;
     29 class KeyboardControllerProxy;
     30 class KeyboardLayoutManager;
     31 
     32 // Provides control of the virtual keyboard, including providing a container
     33 // and controlling visibility.
     34 class KEYBOARD_EXPORT KeyboardController : public ui::InputMethodObserver,
     35                                            public aura::WindowObserver {
     36  public:
     37   // Takes ownership of |proxy|.
     38   explicit KeyboardController(KeyboardControllerProxy* proxy);
     39   virtual ~KeyboardController();
     40 
     41   // Returns the container for the keyboard, which is then owned by the caller.
     42   // It is the responsibility of the caller to Show() the returned window.
     43   aura::Window* GetContainerWindow();
     44 
     45   // Management of the observer list.
     46   virtual void AddObserver(KeyboardControllerObserver* observer);
     47   virtual void RemoveObserver(KeyboardControllerObserver* observer);
     48 
     49  private:
     50   // For access to Observer methods for simulation.
     51   friend class KeyboardControllerTest;
     52 
     53   // aura::WindowObserver overrides
     54   virtual void OnWindowHierarchyChanged(
     55       const HierarchyChangeParams& params) OVERRIDE;
     56   virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
     57 
     58   // InputMethodObserver overrides
     59   virtual void OnTextInputStateChanged(
     60       const ui::TextInputClient* client) OVERRIDE;
     61   virtual void OnInputMethodDestroyed(
     62       const ui::InputMethod* input_method) OVERRIDE;
     63 
     64   scoped_ptr<KeyboardControllerProxy> proxy_;
     65   aura::Window* container_;
     66   ui::InputMethod* input_method_;
     67 
     68   ObserverList<KeyboardControllerObserver> observer_list_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(KeyboardController);
     71 };
     72 
     73 }  // namespace keyboard
     74 
     75 #endif  // UI_KEYBOARD_KEYBOARD_CONTROLLER_H_
     76