Chromium Code Reviews| Index: ash/virtual_keyboard_controller.cc |
| diff --git a/ash/virtual_keyboard_controller.cc b/ash/virtual_keyboard_controller.cc |
| index 6bd535a2d45b0d629f22c9f087cfadf104dcb892..d66120d7030c5f944bef04705fa8c8cbba94bab7 100644 |
| --- a/ash/virtual_keyboard_controller.cc |
| +++ b/ash/virtual_keyboard_controller.cc |
| @@ -4,28 +4,109 @@ |
| #include "ash/virtual_keyboard_controller.h" |
| +#include <vector> |
| + |
| #include "ash/shell.h" |
| +#include "ash/wm/maximize_mode/maximize_mode_controller.h" |
| +#include "base/command_line.h" |
| +#include "base/strings/string_util.h" |
| +#include "ui/events/device_data_manager.h" |
| +#include "ui/events/input_device.h" |
| +#include "ui/events/keyboard_device.h" |
| +#include "ui/events/touchscreen_device.h" |
| +#include "ui/gfx/x/x11_types.h" |
| +#include "ui/keyboard/keyboard_switches.h" |
| #include "ui/keyboard/keyboard_util.h" |
| namespace ash { |
| -VirtualKeyboardController::VirtualKeyboardController() { |
| +VirtualKeyboardController::VirtualKeyboardController() |
| + : has_external_keyboard_(false), |
| + has_internal_keyboard_(false), |
| + has_touchscreen_(false) { |
| Shell::GetInstance()->AddShellObserver(this); |
| + ui::DeviceDataManager::GetInstance()->AddObserver(this); |
| + UpdateDevices(); |
| } |
| VirtualKeyboardController::~VirtualKeyboardController() { |
| Shell::GetInstance()->RemoveShellObserver(this); |
| + ui::DeviceDataManager::GetInstance()->RemoveObserver(this); |
| } |
| +// TODO(rsadam@): Remove when autovirtual keyboard flag is on by default. |
| void VirtualKeyboardController::OnMaximizeModeStarted() { |
| - keyboard::SetTouchKeyboardEnabled(true); |
| - Shell::GetInstance()->CreateKeyboard(); |
| + if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| + keyboard::switches::kAutoVirtualKeyboard)) { |
| + SetKeyboardEnabled(true); |
| + } |
| } |
| void VirtualKeyboardController::OnMaximizeModeEnded() { |
| - keyboard::SetTouchKeyboardEnabled(false); |
| - if (!keyboard::IsKeyboardEnabled()) |
| - Shell::GetInstance()->DeactivateKeyboard(); |
| + if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| + keyboard::switches::kAutoVirtualKeyboard)) { |
| + SetKeyboardEnabled(false); |
| + } |
| +} |
| + |
| +// Determines the active input devices. |
| +void VirtualKeyboardController::UpdateDevices() { |
| + ui::DeviceDataManager* device_data_manager = |
| + ui::DeviceDataManager::GetInstance(); |
| + |
| + // Checks for internal touchscreens. |
| + std::vector<ui::TouchscreenDevice> screens = |
| + device_data_manager->touchscreen_devices(); |
| + has_touchscreen_ = screens.size() > 0; |
| + |
| + // Checks for keyboards. |
| + has_external_keyboard_ = false; |
| + has_internal_keyboard_ = false; |
| + std::vector<ui::KeyboardDevice> keyboards = |
| + device_data_manager->keyboard_devices(); |
| + std::vector<ui::KeyboardDevice>::const_iterator iter; |
| + for (iter = keyboards.begin(); iter != keyboards.end(); ++iter) { |
| + ui::InputDeviceType type = (*iter).type; |
| + if (type == ui::InputDeviceType::INPUT_DEVICE_INTERNAL) |
| + has_internal_keyboard_ = true; |
| + if (type == ui::InputDeviceType::INPUT_DEVICE_EXTERNAL) |
| + has_external_keyboard_ = true; |
| + } |
| + // Update keyboard state. |
| + Update(); |
| +} |
| + |
| +// Creates/Destroys the virtual keyboard as necessary. |
| +void VirtualKeyboardController::SetKeyboardEnabled(bool enabled) { |
| + keyboard::SetTouchKeyboardEnabled(enabled); |
| + if (enabled) { |
| + Shell::GetInstance()->CreateKeyboard(); |
| + } else { |
| + if (!keyboard::IsKeyboardEnabled()) |
| + Shell::GetInstance()->DeactivateKeyboard(); |
| + } |
| +} |
| + |
| +// Updates the keyboard state. |
|
flackr
2014/10/27 15:33:12
Move function comments to .h file.
rsadam
2014/10/27 15:51:18
Done.
|
| +void VirtualKeyboardController::Update() { |
|
flackr
2014/10/27 15:33:12
Maybe call this UpdateKeyboardEnabled to different
rsadam
2014/10/27 15:51:18
Done.
|
| + if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| + keyboard::switches::kAutoVirtualKeyboard)) { |
| + SetKeyboardEnabled(Shell::GetInstance() |
| + ->maximize_mode_controller() |
| + ->IsMaximizeModeWindowManagerEnabled()); |
|
flackr
2014/10/27 15:20:38
This would have already been done by OnMaximizeMod
rsadam
2014/10/27 15:51:18
Since we delayed when this is created, we might mi
|
| + return; |
| + } |
| + // TODO(rsadam@): Add UI to re-enable suppressed keyboard. |
| + SetKeyboardEnabled(!has_internal_keyboard_ && has_touchscreen_ && |
| + !has_external_keyboard_); |
| +} |
| + |
| +void VirtualKeyboardController::OnTouchscreenDeviceConfigurationChanged() { |
| + UpdateDevices(); |
| +} |
| + |
| +void VirtualKeyboardController::OnKeyboardDeviceConfigurationChanged() { |
| + UpdateDevices(); |
| } |
| } // namespace ash |