Home | History | Annotate | Download | only in chromeos
      1 // Copyright (c) 2012 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 #include "chrome/browser/ui/webui/options/chromeos/keyboard_handler.h"
      6 
      7 #include "ash/new_window_delegate.h"
      8 #include "ash/shell.h"
      9 #include "base/bind.h"
     10 #include "base/bind_helpers.h"
     11 #include "base/command_line.h"
     12 #include "base/values.h"
     13 #include "chrome/grit/generated_resources.h"
     14 #include "chromeos/chromeos_switches.h"
     15 #include "chromeos/ime/ime_keyboard.h"
     16 #include "content/public/browser/web_ui.h"
     17 #include "ui/base/l10n/l10n_util.h"
     18 
     19 namespace {
     20 const struct ModifierKeysSelectItem {
     21   int message_id;
     22   chromeos::input_method::ModifierKey value;
     23 } kModifierKeysSelectItems[] = {
     24   { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_SEARCH,
     25     chromeos::input_method::kSearchKey },
     26   { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_CTRL,
     27     chromeos::input_method::kControlKey },
     28   { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_ALT,
     29     chromeos::input_method::kAltKey },
     30   { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_VOID,
     31     chromeos::input_method::kVoidKey },
     32   { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_CAPS_LOCK,
     33     chromeos::input_method::kCapsLockKey },
     34   { IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_ESCAPE,
     35     chromeos::input_method::kEscapeKey },
     36 };
     37 
     38 const char* kDataValuesNames[] = {
     39   "remapSearchKeyToValue",
     40   "remapControlKeyToValue",
     41   "remapAltKeyToValue",
     42   "remapCapsLockKeyToValue",
     43   "remapDiamondKeyToValue",
     44 };
     45 }  // namespace
     46 
     47 namespace chromeos {
     48 namespace options {
     49 
     50 KeyboardHandler::KeyboardHandler() {
     51 }
     52 
     53 KeyboardHandler::~KeyboardHandler() {
     54 }
     55 
     56 void KeyboardHandler::GetLocalizedValues(
     57     base::DictionaryValue* localized_strings) {
     58   DCHECK(localized_strings);
     59   RegisterTitle(localized_strings, "keyboardOverlay",
     60                 IDS_OPTIONS_KEYBOARD_OVERLAY_TITLE);
     61 
     62   localized_strings->SetString("remapSearchKeyToContent",
     63       l10n_util::GetStringUTF16(
     64           IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_SEARCH_LABEL));
     65   localized_strings->SetString("remapControlKeyToContent",
     66       l10n_util::GetStringUTF16(
     67           IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_CTRL_LABEL));
     68   localized_strings->SetString("remapAltKeyToContent",
     69       l10n_util::GetStringUTF16(
     70           IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_LEFT_ALT_LABEL));
     71   localized_strings->SetString("remapCapsLockKeyToContent",
     72       l10n_util::GetStringUTF16(
     73           IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_CAPS_LOCK_LABEL));
     74   localized_strings->SetString("remapDiamondKeyToContent",
     75       l10n_util::GetStringUTF16(
     76           IDS_OPTIONS_SETTINGS_LANGUAGES_KEY_DIAMOND_KEY_LABEL));
     77   localized_strings->SetString("sendFunctionKeys",
     78       l10n_util::GetStringUTF16(
     79           IDS_OPTIONS_SETTINGS_LANGUAGES_SEND_FUNCTION_KEYS));
     80   localized_strings->SetString("sendFunctionKeysDescription",
     81       l10n_util::GetStringUTF16(
     82           IDS_OPTIONS_SETTINGS_LANGUAGES_SEND_FUNCTION_KEYS_DESCRIPTION));
     83   localized_strings->SetString("enableAutoRepeat",
     84       l10n_util::GetStringUTF16(
     85           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_ENABLE));
     86   localized_strings->SetString("autoRepeatDelay",
     87       l10n_util::GetStringUTF16(
     88           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_DELAY));
     89   localized_strings->SetString("autoRepeatDelayLong",
     90       l10n_util::GetStringUTF16(
     91           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_DELAY_LONG));
     92   localized_strings->SetString("autoRepeatDelayShort",
     93       l10n_util::GetStringUTF16(
     94           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_DELAY_SHORT));
     95   localized_strings->SetString("autoRepeatRate",
     96       l10n_util::GetStringUTF16(
     97           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_RATE));
     98   localized_strings->SetString("autoRepeatRateSlow",
     99       l10n_util::GetStringUTF16(
    100           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_RATE_SLOW));
    101   localized_strings->SetString("autoRepeatRateFast",
    102       l10n_util::GetStringUTF16(
    103           IDS_OPTIONS_SETTINGS_LANGUAGES_AUTO_REPEAT_RATE_FAST));
    104   localized_strings->SetString("changeLanguageAndInputSettings",
    105       l10n_util::GetStringUTF16(
    106           IDS_OPTIONS_SETTINGS_CHANGE_LANGUAGE_AND_INPUT_SETTINGS));
    107   localized_strings->SetString("showKeyboardShortcuts",
    108       l10n_util::GetStringUTF16(
    109           IDS_OPTIONS_SETTINGS_SHOW_KEYBOARD_SHORTCUTS));
    110 
    111   for (size_t i = 0; i < arraysize(kDataValuesNames); ++i) {
    112     base::ListValue* list_value = new base::ListValue();
    113     for (size_t j = 0; j < arraysize(kModifierKeysSelectItems); ++j) {
    114       const input_method::ModifierKey value =
    115           kModifierKeysSelectItems[j].value;
    116       const int message_id = kModifierKeysSelectItems[j].message_id;
    117       // Only the seach key can be remapped to the caps lock key.
    118       if (kDataValuesNames[i] != std::string("remapSearchKeyToValue") &&
    119           kDataValuesNames[i] != std::string("remapCapsLockKeyToValue") &&
    120           value == input_method::kCapsLockKey) {
    121         continue;
    122       }
    123       base::ListValue* option = new base::ListValue();
    124       option->Append(new base::FundamentalValue(value));
    125       option->Append(new base::StringValue(l10n_util::GetStringUTF16(
    126           message_id)));
    127       list_value->Append(option);
    128     }
    129     localized_strings->Set(kDataValuesNames[i], list_value);
    130   }
    131 }
    132 
    133 void KeyboardHandler::InitializePage() {
    134   bool chromeos_keyboard = CommandLine::ForCurrentProcess()->HasSwitch(
    135       chromeos::switches::kHasChromeOSKeyboard);
    136   const base::FundamentalValue show_caps_lock_options(!chromeos_keyboard);
    137 
    138   bool has_diamond_key = CommandLine::ForCurrentProcess()->HasSwitch(
    139       chromeos::switches::kHasChromeOSDiamondKey);
    140   const base::FundamentalValue show_diamond_key_options(has_diamond_key);
    141 
    142   web_ui()->CallJavascriptFunction(
    143       "options.KeyboardOverlay.showCapsLockOptions",
    144       show_caps_lock_options);
    145   web_ui()->CallJavascriptFunction(
    146       "options.KeyboardOverlay.showDiamondKeyOptions",
    147       show_diamond_key_options);
    148 }
    149 
    150 void KeyboardHandler::RegisterMessages() {
    151   // Callback to show keyboard overlay.
    152   web_ui()->RegisterMessageCallback(
    153       "showKeyboardShortcuts",
    154       base::Bind(&KeyboardHandler::HandleShowKeyboardShortcuts,
    155                  base::Unretained(this)));
    156 }
    157 
    158 void KeyboardHandler::HandleShowKeyboardShortcuts(const base::ListValue* args) {
    159 #if defined(USE_ATHENA)
    160   // Athena doesn't have ash::Shell and its new_window_delegate so keyboard
    161   // shortcut overlays are not supported.
    162   // TODO(mukai): re-enable this.
    163   ash::Shell::GetInstance()->new_window_delegate()->ShowKeyboardOverlay();
    164 #endif
    165 }
    166 
    167 }  // namespace options
    168 }  // namespace chromeos
    169