Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(898)

Unified Diff: chrome/browser/chromeos/preferences.cc

Issue 10027008: chrome/browser/chromeos/input_method/ refactoring [part 5 of 6] (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/preferences.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/preferences.cc
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index 7f1dd0648fd997f7b4e8c84b5e42e19cdadeb8f1..cc4828f4cf436b0d98f25b4b3bb3537f47c85f65 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -46,14 +46,28 @@ bool IsLumpy() {
static const char kFallbackInputMethodLocale[] = "en-US";
-Preferences::Preferences() {}
+Preferences::Preferences()
+ : input_method_manager_(input_method::InputMethodManager::GetInstance()) {
+}
+
+Preferences::Preferences(input_method::InputMethodManager* input_method_manager)
+ : input_method_manager_(input_method_manager) {
+}
Preferences::~Preferences() {}
// static
void Preferences::RegisterUserPrefs(PrefService* prefs) {
- input_method::InputMethodManager* manager =
- input_method::InputMethodManager::GetInstance();
+ std::string hardware_keyboard_id;
+ // TODO(yusukes): Remove the runtime hack.
+ if (base::chromeos::IsRunningOnChromeOS()) {
+ input_method::InputMethodManager* manager =
+ input_method::InputMethodManager::GetInstance();
+ hardware_keyboard_id =
+ manager->GetInputMethodUtil()->GetHardwareInputMethodId();
+ } else {
+ hardware_keyboard_id = "xkb:us::eng"; // only for testing.
+ }
const bool enable_tap_to_click_default = IsLumpy();
prefs->RegisterBooleanPref(prefs::kTapToClickEnabled,
@@ -133,10 +147,9 @@ void Preferences::RegisterUserPrefs(PrefService* prefs) {
prefs->RegisterStringPref(prefs::kLanguagePreferredLanguages,
kFallbackInputMethodLocale,
PrefService::UNSYNCABLE_PREF);
- prefs->RegisterStringPref(
- prefs::kLanguagePreloadEngines,
- manager->GetInputMethodUtil()->GetHardwareInputMethodId(),
- PrefService::UNSYNCABLE_PREF);
+ prefs->RegisterStringPref(prefs::kLanguagePreloadEngines,
+ hardware_keyboard_id,
+ PrefService::UNSYNCABLE_PREF);
for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) {
prefs->RegisterBooleanPref(
language_prefs::kChewingBooleanPrefs[i].pref_name,
@@ -251,7 +264,7 @@ void Preferences::RegisterUserPrefs(PrefService* prefs) {
PrefService::UNSYNCABLE_PREF);
}
-void Preferences::Init(PrefService* prefs) {
+void Preferences::InitUserPrefs(PrefService* prefs) {
tap_to_click_enabled_.Init(prefs::kTapToClickEnabled, prefs, this);
natural_scroll_.Init(prefs::kNaturalScroll, prefs, this);
accessibility_enabled_.Init(prefs::kSpokenFeedbackEnabled, prefs, this);
@@ -328,6 +341,10 @@ void Preferences::Init(PrefService* prefs) {
prefs::kLanguageXkbAutoRepeatInterval, prefs, this);
enable_screen_lock_.Init(prefs::kEnableScreenLock, prefs, this);
+}
+
+void Preferences::Init(PrefService* prefs) {
+ InitUserPrefs(prefs);
// Initialize preferences to currently saved state.
NotifyPrefChanged(NULL);
@@ -342,6 +359,14 @@ void Preferences::Init(PrefService* prefs) {
}
}
+void Preferences::InitUserPrefsForTesting(PrefService* prefs) {
+ InitUserPrefs(prefs);
+}
+
+void Preferences::SetInputMethodListForTesting() {
+ SetInputMethodList();
+}
+
void Preferences::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
@@ -433,29 +458,16 @@ void Preferences::NotifyPrefChanged(const std::string* pref_name) {
UpdateAutoRepeatRate();
}
- if (!pref_name || *pref_name == prefs::kLanguagePreloadEngines) {
+ if (!pref_name) {
+ SetInputMethodList();
+ } else if (*pref_name == prefs::kLanguagePreloadEngines) {
SetLanguageConfigStringListAsCSV(language_prefs::kGeneralSectionName,
language_prefs::kPreloadEnginesConfigName,
preload_engines_.GetValue());
}
- // Do not check |*pref_name| for the two prefs. We're only interested in
- // initial values of the prefs.
- if (!pref_name) {
- const std::string previous_input_method_id =
- previous_input_method_.GetValue();
- const std::string current_input_method_id =
- current_input_method_.GetValue();
- // NOTICE: ChangeInputMethod() has to be called AFTER the value of
- // |preload_engines_| is sent to the InputMethodManager. Otherwise, the
- // ChangeInputMethod request might be ignored as an invalid input method ID.
- input_method::InputMethodManager* manager =
- input_method::InputMethodManager::GetInstance();
- if (!previous_input_method_id.empty())
- manager->ChangeInputMethod(previous_input_method_id);
- if (!current_input_method_id.empty())
- manager->ChangeInputMethod(current_input_method_id);
- }
+ // Do not check |*pref_name| of the prefs for remembering current/previous
+ // input methods here. We're only interested in initial values of the prefs.
for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) {
if (!pref_name ||
@@ -569,8 +581,7 @@ void Preferences::SetLanguageConfigBoolean(const char* section,
input_method::InputMethodConfigValue config;
config.type = input_method::InputMethodConfigValue::kValueTypeBool;
config.bool_value = value;
- input_method::InputMethodManager::GetInstance()->
- SetInputMethodConfig(section, name, config);
+ input_method_manager_->SetInputMethodConfig(section, name, config);
}
void Preferences::SetLanguageConfigInteger(const char* section,
@@ -579,8 +590,7 @@ void Preferences::SetLanguageConfigInteger(const char* section,
input_method::InputMethodConfigValue config;
config.type = input_method::InputMethodConfigValue::kValueTypeInt;
config.int_value = value;
- input_method::InputMethodManager::GetInstance()->
- SetInputMethodConfig(section, name, config);
+ input_method_manager_->SetInputMethodConfig(section, name, config);
}
void Preferences::SetLanguageConfigString(const char* section,
@@ -589,8 +599,7 @@ void Preferences::SetLanguageConfigString(const char* section,
input_method::InputMethodConfigValue config;
config.type = input_method::InputMethodConfigValue::kValueTypeString;
config.string_value = value;
- input_method::InputMethodManager::GetInstance()->
- SetInputMethodConfig(section, name, config);
+ input_method_manager_->SetInputMethodConfig(section, name, config);
}
void Preferences::SetLanguageConfigStringList(
@@ -602,8 +611,7 @@ void Preferences::SetLanguageConfigStringList(
for (size_t i = 0; i < values.size(); ++i)
config.string_list_value.push_back(values[i]);
- input_method::InputMethodManager::GetInstance()->
- SetInputMethodConfig(section, name, config);
+ input_method_manager_->SetInputMethodConfig(section, name, config);
}
void Preferences::SetLanguageConfigStringListAsCSV(const char* section,
@@ -620,6 +628,31 @@ void Preferences::SetLanguageConfigStringListAsCSV(const char* section,
SetLanguageConfigStringList(section, name, split_values);
}
+void Preferences::SetInputMethodList() {
+ // When |preload_engines_| are set, InputMethodManager::ChangeInputMethod()
+ // might be called to change the current input method to the first one in the
+ // |preload_engines_| list. This also updates previous/current input method
+ // prefs. That's why GetValue() calls are placed before the
+ // SetLanguageConfigStringListAsCSV() call below.
+ const std::string previous_input_method_id =
+ previous_input_method_.GetValue();
+ const std::string current_input_method_id = current_input_method_.GetValue();
+ SetLanguageConfigStringListAsCSV(language_prefs::kGeneralSectionName,
+ language_prefs::kPreloadEnginesConfigName,
+ preload_engines_.GetValue());
+
+ // ChangeInputMethod() has to be called AFTER the value of |preload_engines_|
+ // is sent to the InputMethodManager. Otherwise, the ChangeInputMethod request
+ // might be ignored as an invalid input method ID. The ChangeInputMethod()
+ // calls are also necessary to restore the previous/current input method prefs
+ // which could have been modified by the SetLanguageConfigStringListAsCSV call
+ // above to the original state.
+ if (!previous_input_method_id.empty())
+ input_method_manager_->ChangeInputMethod(previous_input_method_id);
+ if (!current_input_method_id.empty())
+ input_method_manager_->ChangeInputMethod(current_input_method_id);
+}
+
void Preferences::UpdateModifierKeyMapping() {
const int search_remap = xkb_remap_search_key_to_.GetValue();
const int control_remap = xkb_remap_control_key_to_.GetValue();
@@ -641,8 +674,7 @@ void Preferences::UpdateModifierKeyMapping() {
input_method::ModifierKeyPair(
input_method::kLeftAltKey,
input_method::ModifierKey(alt_remap)));
- input_method::InputMethodManager::GetInstance()->GetXKeyboard()->
- RemapModifierKeys(modifier_map);
+ input_method_manager_->GetXKeyboard()->RemapModifierKeys(modifier_map);
} else {
LOG(ERROR) << "Failed to remap modifier keys. Unexpected value(s): "
<< search_remap << ", " << control_remap << ", " << alt_remap;
« no previous file with comments | « chrome/browser/chromeos/preferences.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698