| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/keyboard/keyboard_util.h" | 5 #include "ui/keyboard/keyboard_util.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
| 14 #include "base/strings/string16.h" | 14 #include "base/strings/string16.h" |
| 15 #include "grit/keyboard_resources.h" | |
| 16 #include "grit/keyboard_resources_map.h" | |
| 17 #include "media/audio/audio_manager.h" | 15 #include "media/audio/audio_manager.h" |
| 18 #include "ui/aura/client/aura_constants.h" | 16 #include "ui/aura/client/aura_constants.h" |
| 19 #include "ui/aura/window_tree_host.h" | 17 #include "ui/aura/window_tree_host.h" |
| 20 #include "ui/base/ime/input_method.h" | 18 #include "ui/base/ime/input_method.h" |
| 21 #include "ui/base/ime/text_input_client.h" | 19 #include "ui/base/ime/text_input_client.h" |
| 22 #include "ui/events/event_processor.h" | 20 #include "ui/events/event_processor.h" |
| 23 #include "ui/events/event_utils.h" | 21 #include "ui/events/event_utils.h" |
| 24 #include "ui/events/keycodes/dom/dom_code.h" | 22 #include "ui/events/keycodes/dom/dom_code.h" |
| 25 #include "ui/events/keycodes/dom/dom_key.h" | 23 #include "ui/events/keycodes/dom/dom_key.h" |
| 26 #include "ui/events/keycodes/dom/keycode_converter.h" | 24 #include "ui/events/keycodes/dom/keycode_converter.h" |
| 27 #include "ui/events/keycodes/keyboard_code_conversion.h" | 25 #include "ui/events/keycodes/keyboard_code_conversion.h" |
| 28 #include "ui/keyboard/keyboard_controller.h" | 26 #include "ui/keyboard/keyboard_controller.h" |
| 29 #include "ui/keyboard/keyboard_controller_proxy.h" | |
| 30 #include "ui/keyboard/keyboard_switches.h" | 27 #include "ui/keyboard/keyboard_switches.h" |
| 31 #include "url/gurl.h" | 28 #include "ui/keyboard/keyboard_ui.h" |
| 32 | 29 |
| 33 namespace { | 30 namespace { |
| 34 | 31 |
| 35 const char kKeyDown[] ="keydown"; | 32 const char kKeyDown[] ="keydown"; |
| 36 const char kKeyUp[] = "keyup"; | 33 const char kKeyUp[] = "keyup"; |
| 37 | 34 |
| 38 void SendProcessKeyEvent(ui::EventType type, | 35 void SendProcessKeyEvent(ui::EventType type, |
| 39 aura::WindowTreeHost* host) { | 36 aura::WindowTreeHost* host) { |
| 40 ui::KeyEvent event(type, ui::VKEY_PROCESSKEY, ui::DomCode::NONE, | 37 ui::KeyEvent event(type, ui::VKEY_PROCESSKEY, ui::DomCode::NONE, |
| 41 ui::EF_IS_SYNTHESIZED, ui::DomKey::PROCESS, | 38 ui::EF_IS_SYNTHESIZED, ui::DomKey::PROCESS, |
| 42 ui::EventTimeForNow()); | 39 ui::EventTimeForNow()); |
| 43 ui::EventDispatchDetails details = | 40 ui::EventDispatchDetails details = |
| 44 host->event_processor()->OnEventFromSource(&event); | 41 host->event_processor()->OnEventFromSource(&event); |
| 45 CHECK(!details.dispatcher_destroyed); | 42 CHECK(!details.dispatcher_destroyed); |
| 46 } | 43 } |
| 47 | 44 |
| 48 base::LazyInstance<base::Time> g_keyboard_load_time_start = | 45 base::LazyInstance<base::Time> g_keyboard_load_time_start = |
| 49 LAZY_INSTANCE_INITIALIZER; | 46 LAZY_INSTANCE_INITIALIZER; |
| 50 | 47 |
| 51 bool g_accessibility_keyboard_enabled = false; | 48 bool g_accessibility_keyboard_enabled = false; |
| 52 | 49 |
| 53 bool g_hotrod_keyboard_enabled = false; | 50 bool g_hotrod_keyboard_enabled = false; |
| 54 | 51 |
| 55 base::LazyInstance<GURL> g_override_content_url = LAZY_INSTANCE_INITIALIZER; | |
| 56 | |
| 57 bool g_touch_keyboard_enabled = false; | 52 bool g_touch_keyboard_enabled = false; |
| 58 | 53 |
| 59 keyboard::KeyboardState g_requested_keyboard_state = | 54 keyboard::KeyboardState g_requested_keyboard_state = |
| 60 keyboard::KEYBOARD_STATE_AUTO; | 55 keyboard::KEYBOARD_STATE_AUTO; |
| 61 | 56 |
| 62 keyboard::KeyboardOverscrolOverride g_keyboard_overscroll_override = | 57 keyboard::KeyboardOverscrolOverride g_keyboard_overscroll_override = |
| 63 keyboard::KEYBOARD_OVERSCROLL_OVERRIDE_NONE; | 58 keyboard::KEYBOARD_OVERSCROLL_OVERRIDE_NONE; |
| 64 | 59 |
| 65 keyboard::KeyboardShowOverride g_keyboard_show_override = | 60 keyboard::KeyboardShowOverride g_keyboard_show_override = |
| 66 keyboard::KEYBOARD_SHOW_OVERRIDE_NONE; | 61 keyboard::KEYBOARD_SHOW_OVERRIDE_NONE; |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 return media::AudioManager::Get()->HasAudioInputDevices() && | 211 return media::AudioManager::Get()->HasAudioInputDevices() && |
| 217 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 212 !base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 218 switches::kDisableVoiceInput); | 213 switches::kDisableVoiceInput); |
| 219 } | 214 } |
| 220 | 215 |
| 221 bool InsertText(const base::string16& text) { | 216 bool InsertText(const base::string16& text) { |
| 222 keyboard::KeyboardController* controller = KeyboardController::GetInstance(); | 217 keyboard::KeyboardController* controller = KeyboardController::GetInstance(); |
| 223 if (!controller) | 218 if (!controller) |
| 224 return false; | 219 return false; |
| 225 | 220 |
| 226 ui::InputMethod* input_method = controller->proxy()->GetInputMethod(); | 221 ui::InputMethod* input_method = controller->ui()->GetInputMethod(); |
| 227 if (!input_method) | 222 if (!input_method) |
| 228 return false; | 223 return false; |
| 229 | 224 |
| 230 ui::TextInputClient* tic = input_method->GetTextInputClient(); | 225 ui::TextInputClient* tic = input_method->GetTextInputClient(); |
| 231 if (!tic || tic->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) | 226 if (!tic || tic->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) |
| 232 return false; | 227 return false; |
| 233 | 228 |
| 234 tic->InsertText(text); | 229 tic->InsertText(text); |
| 235 | 230 |
| 236 return true; | 231 return true; |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 static bool logged = false; | 378 static bool logged = false; |
| 384 if (!logged) { | 379 if (!logged) { |
| 385 // Log the delta only once. | 380 // Log the delta only once. |
| 386 UMA_HISTOGRAM_TIMES( | 381 UMA_HISTOGRAM_TIMES( |
| 387 "VirtualKeyboard.FirstLoadTime", | 382 "VirtualKeyboard.FirstLoadTime", |
| 388 base::Time::Now() - g_keyboard_load_time_start.Get()); | 383 base::Time::Now() - g_keyboard_load_time_start.Get()); |
| 389 logged = true; | 384 logged = true; |
| 390 } | 385 } |
| 391 } | 386 } |
| 392 | 387 |
| 393 const GritResourceMap* GetKeyboardExtensionResources(size_t* size) { | |
| 394 // This looks a lot like the contents of a resource map; however it is | |
| 395 // necessary to have a custom path for the extension path, so the resource | |
| 396 // map cannot be used directly. | |
| 397 static const GritResourceMap kKeyboardResources[] = { | |
| 398 {"keyboard/locales/en.js", IDR_KEYBOARD_LOCALES_EN}, | |
| 399 {"keyboard/config/emoji.js", IDR_KEYBOARD_CONFIG_EMOJI}, | |
| 400 {"keyboard/config/hwt.js", IDR_KEYBOARD_CONFIG_HWT}, | |
| 401 {"keyboard/config/us.js", IDR_KEYBOARD_CONFIG_US}, | |
| 402 {"keyboard/emoji.css", IDR_KEYBOARD_CSS_EMOJI}, | |
| 403 {"keyboard/images/3dots.png", IDR_KEYBOARD_IMAGES_3_DOTS}, | |
| 404 {"keyboard/images/back_to_keyboard.png", | |
| 405 IDR_KEYBOARD_IMAGES_BACK_TO_KEYBOARD}, | |
| 406 {"keyboard/images/backspace.png", IDR_KEYBOARD_IMAGES_BACKSPACE}, | |
| 407 {"keyboard/images/car.png", IDR_KEYBOARD_IMAGES_CAR}, | |
| 408 {"keyboard/images/check.png", IDR_KEYBOARD_IMAGES_CHECK}, | |
| 409 {"keyboard/images/check_in_menu.png", IDR_KEYBOARD_IMAGES_CHECK_IN_MENU}, | |
| 410 {"keyboard/images/compact.png", IDR_KEYBOARD_IMAGES_COMPACT}, | |
| 411 {"keyboard/images/down.png", IDR_KEYBOARD_IMAGES_DOWN}, | |
| 412 {"keyboard/images/emoji.png", IDR_KEYBOARD_IMAGES_EMOJI}, | |
| 413 {"keyboard/images/emoji_car.png", IDR_KEYBOARD_IMAGES_EMOJI_CAR}, | |
| 414 {"keyboard/images/emoji_crown.png", IDR_KEYBOARD_IMAGES_EMOJI_CROWN}, | |
| 415 {"keyboard/images/emoji_emoticon.png", | |
| 416 IDR_KEYBOARD_IMAGES_EMOJI_EMOTICON}, | |
| 417 {"keyboard/images/emoji_flower.png", IDR_KEYBOARD_IMAGES_EMOJI_FLOWER}, | |
| 418 {"keyboard/images/emoji_hot.png", IDR_KEYBOARD_IMAGES_EMOJI_HOT}, | |
| 419 {"keyboard/images/emoji_recent.png", IDR_KEYBOARD_IMAGES_EMOJI_RECENT}, | |
| 420 {"keyboard/images/emoji_shape.png", IDR_KEYBOARD_IMAGES_EMOJI_SHAPE}, | |
| 421 {"keyboard/images/emoji_cat_items.png", IDR_KEYBOARD_IMAGES_CAT}, | |
| 422 {"keyboard/images/emoticon.png", IDR_KEYBOARD_IMAGES_EMOTICON}, | |
| 423 {"keyboard/images/enter.png", IDR_KEYBOARD_IMAGES_RETURN}, | |
| 424 {"keyboard/images/error.png", IDR_KEYBOARD_IMAGES_ERROR}, | |
| 425 {"keyboard/images/favorit.png", IDR_KEYBOARD_IMAGES_FAVORITE}, | |
| 426 {"keyboard/images/flower.png", IDR_KEYBOARD_IMAGES_FLOWER}, | |
| 427 {"keyboard/images/globe.png", IDR_KEYBOARD_IMAGES_GLOBE}, | |
| 428 {"keyboard/images/hide.png", IDR_KEYBOARD_IMAGES_HIDE}, | |
| 429 {"keyboard/images/hidekeyboard.png", IDR_KEYBOARD_IMAGES_HIDE_KEYBOARD}, | |
| 430 {"keyboard/images/keyboard.svg", IDR_KEYBOARD_IMAGES_KEYBOARD}, | |
| 431 {"keyboard/images/left.png", IDR_KEYBOARD_IMAGES_LEFT}, | |
| 432 {"keyboard/images/penci.png", IDR_KEYBOARD_IMAGES_PENCIL}, | |
| 433 {"keyboard/images/recent.png", IDR_KEYBOARD_IMAGES_RECENT}, | |
| 434 {"keyboard/images/regular_size.png", IDR_KEYBOARD_IMAGES_FULLSIZE}, | |
| 435 {"keyboard/images/menu.png", IDR_KEYBOARD_IMAGES_MENU}, | |
| 436 {"keyboard/images/pencil.png", IDR_KEYBOARD_IMAGES_PENCIL}, | |
| 437 {"keyboard/images/right.png", IDR_KEYBOARD_IMAGES_RIGHT}, | |
| 438 {"keyboard/images/search.png", IDR_KEYBOARD_IMAGES_SEARCH}, | |
| 439 {"keyboard/images/select_right.png", IDR_KEYBOARD_IMAGES_SELECT_RIGHT}, | |
| 440 {"keyboard/images/select_left.png", IDR_KEYBOARD_IMAGES_SELECT_LEFT}, | |
| 441 {"keyboard/images/setting.png", IDR_KEYBOARD_IMAGES_SETTINGS}, | |
| 442 {"keyboard/images/shift.png", IDR_KEYBOARD_IMAGES_SHIFT}, | |
| 443 {"keyboard/images/space.png", IDR_KEYBOARD_IMAGES_SPACE}, | |
| 444 {"keyboard/images/tab.png", IDR_KEYBOARD_IMAGES_TAB}, | |
| 445 {"keyboard/images/tab_in_fullsize.png", | |
| 446 IDR_KEYBOARD_IMAGES_TAB_IN_FULLSIZE}, | |
| 447 {"keyboard/images/triangle.png", IDR_KEYBOARD_IMAGES_TRIANGLE}, | |
| 448 {"keyboard/images/up.png", IDR_KEYBOARD_IMAGES_UP}, | |
| 449 {"keyboard/index.html", IDR_KEYBOARD_INDEX}, | |
| 450 {"keyboard/inputview_adapter.js", IDR_KEYBOARD_INPUTVIEW_ADAPTER}, | |
| 451 {"keyboard/inputview.css", IDR_KEYBOARD_INPUTVIEW_CSS}, | |
| 452 {"keyboard/inputview.js", IDR_KEYBOARD_INPUTVIEW_JS}, | |
| 453 {"keyboard/inputview_layouts/101kbd.js", IDR_KEYBOARD_LAYOUTS_101}, | |
| 454 {"keyboard/inputview_layouts/compactkbd-qwerty.js", | |
| 455 IDR_KEYBOARD_LAYOUTS_COMPACT_QWERTY}, | |
| 456 {"keyboard/inputview_layouts/compactkbd-numberpad.js", | |
| 457 IDR_KEYBOARD_LAYOUTS_COMPACT_NUMBERPAD}, | |
| 458 {"keyboard/inputview_layouts/emoji.js", IDR_KEYBOARD_LAYOUTS_EMOJI}, | |
| 459 {"keyboard/inputview_layouts/handwriting.js", IDR_KEYBOARD_LAYOUTS_HWT}, | |
| 460 {"keyboard/manifest.json", IDR_KEYBOARD_MANIFEST}, | |
| 461 {"keyboard/sounds/keypress-delete.wav", | |
| 462 IDR_KEYBOARD_SOUNDS_KEYPRESS_DELETE}, | |
| 463 {"keyboard/sounds/keypress-return.wav", | |
| 464 IDR_KEYBOARD_SOUNDS_KEYPRESS_RETURN}, | |
| 465 {"keyboard/sounds/keypress-spacebar.wav", | |
| 466 IDR_KEYBOARD_SOUNDS_KEYPRESS_SPACEBAR}, | |
| 467 {"keyboard/sounds/keypress-standard.wav", | |
| 468 IDR_KEYBOARD_SOUNDS_KEYPRESS_STANDARD}, | |
| 469 }; | |
| 470 static const size_t kKeyboardResourcesSize = arraysize(kKeyboardResources); | |
| 471 *size = kKeyboardResourcesSize; | |
| 472 return kKeyboardResources; | |
| 473 } | |
| 474 | |
| 475 void SetOverrideContentUrl(const GURL& url) { | |
| 476 g_override_content_url.Get() = url; | |
| 477 } | |
| 478 | |
| 479 const GURL& GetOverrideContentUrl() { | |
| 480 return g_override_content_url.Get(); | |
| 481 } | |
| 482 | |
| 483 void LogKeyboardControlEvent(KeyboardControlEvent event) { | 388 void LogKeyboardControlEvent(KeyboardControlEvent event) { |
| 484 UMA_HISTOGRAM_ENUMERATION( | 389 UMA_HISTOGRAM_ENUMERATION( |
| 485 "VirtualKeyboard.KeyboardControlEvent", | 390 "VirtualKeyboard.KeyboardControlEvent", |
| 486 event, | 391 event, |
| 487 keyboard::KEYBOARD_CONTROL_MAX); | 392 keyboard::KEYBOARD_CONTROL_MAX); |
| 488 } | 393 } |
| 489 | 394 |
| 490 } // namespace keyboard | 395 } // namespace keyboard |
| OLD | NEW |