blob: 0cee1dce579a7debb3a117515399094709a27681 [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]50951432010-03-31 12:12:4210#include "chrome/browser/chromeos/cros/language_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) {
22 prefs->RegisterStringPref(prefs::kTimeZone, L"US/Pacific");
23 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]8be9ff22010-06-08 02:13:5428 prefs->RegisterStringPref(prefs::kLanguageCurrentInputMethod, L"");
29 prefs->RegisterStringPref(prefs::kLanguagePreviousInputMethod, L"");
[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]ce50a962010-04-08 09:35:4035 UTF8ToWide(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]7ac5af92010-06-07 01:25:4443 UTF8ToWide(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]50951432010-03-31 12:12:4252 prefs->RegisterStringPref(prefs::kLanguageHangulKeyboard,
53 kHangulKeyboardNameIDPairs[0].keyboard_id);
[email protected]594b8f52010-04-27 18:10:3054 for (size_t i = 0; i < kNumPinyinBooleanPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:2855 prefs->RegisterBooleanPref(kPinyinBooleanPrefs[i].pref_name,
[email protected]6e5c4b82010-05-24 08:18:4456 kPinyinBooleanPrefs[i].default_pref_value);
[email protected]9040ad22010-04-22 04:29:2857 }
[email protected]594b8f52010-04-27 18:10:3058 for (size_t i = 0; i < kNumPinyinIntegerPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:2859 prefs->RegisterIntegerPref(kPinyinIntegerPrefs[i].pref_name,
[email protected]6e5c4b82010-05-24 08:18:4460 kPinyinIntegerPrefs[i].default_pref_value);
61 }
[email protected]7ac5af92010-06-07 01:25:4462 prefs->RegisterIntegerPref(kPinyinDoublePinyinSchema.pref_name,
63 kPinyinDoublePinyinSchema.default_pref_value);
64
[email protected]6e5c4b82010-05-24 08:18:4465 for (size_t i = 0; i < kNumMozcMultipleChoicePrefs; ++i) {
[email protected]7ac5af92010-06-07 01:25:4466 prefs->RegisterStringPref(
67 kMozcMultipleChoicePrefs[i].pref_name,
68 UTF8ToWide(kMozcMultipleChoicePrefs[i].default_pref_value));
[email protected]9040ad22010-04-22 04:29:2869 }
[email protected]fecc1522009-10-15 21:08:2970}
71
72void Preferences::Init(PrefService* prefs) {
73 timezone_.Init(prefs::kTimeZone, prefs, this);
74 tap_to_click_enabled_.Init(prefs::kTapToClickEnabled, prefs, this);
[email protected]fe23d5a32010-05-28 02:43:0475 accessibility_enabled_.Init(prefs::kAccessibilityEnabled, prefs, this);
[email protected]fecc1522009-10-15 21:08:2976 vert_edge_scroll_enabled_.Init(prefs::kVertEdgeScrollEnabled, prefs, this);
77 speed_factor_.Init(prefs::kTouchpadSpeedFactor, prefs, this);
78 sensitivity_.Init(prefs::kTouchpadSensitivity, prefs, this);
[email protected]3b02de292010-05-13 06:05:0579 language_hotkey_next_engine_in_menu_.Init(
80 prefs::kLanguageHotkeyNextEngineInMenu, prefs, this);
81 language_hotkey_previous_engine_.Init(
82 prefs::kLanguageHotkeyPreviousEngine, prefs, this);
[email protected]70aa5b32010-04-05 08:30:3483 language_preload_engines_.Init(prefs::kLanguagePreloadEngines, prefs, this);
[email protected]525dbe22010-06-01 07:05:4384 for (size_t i = 0; i < kNumChewingBooleanPrefs; ++i) {
85 language_chewing_boolean_prefs_[i].Init(
86 kChewingBooleanPrefs[i].pref_name, prefs, this);
87 }
88 for (size_t i = 0; i < kNumChewingMultipleChoicePrefs; ++i) {
89 language_chewing_multiple_choice_prefs_[i].Init(
90 kChewingMultipleChoicePrefs[i].pref_name, prefs, this);
91 }
[email protected]7ac5af92010-06-07 01:25:4492 language_chewing_hsu_sel_key_type_.Init(
93 kChewingHsuSelKeyType.pref_name, prefs, this);
[email protected]15c53082010-06-03 03:28:2194 for (size_t i = 0; i < kNumChewingIntegerPrefs; ++i) {
95 language_chewing_integer_prefs_[i].Init(
96 kChewingIntegerPrefs[i].pref_name, prefs, this);
97 }
[email protected]50951432010-03-31 12:12:4298 language_hangul_keyboard_.Init(prefs::kLanguageHangulKeyboard, prefs, this);
[email protected]594b8f52010-04-27 18:10:3099 for (size_t i = 0; i < kNumPinyinBooleanPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28100 language_pinyin_boolean_prefs_[i].Init(
101 kPinyinBooleanPrefs[i].pref_name, prefs, this);
102 }
[email protected]594b8f52010-04-27 18:10:30103 for (size_t i = 0; i < kNumPinyinIntegerPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28104 language_pinyin_int_prefs_[i].Init(
105 kPinyinIntegerPrefs[i].pref_name, prefs, this);
106 }
[email protected]7ac5af92010-06-07 01:25:44107 language_pinyin_double_pinyin_schema_.Init(
108 kPinyinDoublePinyinSchema.pref_name, prefs, this);
[email protected]6e5c4b82010-05-24 08:18:44109 for (size_t i = 0; i < kNumMozcMultipleChoicePrefs; ++i) {
110 language_mozc_multiple_choice_prefs_[i].Init(
111 kMozcMultipleChoicePrefs[i].pref_name, prefs, this);
112 }
[email protected]fecc1522009-10-15 21:08:29113
114 // Initialize touchpad settings to what's saved in user preferences.
115 NotifyPrefChanged(NULL);
116}
117
118void Preferences::Observe(NotificationType type,
[email protected]50951432010-03-31 12:12:42119 const NotificationSource& source,
120 const NotificationDetails& details) {
[email protected]fecc1522009-10-15 21:08:29121 if (type == NotificationType::PREF_CHANGED)
122 NotifyPrefChanged(Details<std::wstring>(details).ptr());
123}
124
125void Preferences::NotifyPrefChanged(const std::wstring* pref_name) {
126 if (!pref_name || *pref_name == prefs::kTimeZone)
127 SetTimeZone(timezone_.GetValue());
[email protected]3b02de292010-05-13 06:05:05128 if (!pref_name || *pref_name == prefs::kTapToClickEnabled) {
[email protected]62c7ef32010-03-23 23:44:24129 CrosLibrary::Get()->GetSynapticsLibrary()->SetBoolParameter(
130 PARAM_BOOL_TAP_TO_CLICK,
[email protected]c31b3c722009-10-21 20:01:35131 tap_to_click_enabled_.GetValue());
[email protected]3b02de292010-05-13 06:05:05132 }
133 if (!pref_name || *pref_name == prefs::kVertEdgeScrollEnabled) {
[email protected]62c7ef32010-03-23 23:44:24134 CrosLibrary::Get()->GetSynapticsLibrary()->SetBoolParameter(
[email protected]c31b3c722009-10-21 20:01:35135 PARAM_BOOL_VERTICAL_EDGE_SCROLLING,
136 vert_edge_scroll_enabled_.GetValue());
[email protected]3b02de292010-05-13 06:05:05137 }
138 if (!pref_name || *pref_name == prefs::kTouchpadSpeedFactor) {
[email protected]62c7ef32010-03-23 23:44:24139 CrosLibrary::Get()->GetSynapticsLibrary()->SetRangeParameter(
140 PARAM_RANGE_SPEED_SENSITIVITY,
141 speed_factor_.GetValue());
[email protected]3b02de292010-05-13 06:05:05142 }
143 if (!pref_name || *pref_name == prefs::kTouchpadSensitivity) {
[email protected]62c7ef32010-03-23 23:44:24144 CrosLibrary::Get()->GetSynapticsLibrary()->SetRangeParameter(
145 PARAM_RANGE_TOUCH_SENSITIVITY,
146 sensitivity_.GetValue());
[email protected]3b02de292010-05-13 06:05:05147 }
[email protected]8be9ff22010-06-08 02:13:54148
149 // We don't handle prefs::kLanguageCurrentInputMethod and PreviousInputMethod
150 // here.
151
[email protected]3b02de292010-05-13 06:05:05152 if (!pref_name || *pref_name == prefs::kLanguageHotkeyNextEngineInMenu) {
[email protected]d01bb8072010-04-12 13:00:15153 SetLanguageConfigStringListAsCSV(kHotKeySectionName,
[email protected]3b02de292010-05-13 06:05:05154 kNextEngineInMenuConfigName,
155 language_hotkey_next_engine_in_menu_.GetValue());
156 }
157 if (!pref_name || *pref_name == prefs::kLanguageHotkeyPreviousEngine) {
[email protected]d01bb8072010-04-12 13:00:15158 SetLanguageConfigStringListAsCSV(kHotKeySectionName,
[email protected]3b02de292010-05-13 06:05:05159 kPreviousEngineConfigName,
160 language_hotkey_previous_engine_.GetValue());
161 }
162 if (!pref_name || *pref_name == prefs::kLanguagePreloadEngines) {
[email protected]d01bb8072010-04-12 13:00:15163 SetLanguageConfigStringListAsCSV(kGeneralSectionName,
164 kPreloadEnginesConfigName,
165 language_preload_engines_.GetValue());
[email protected]3b02de292010-05-13 06:05:05166 }
[email protected]525dbe22010-06-01 07:05:43167 for (size_t i = 0; i < kNumChewingBooleanPrefs; ++i) {
168 if (!pref_name || *pref_name == kChewingBooleanPrefs[i].pref_name) {
169 SetLanguageConfigBoolean(kChewingSectionName,
170 kChewingBooleanPrefs[i].ibus_config_name,
171 language_chewing_boolean_prefs_[i].GetValue());
172 }
173 }
174 for (size_t i = 0; i < kNumChewingMultipleChoicePrefs; ++i) {
175 if (!pref_name || *pref_name == kChewingMultipleChoicePrefs[i].pref_name) {
176 SetLanguageConfigString(
177 kChewingSectionName,
178 kChewingMultipleChoicePrefs[i].ibus_config_name,
179 language_chewing_multiple_choice_prefs_[i].GetValue());
180 }
181 }
[email protected]7ac5af92010-06-07 01:25:44182 if (!pref_name || *pref_name == kChewingHsuSelKeyType.pref_name) {
183 SetLanguageConfigInteger(
184 kChewingSectionName,
185 kChewingHsuSelKeyType.ibus_config_name,
186 language_chewing_hsu_sel_key_type_.GetValue());
187 }
[email protected]15c53082010-06-03 03:28:21188 for (size_t i = 0; i < kNumChewingIntegerPrefs; ++i) {
189 if (!pref_name || *pref_name == kChewingIntegerPrefs[i].pref_name) {
190 SetLanguageConfigInteger(kChewingSectionName,
191 kChewingIntegerPrefs[i].ibus_config_name,
192 language_chewing_integer_prefs_[i].GetValue());
193 }
194 }
[email protected]3b02de292010-05-13 06:05:05195 if (!pref_name || *pref_name == prefs::kLanguageHangulKeyboard) {
[email protected]50951432010-03-31 12:12:42196 SetLanguageConfigString(kHangulSectionName, kHangulKeyboardConfigName,
197 language_hangul_keyboard_.GetValue());
[email protected]3b02de292010-05-13 06:05:05198 }
[email protected]594b8f52010-04-27 18:10:30199 for (size_t i = 0; i < kNumPinyinBooleanPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28200 if (!pref_name || *pref_name == kPinyinBooleanPrefs[i].pref_name) {
201 SetLanguageConfigBoolean(kPinyinSectionName,
202 kPinyinBooleanPrefs[i].ibus_config_name,
203 language_pinyin_boolean_prefs_[i].GetValue());
204 }
205 }
[email protected]594b8f52010-04-27 18:10:30206 for (size_t i = 0; i < kNumPinyinIntegerPrefs; ++i) {
[email protected]9040ad22010-04-22 04:29:28207 if (!pref_name || *pref_name == kPinyinIntegerPrefs[i].pref_name) {
208 SetLanguageConfigInteger(kPinyinSectionName,
209 kPinyinIntegerPrefs[i].ibus_config_name,
210 language_pinyin_int_prefs_[i].GetValue());
211 }
212 }
[email protected]7ac5af92010-06-07 01:25:44213 if (!pref_name || *pref_name == kPinyinDoublePinyinSchema.pref_name) {
214 SetLanguageConfigInteger(
215 kPinyinSectionName,
216 kPinyinDoublePinyinSchema.ibus_config_name,
217 language_pinyin_double_pinyin_schema_.GetValue());
218 }
[email protected]6e5c4b82010-05-24 08:18:44219 for (size_t i = 0; i < kNumMozcMultipleChoicePrefs; ++i) {
220 if (!pref_name || *pref_name == kMozcMultipleChoicePrefs[i].pref_name) {
221 SetLanguageConfigString(
222 kMozcSectionName,
223 kMozcMultipleChoicePrefs[i].ibus_config_name,
224 language_mozc_multiple_choice_prefs_[i].GetValue());
225 }
226 }
[email protected]fecc1522009-10-15 21:08:29227}
228
229void Preferences::SetTimeZone(const std::wstring& id) {
230 icu::TimeZone* timezone = icu::TimeZone::createTimeZone(
231 icu::UnicodeString::fromUTF8(WideToASCII(id)));
232 icu::TimeZone::adoptDefault(timezone);
233}
234
[email protected]70aa5b32010-04-05 08:30:34235void Preferences::SetLanguageConfigBoolean(const char* section,
236 const char* name,
237 bool value) {
238 ImeConfigValue config;
239 config.type = ImeConfigValue::kValueTypeBool;
240 config.bool_value = value;
241 CrosLibrary::Get()->GetLanguageLibrary()->SetImeConfig(section, name, config);
242}
243
[email protected]9040ad22010-04-22 04:29:28244void Preferences::SetLanguageConfigInteger(const char* section,
245 const char* name,
246 int value) {
247 ImeConfigValue config;
248 config.type = ImeConfigValue::kValueTypeInt;
249 config.int_value = value;
250 CrosLibrary::Get()->GetLanguageLibrary()->SetImeConfig(section, name, config);
251}
252
[email protected]50951432010-03-31 12:12:42253void Preferences::SetLanguageConfigString(const char* section,
254 const char* name,
255 const std::wstring& value) {
256 ImeConfigValue config;
257 config.type = ImeConfigValue::kValueTypeString;
258 config.string_value = WideToUTF8(value);
259 CrosLibrary::Get()->GetLanguageLibrary()->SetImeConfig(section, name, config);
260}
261
[email protected]2c25ddfd2010-04-09 10:35:55262void Preferences::SetLanguageConfigStringList(
263 const char* section,
264 const char* name,
265 const std::vector<std::wstring>& values) {
266 ImeConfigValue config;
267 config.type = ImeConfigValue::kValueTypeStringList;
268 for (size_t i = 0; i < values.size(); ++i) {
269 config.string_list_value.push_back(WideToUTF8(values[i]));
270 }
[email protected]9b786582010-04-12 02:39:37271 CrosLibrary::Get()->GetLanguageLibrary()->SetImeConfig(section, name, config);
[email protected]2c25ddfd2010-04-09 10:35:55272}
273
[email protected]d01bb8072010-04-12 13:00:15274void Preferences::SetLanguageConfigStringListAsCSV(const char* section,
275 const char* name,
276 const std::wstring& value) {
277 LOG(INFO) << "Setting " << name << " to '" << value << "'";
278
279 std::vector<std::wstring> split_values;
[email protected]2c25ddfd2010-04-09 10:35:55280 if (!value.empty()) {
[email protected]d01bb8072010-04-12 13:00:15281 SplitString(value, L',', &split_values);
[email protected]2c25ddfd2010-04-09 10:35:55282 }
283 // We should call the cros API even when |value| is empty, to disable default
[email protected]d01bb8072010-04-12 13:00:15284 // config.
285 SetLanguageConfigStringList(section, name, split_values);
[email protected]70aa5b32010-04-05 08:30:34286}
287
[email protected]fecc1522009-10-15 21:08:29288} // namespace chromeos