blob: 30251b042a771a189f5432f174c3dd2c306eb3d2 [file] [log] [blame]
[email protected]fecc1522009-10-15 21:08:291// Copyright (c) 2009 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/chromeos/preferences.h"
6
7#include "base/string_util.h"
[email protected]50951432010-03-31 12:12:428#include "base/utf_string_conversions.h"
[email protected]62c7ef32010-03-23 23:44:249#include "chrome/browser/chromeos/cros/cros_library.h"
[email protected]291d8b72010-06-21 09:43:1410#include "chrome/browser/chromeos/cros/input_method_library.h"
[email protected]268b02f2010-02-04 21:07:1511#include "chrome/browser/chromeos/cros/synaptics_library.h"
[email protected]052313b2010-02-19 09:43:0812#include "chrome/browser/pref_member.h"
13#include "chrome/browser/pref_service.h"
[email protected]fecc1522009-10-15 21:08:2914#include "chrome/common/notification_service.h"
[email protected]fecc1522009-10-15 21:08:2915#include "chrome/common/pref_names.h"
[email protected]fecc1522009-10-15 21:08:2916#include "unicode/timezone.h"
17
18namespace chromeos {
19
20// static
21void Preferences::RegisterUserPrefs(PrefService* prefs) {
[email protected]20ce516d2010-06-18 02:20:0422 prefs->RegisterStringPref(prefs::kTimeZone, "US/Pacific");
[email protected]fecc1522009-10-15 21:08:2923 prefs->RegisterBooleanPref(prefs::kTapToClickEnabled, false);
[email protected]fe23d5a32010-05-28 02:43:0424 prefs->RegisterBooleanPref(prefs::kAccessibilityEnabled, false);
[email protected]fecc1522009-10-15 21:08:2925 prefs->RegisterBooleanPref(prefs::kVertEdgeScrollEnabled, false);
[email protected]539d8f82010-05-27 14:52:1126 prefs->RegisterIntegerPref(prefs::kTouchpadSpeedFactor, 9);
[email protected]fecc1522009-10-15 21:08:2927 prefs->RegisterIntegerPref(prefs::kTouchpadSensitivity, 5);
[email protected]20ce516d2010-06-18 02:20:0428 prefs->RegisterStringPref(prefs::kLanguageCurrentInputMethod, "");
29 prefs->RegisterStringPref(prefs::kLanguagePreviousInputMethod, "");
[email protected]3b02de292010-05-13 06:05:0530 prefs->RegisterStringPref(prefs::kLanguageHotkeyNextEngineInMenu,
31 kHotkeyNextEngineInMenu);
32 prefs->RegisterStringPref(prefs::kLanguageHotkeyPreviousEngine,
33 kHotkeyPreviousEngine);
[email protected]70aa5b32010-04-05 08:30:3434 prefs->RegisterStringPref(prefs::kLanguagePreloadEngines,
[email protected]20ce516d2010-06-18 02:20:0435 kFallbackInputMethodId); // EN layout
[email protected]525dbe22010-06-01 07:05:4336 for (size_t i = 0; i < kNumChewingBooleanPrefs; ++i) {
37 prefs->RegisterBooleanPref(kChewingBooleanPrefs[i].pref_name,
38 kChewingBooleanPrefs[i].default_pref_value);
39 }
40 for (size_t i = 0; i < kNumChewingMultipleChoicePrefs; ++i) {
41 prefs->RegisterStringPref(
42 kChewingMultipleChoicePrefs[i].pref_name,
[email protected]20ce516d2010-06-18 02:20:0443 kChewingMultipleChoicePrefs[i].default_pref_value);
[email protected]525dbe22010-06-01 07:05:4344 }
[email protected]7ac5af92010-06-07 01:25:4445 prefs->RegisterIntegerPref(kChewingHsuSelKeyType.pref_name,
46 kChewingHsuSelKeyType.default_pref_value);
47
[email protected]15c53082010-06-03 03:28:2148 for (size_t i = 0; i < kNumChewingIntegerPrefs; ++i) {
49 prefs->RegisterIntegerPref(kChewingIntegerPrefs[i].pref_name,
50 kChewingIntegerPrefs[i].default_pref_value);
51 }
[email protected]20ce516d2010-06-18 02:20:0452 prefs->RegisterStringPref(
53 prefs::kLanguageHangulKeyboard,
[email protected]ddd231e2010-06-29 20:35:1954 kHangulKeyboardNameIDPairs[0].keyboard_id);
[email protected]594b8f52010-04-27 18:10:3055 for (size_t i = 0; i < kNumPinyinBooleanPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:2856 prefs->RegisterBooleanPref(kPinyinBooleanPrefs[i].pref_name,
[email protected]6e5c4b82010-05-24 08:18:4457 kPinyinBooleanPrefs[i].default_pref_value);
[email protected]9040ad22010-04-22 04:29:2858 }
[email protected]594b8f52010-04-27 18:10:3059 for (size_t i = 0; i < kNumPinyinIntegerPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:2860 prefs->RegisterIntegerPref(kPinyinIntegerPrefs[i].pref_name,
[email protected]6e5c4b82010-05-24 08:18:4461 kPinyinIntegerPrefs[i].default_pref_value);
62 }
[email protected]7ac5af92010-06-07 01:25:4463 prefs->RegisterIntegerPref(kPinyinDoublePinyinSchema.pref_name,
64 kPinyinDoublePinyinSchema.default_pref_value);
65
[email protected]8a1ace22010-06-10 05:38:2566 for (size_t i = 0; i < kNumMozcBooleanPrefs; ++i) {
67 prefs->RegisterBooleanPref(kMozcBooleanPrefs[i].pref_name,
68 kMozcBooleanPrefs[i].default_pref_value);
69 }
[email protected]6e5c4b82010-05-24 08:18:4470 for (size_t i = 0; i < kNumMozcMultipleChoicePrefs; ++i) {
[email protected]7ac5af92010-06-07 01:25:4471 prefs->RegisterStringPref(
72 kMozcMultipleChoicePrefs[i].pref_name,
[email protected]20ce516d2010-06-18 02:20:0473 kMozcMultipleChoicePrefs[i].default_pref_value);
[email protected]9040ad22010-04-22 04:29:2874 }
[email protected]54037462010-06-22 02:06:2375 for (size_t i = 0; i < kNumMozcIntegerPrefs; ++i) {
76 prefs->RegisterIntegerPref(kMozcIntegerPrefs[i].pref_name,
77 kMozcIntegerPrefs[i].default_pref_value);
78 }
[email protected]fecc1522009-10-15 21:08:2979}
80
81void Preferences::Init(PrefService* prefs) {
82 timezone_.Init(prefs::kTimeZone, prefs, this);
83 tap_to_click_enabled_.Init(prefs::kTapToClickEnabled, prefs, this);
[email protected]fe23d5a32010-05-28 02:43:0484 accessibility_enabled_.Init(prefs::kAccessibilityEnabled, prefs, this);
[email protected]fecc1522009-10-15 21:08:2985 vert_edge_scroll_enabled_.Init(prefs::kVertEdgeScrollEnabled, prefs, this);
86 speed_factor_.Init(prefs::kTouchpadSpeedFactor, prefs, this);
87 sensitivity_.Init(prefs::kTouchpadSensitivity, prefs, this);
[email protected]3b02de292010-05-13 06:05:0588 language_hotkey_next_engine_in_menu_.Init(
89 prefs::kLanguageHotkeyNextEngineInMenu, prefs, this);
90 language_hotkey_previous_engine_.Init(
91 prefs::kLanguageHotkeyPreviousEngine, prefs, this);
[email protected]70aa5b32010-04-05 08:30:3492 language_preload_engines_.Init(prefs::kLanguagePreloadEngines, prefs, this);
[email protected]525dbe22010-06-01 07:05:4393 for (size_t i = 0; i < kNumChewingBooleanPrefs; ++i) {
94 language_chewing_boolean_prefs_[i].Init(
95 kChewingBooleanPrefs[i].pref_name, prefs, this);
96 }
97 for (size_t i = 0; i < kNumChewingMultipleChoicePrefs; ++i) {
98 language_chewing_multiple_choice_prefs_[i].Init(
99 kChewingMultipleChoicePrefs[i].pref_name, prefs, this);
100 }
[email protected]7ac5af92010-06-07 01:25:44101 language_chewing_hsu_sel_key_type_.Init(
102 kChewingHsuSelKeyType.pref_name, prefs, this);
[email protected]15c53082010-06-03 03:28:21103 for (size_t i = 0; i < kNumChewingIntegerPrefs; ++i) {
104 language_chewing_integer_prefs_[i].Init(
105 kChewingIntegerPrefs[i].pref_name, prefs, this);
106 }
[email protected]50951432010-03-31 12:12:42107 language_hangul_keyboard_.Init(prefs::kLanguageHangulKeyboard, prefs, this);
[email protected]594b8f52010-04-27 18:10:30108 for (size_t i = 0; i < kNumPinyinBooleanPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28109 language_pinyin_boolean_prefs_[i].Init(
110 kPinyinBooleanPrefs[i].pref_name, prefs, this);
111 }
[email protected]594b8f52010-04-27 18:10:30112 for (size_t i = 0; i < kNumPinyinIntegerPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28113 language_pinyin_int_prefs_[i].Init(
114 kPinyinIntegerPrefs[i].pref_name, prefs, this);
115 }
[email protected]7ac5af92010-06-07 01:25:44116 language_pinyin_double_pinyin_schema_.Init(
117 kPinyinDoublePinyinSchema.pref_name, prefs, this);
[email protected]8a1ace22010-06-10 05:38:25118 for (size_t i = 0; i < kNumMozcBooleanPrefs; ++i) {
119 language_mozc_boolean_prefs_[i].Init(
120 kMozcBooleanPrefs[i].pref_name, prefs, this);
121 }
[email protected]6e5c4b82010-05-24 08:18:44122 for (size_t i = 0; i < kNumMozcMultipleChoicePrefs; ++i) {
123 language_mozc_multiple_choice_prefs_[i].Init(
124 kMozcMultipleChoicePrefs[i].pref_name, prefs, this);
125 }
[email protected]54037462010-06-22 02:06:23126 for (size_t i = 0; i < kNumMozcIntegerPrefs; ++i) {
127 language_mozc_integer_prefs_[i].Init(
128 kMozcIntegerPrefs[i].pref_name, prefs, this);
129 }
[email protected]fecc1522009-10-15 21:08:29130
131 // Initialize touchpad settings to what's saved in user preferences.
132 NotifyPrefChanged(NULL);
133}
134
135void Preferences::Observe(NotificationType type,
[email protected]50951432010-03-31 12:12:42136 const NotificationSource& source,
137 const NotificationDetails& details) {
[email protected]fecc1522009-10-15 21:08:29138 if (type == NotificationType::PREF_CHANGED)
139 NotifyPrefChanged(Details<std::wstring>(details).ptr());
140}
141
142void Preferences::NotifyPrefChanged(const std::wstring* pref_name) {
143 if (!pref_name || *pref_name == prefs::kTimeZone)
144 SetTimeZone(timezone_.GetValue());
[email protected]3b02de292010-05-13 06:05:05145 if (!pref_name || *pref_name == prefs::kTapToClickEnabled) {
[email protected]62c7ef32010-03-23 23:44:24146 CrosLibrary::Get()->GetSynapticsLibrary()->SetBoolParameter(
147 PARAM_BOOL_TAP_TO_CLICK,
[email protected]c31b3c722009-10-21 20:01:35148 tap_to_click_enabled_.GetValue());
[email protected]3b02de292010-05-13 06:05:05149 }
150 if (!pref_name || *pref_name == prefs::kVertEdgeScrollEnabled) {
[email protected]62c7ef32010-03-23 23:44:24151 CrosLibrary::Get()->GetSynapticsLibrary()->SetBoolParameter(
[email protected]c31b3c722009-10-21 20:01:35152 PARAM_BOOL_VERTICAL_EDGE_SCROLLING,
153 vert_edge_scroll_enabled_.GetValue());
[email protected]3b02de292010-05-13 06:05:05154 }
155 if (!pref_name || *pref_name == prefs::kTouchpadSpeedFactor) {
[email protected]62c7ef32010-03-23 23:44:24156 CrosLibrary::Get()->GetSynapticsLibrary()->SetRangeParameter(
157 PARAM_RANGE_SPEED_SENSITIVITY,
158 speed_factor_.GetValue());
[email protected]3b02de292010-05-13 06:05:05159 }
160 if (!pref_name || *pref_name == prefs::kTouchpadSensitivity) {
[email protected]62c7ef32010-03-23 23:44:24161 CrosLibrary::Get()->GetSynapticsLibrary()->SetRangeParameter(
162 PARAM_RANGE_TOUCH_SENSITIVITY,
163 sensitivity_.GetValue());
[email protected]3b02de292010-05-13 06:05:05164 }
[email protected]8be9ff22010-06-08 02:13:54165
166 // We don't handle prefs::kLanguageCurrentInputMethod and PreviousInputMethod
167 // here.
168
[email protected]3b02de292010-05-13 06:05:05169 if (!pref_name || *pref_name == prefs::kLanguageHotkeyNextEngineInMenu) {
[email protected]ddd231e2010-06-29 20:35:19170 SetLanguageConfigStringListAsCSV(
171 kHotKeySectionName,
172 kNextEngineInMenuConfigName,
173 language_hotkey_next_engine_in_menu_.GetValue());
[email protected]3b02de292010-05-13 06:05:05174 }
175 if (!pref_name || *pref_name == prefs::kLanguageHotkeyPreviousEngine) {
[email protected]ddd231e2010-06-29 20:35:19176 SetLanguageConfigStringListAsCSV(
177 kHotKeySectionName,
178 kPreviousEngineConfigName,
179 language_hotkey_previous_engine_.GetValue());
[email protected]3b02de292010-05-13 06:05:05180 }
181 if (!pref_name || *pref_name == prefs::kLanguagePreloadEngines) {
[email protected]d01bb8072010-04-12 13:00:15182 SetLanguageConfigStringListAsCSV(kGeneralSectionName,
183 kPreloadEnginesConfigName,
184 language_preload_engines_.GetValue());
[email protected]3b02de292010-05-13 06:05:05185 }
[email protected]525dbe22010-06-01 07:05:43186 for (size_t i = 0; i < kNumChewingBooleanPrefs; ++i) {
187 if (!pref_name || *pref_name == kChewingBooleanPrefs[i].pref_name) {
188 SetLanguageConfigBoolean(kChewingSectionName,
189 kChewingBooleanPrefs[i].ibus_config_name,
190 language_chewing_boolean_prefs_[i].GetValue());
191 }
192 }
193 for (size_t i = 0; i < kNumChewingMultipleChoicePrefs; ++i) {
194 if (!pref_name || *pref_name == kChewingMultipleChoicePrefs[i].pref_name) {
195 SetLanguageConfigString(
196 kChewingSectionName,
197 kChewingMultipleChoicePrefs[i].ibus_config_name,
198 language_chewing_multiple_choice_prefs_[i].GetValue());
199 }
200 }
[email protected]7ac5af92010-06-07 01:25:44201 if (!pref_name || *pref_name == kChewingHsuSelKeyType.pref_name) {
202 SetLanguageConfigInteger(
203 kChewingSectionName,
204 kChewingHsuSelKeyType.ibus_config_name,
205 language_chewing_hsu_sel_key_type_.GetValue());
206 }
[email protected]15c53082010-06-03 03:28:21207 for (size_t i = 0; i < kNumChewingIntegerPrefs; ++i) {
208 if (!pref_name || *pref_name == kChewingIntegerPrefs[i].pref_name) {
209 SetLanguageConfigInteger(kChewingSectionName,
210 kChewingIntegerPrefs[i].ibus_config_name,
211 language_chewing_integer_prefs_[i].GetValue());
212 }
213 }
[email protected]3b02de292010-05-13 06:05:05214 if (!pref_name || *pref_name == prefs::kLanguageHangulKeyboard) {
[email protected]50951432010-03-31 12:12:42215 SetLanguageConfigString(kHangulSectionName, kHangulKeyboardConfigName,
216 language_hangul_keyboard_.GetValue());
[email protected]3b02de292010-05-13 06:05:05217 }
[email protected]594b8f52010-04-27 18:10:30218 for (size_t i = 0; i < kNumPinyinBooleanPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28219 if (!pref_name || *pref_name == kPinyinBooleanPrefs[i].pref_name) {
220 SetLanguageConfigBoolean(kPinyinSectionName,
221 kPinyinBooleanPrefs[i].ibus_config_name,
222 language_pinyin_boolean_prefs_[i].GetValue());
223 }
224 }
[email protected]594b8f52010-04-27 18:10:30225 for (size_t i = 0; i < kNumPinyinIntegerPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28226 if (!pref_name || *pref_name == kPinyinIntegerPrefs[i].pref_name) {
227 SetLanguageConfigInteger(kPinyinSectionName,
228 kPinyinIntegerPrefs[i].ibus_config_name,
229 language_pinyin_int_prefs_[i].GetValue());
230 }
231 }
[email protected]7ac5af92010-06-07 01:25:44232 if (!pref_name || *pref_name == kPinyinDoublePinyinSchema.pref_name) {
233 SetLanguageConfigInteger(
234 kPinyinSectionName,
235 kPinyinDoublePinyinSchema.ibus_config_name,
236 language_pinyin_double_pinyin_schema_.GetValue());
237 }
[email protected]8a1ace22010-06-10 05:38:25238 for (size_t i = 0; i < kNumMozcBooleanPrefs; ++i) {
239 if (!pref_name || *pref_name == kMozcBooleanPrefs[i].pref_name) {
240 SetLanguageConfigBoolean(kMozcSectionName,
241 kMozcBooleanPrefs[i].ibus_config_name,
242 language_mozc_boolean_prefs_[i].GetValue());
243 }
244 }
[email protected]6e5c4b82010-05-24 08:18:44245 for (size_t i = 0; i < kNumMozcMultipleChoicePrefs; ++i) {
246 if (!pref_name || *pref_name == kMozcMultipleChoicePrefs[i].pref_name) {
247 SetLanguageConfigString(
248 kMozcSectionName,
249 kMozcMultipleChoicePrefs[i].ibus_config_name,
250 language_mozc_multiple_choice_prefs_[i].GetValue());
251 }
252 }
[email protected]54037462010-06-22 02:06:23253 for (size_t i = 0; i < kNumMozcIntegerPrefs; ++i) {
254 if (!pref_name || *pref_name == kMozcIntegerPrefs[i].pref_name) {
255 SetLanguageConfigInteger(kMozcSectionName,
256 kMozcIntegerPrefs[i].ibus_config_name,
257 language_mozc_integer_prefs_[i].GetValue());
258 }
259 }
[email protected]fecc1522009-10-15 21:08:29260}
261
[email protected]ddd231e2010-06-29 20:35:19262void Preferences::SetTimeZone(const std::string& id) {
[email protected]fecc1522009-10-15 21:08:29263 icu::TimeZone* timezone = icu::TimeZone::createTimeZone(
[email protected]ddd231e2010-06-29 20:35:19264 icu::UnicodeString::fromUTF8(id));
[email protected]fecc1522009-10-15 21:08:29265 icu::TimeZone::adoptDefault(timezone);
266}
267
[email protected]70aa5b32010-04-05 08:30:34268void Preferences::SetLanguageConfigBoolean(const char* section,
269 const char* name,
270 bool value) {
271 ImeConfigValue config;
272 config.type = ImeConfigValue::kValueTypeBool;
273 config.bool_value = value;
[email protected]60b07682010-06-17 08:45:28274 CrosLibrary::Get()->GetInputMethodLibrary()->
275 SetImeConfig(section, name, config);
[email protected]70aa5b32010-04-05 08:30:34276}
277
[email protected]9040ad22010-04-22 04:29:28278void Preferences::SetLanguageConfigInteger(const char* section,
279 const char* name,
280 int value) {
281 ImeConfigValue config;
282 config.type = ImeConfigValue::kValueTypeInt;
283 config.int_value = value;
[email protected]60b07682010-06-17 08:45:28284 CrosLibrary::Get()->GetInputMethodLibrary()->
285 SetImeConfig(section, name, config);
[email protected]9040ad22010-04-22 04:29:28286}
287
[email protected]50951432010-03-31 12:12:42288void Preferences::SetLanguageConfigString(const char* section,
289 const char* name,
[email protected]ddd231e2010-06-29 20:35:19290 const std::string& value) {
[email protected]50951432010-03-31 12:12:42291 ImeConfigValue config;
292 config.type = ImeConfigValue::kValueTypeString;
[email protected]ddd231e2010-06-29 20:35:19293 config.string_value = value;
[email protected]60b07682010-06-17 08:45:28294 CrosLibrary::Get()->GetInputMethodLibrary()->
295 SetImeConfig(section, name, config);
[email protected]50951432010-03-31 12:12:42296}
297
[email protected]2c25ddfd2010-04-09 10:35:55298void Preferences::SetLanguageConfigStringList(
299 const char* section,
300 const char* name,
[email protected]ddd231e2010-06-29 20:35:19301 const std::vector<std::string>& values) {
[email protected]2c25ddfd2010-04-09 10:35:55302 ImeConfigValue config;
303 config.type = ImeConfigValue::kValueTypeStringList;
[email protected]ddd231e2010-06-29 20:35:19304 for (size_t i = 0; i < values.size(); ++i)
305 config.string_list_value.push_back(values[i]);
306
[email protected]60b07682010-06-17 08:45:28307 CrosLibrary::Get()->GetInputMethodLibrary()->
308 SetImeConfig(section, name, config);
[email protected]2c25ddfd2010-04-09 10:35:55309}
310
[email protected]d01bb8072010-04-12 13:00:15311void Preferences::SetLanguageConfigStringListAsCSV(const char* section,
312 const char* name,
[email protected]ddd231e2010-06-29 20:35:19313 const std::string& value) {
[email protected]d01bb8072010-04-12 13:00:15314 LOG(INFO) << "Setting " << name << " to '" << value << "'";
315
[email protected]ddd231e2010-06-29 20:35:19316 std::vector<std::string> split_values;
317 if (!value.empty())
318 SplitString(value, ',', &split_values);
319
[email protected]2c25ddfd2010-04-09 10:35:55320 // We should call the cros API even when |value| is empty, to disable default
[email protected]d01bb8072010-04-12 13:00:15321 // config.
322 SetLanguageConfigStringList(section, name, split_values);
[email protected]70aa5b32010-04-05 08:30:34323}
324
[email protected]fecc1522009-10-15 21:08:29325} // namespace chromeos