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.
5 #include "athena/virtual_keyboard/public/virtual_keyboard_manager.h"
7 #include "athena/screen/public/screen_manager.h"
8 #include "athena/util/container_priorities.h"
9 #include "athena/util/fill_layout_manager.h"
10 #include "base/bind.h"
11 #include "base/memory/singleton.h"
12 #include "base/values.h"
13 #include "content/public/browser/browser_context.h"
14 #include "ui/aura/client/aura_constants.h"
15 #include "ui/aura/layout_manager.h"
16 #include "ui/aura/window.h"
17 #include "ui/keyboard/keyboard.h"
18 #include "ui/keyboard/keyboard_constants.h"
19 #include "ui/keyboard/keyboard_controller.h"
20 #include "ui/keyboard/keyboard_controller_proxy.h"
21 #include "ui/keyboard/keyboard_util.h"
27 VirtualKeyboardManager* instance;
29 // A very basic and simple implementation of KeyboardControllerProxy.
30 class BasicKeyboardControllerProxy : public keyboard::KeyboardControllerProxy {
32 BasicKeyboardControllerProxy(content::BrowserContext* context,
33 aura::Window* root_window)
34 : browser_context_(context), root_window_(root_window) {}
35 ~BasicKeyboardControllerProxy() override {}
37 // keyboard::KeyboardControllerProxy:
38 virtual ui::InputMethod* GetInputMethod() override {
39 ui::InputMethod* input_method =
40 root_window_->GetProperty(aura::client::kRootWindowInputMethodKey);
44 virtual void RequestAudioInput(
45 content::WebContents* web_contents,
46 const content::MediaStreamRequest& request,
47 const content::MediaResponseCallback& callback) override {}
49 virtual content::BrowserContext* GetBrowserContext() override {
50 return browser_context_;
53 virtual void SetUpdateInputType(ui::TextInputType type) override {}
56 content::BrowserContext* browser_context_;
57 aura::Window* root_window_;
59 DISALLOW_COPY_AND_ASSIGN(BasicKeyboardControllerProxy);
62 class VirtualKeyboardManagerImpl : public VirtualKeyboardManager {
64 explicit VirtualKeyboardManagerImpl(content::BrowserContext* browser_context)
65 : browser_context_(browser_context), container_(nullptr) {
71 ~VirtualKeyboardManagerImpl() override {
72 CHECK_EQ(this, instance);
75 keyboard::KeyboardController::ResetInstance(nullptr);
80 athena::ScreenManager::ContainerParams params("VirtualKeyboardContainer",
82 container_ = athena::ScreenManager::Get()->CreateContainer(params);
83 container_->SetLayoutManager(new FillLayoutManager(container_));
85 keyboard::KeyboardController* controller = new keyboard::KeyboardController(
86 new BasicKeyboardControllerProxy(browser_context_,
87 container_->GetRootWindow()));
88 // ResetInstance takes ownership.
89 keyboard::KeyboardController::ResetInstance(controller);
90 aura::Window* kb_container = controller->GetContainerWindow();
91 container_->AddChild(kb_container);
95 content::BrowserContext* browser_context_;
96 aura::Window* container_;
98 DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardManagerImpl);
104 VirtualKeyboardManager* VirtualKeyboardManager::Create(
105 content::BrowserContext* browser_context) {
107 keyboard::InitializeKeyboard();
108 keyboard::SetTouchKeyboardEnabled(true);
109 keyboard::InitializeWebUIBindings();
111 new VirtualKeyboardManagerImpl(browser_context);
116 VirtualKeyboardManager* VirtualKeyboardManager::Get() {
120 void VirtualKeyboardManager::Shutdown() {
126 } // namespace athena