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 #ifndef CHROME_BROWSER_CHROMEOS_PREFERENCES_H_ 6 #define CHROME_BROWSER_CHROMEOS_PREFERENCES_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "ash/shell_observer.h" 12 #include "base/compiler_specific.h" 13 #include "base/prefs/pref_member.h" 14 #include "chrome/browser/chromeos/language_preferences.h" 15 #include "chrome/browser/prefs/pref_service_syncable_observer.h" 16 17 class PrefRegistrySimple; 18 class PrefService; 19 class PrefServiceSyncable; 20 21 class TracingManager; 22 23 namespace user_prefs { 24 class PrefRegistrySyncable; 25 } 26 27 namespace chromeos { 28 29 namespace input_method { 30 class InputMethodManager; 31 } 32 33 // The Preferences class handles Chrome OS preferences. When the class 34 // is first initialized, it will initialize the OS settings to what's stored in 35 // the preferences. These include touchpad settings, etc. 36 // When the preferences change, we change the settings to reflect the new value. 37 class Preferences : public PrefServiceSyncableObserver, 38 public ash::ShellObserver { 39 public: 40 Preferences(); 41 explicit Preferences( 42 input_method::InputMethodManager* input_method_manager); // for testing 43 virtual ~Preferences(); 44 45 // These method will register the prefs associated with Chrome OS settings. 46 static void RegisterPrefs(PrefRegistrySimple* registry); 47 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 48 49 // This method will initialize Chrome OS settings to values in user prefs. 50 void Init(PrefServiceSyncable* prefs); 51 52 void InitUserPrefsForTesting(PrefServiceSyncable* prefs); 53 void SetInputMethodListForTesting(); 54 55 private: 56 // Initializes all member prefs. 57 void InitUserPrefs(PrefServiceSyncable* prefs); 58 59 // Callback method for preference changes. 60 void OnPreferenceChanged(const std::string& pref_name); 61 62 // This will set the OS settings when the preference changes. 63 // If this method is called with NULL, it will set all OS settings to what's 64 // stored in the preferences. 65 void NotifyPrefChanged(const std::string* pref_name); 66 67 // Writes boolean |value| to the input method (IBus) configuration daemon. 68 // |section| (e.g. "general") and |name| (e.g. "use_global_engine") should 69 // not be NULL. 70 void SetLanguageConfigBoolean(const char* section, 71 const char* name, 72 bool value); 73 74 // Writes integer |value| to the input method (IBus) configuration daemon. 75 // |section| and |name| should not be NULL. 76 void SetLanguageConfigInteger(const char* section, 77 const char* name, 78 int value); 79 80 // Writes string |value| to the input method (IBus) configuration daemon. 81 // |section| and |name| should not be NULL. 82 void SetLanguageConfigString(const char* section, 83 const char* name, 84 const std::string& value); 85 86 // Writes a string list to the input method (IBus) configuration daemon. 87 // |section| and |name| should not be NULL. 88 void SetLanguageConfigStringList(const char* section, 89 const char* name, 90 const std::vector<std::string>& values); 91 92 // A variant of SetLanguageConfigStringList. You can pass comma-separated 93 // values. Examples of |value|: "", "Control+space,Hiragana" 94 void SetLanguageConfigStringListAsCSV(const char* section, 95 const char* name, 96 const std::string& value); 97 98 // Restores the user's preferred input method / keyboard layout on signing in. 99 void SetInputMethodList(); 100 101 // Updates the initial key repeat delay and key repeat interval following 102 // current prefs values. We set the delay and interval at once since an 103 // underlying XKB API requires it. 104 void UpdateAutoRepeatRate(); 105 106 // Force natural scroll to on if --enable-natural-scroll-default is specified 107 // on the cmd line. 108 void ForceNaturalScrollDefault(); 109 110 // PrefServiceSyncableObserver implementation. 111 virtual void OnIsSyncingChanged() OVERRIDE; 112 113 // Overriden from ash::ShellObserver. 114 virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE; 115 116 PrefServiceSyncable* prefs_; 117 118 input_method::InputMethodManager* input_method_manager_; 119 scoped_ptr<TracingManager> tracing_manager_; 120 121 BooleanPrefMember performance_tracing_enabled_; 122 BooleanPrefMember tap_to_click_enabled_; 123 BooleanPrefMember tap_dragging_enabled_; 124 BooleanPrefMember three_finger_click_enabled_; 125 BooleanPrefMember natural_scroll_; 126 BooleanPrefMember vert_edge_scroll_enabled_; 127 BooleanPrefMember a11y_spoken_feedback_enabled_; 128 BooleanPrefMember a11y_high_contrast_enabled_; 129 BooleanPrefMember a11y_screen_magnifier_enabled_; 130 IntegerPrefMember a11y_screen_magnifier_type_; 131 DoublePrefMember a11y_screen_magnifier_scale_; 132 IntegerPrefMember speed_factor_; 133 IntegerPrefMember mouse_sensitivity_; 134 IntegerPrefMember touchpad_sensitivity_; 135 BooleanPrefMember primary_mouse_button_right_; 136 BooleanPrefMember use_24hour_clock_; 137 BooleanPrefMember disable_drive_; 138 BooleanPrefMember disable_drive_over_cellular_; 139 BooleanPrefMember disable_drive_hosted_files_; 140 FilePathPrefMember download_default_directory_; 141 FilePathPrefMember select_file_last_directory_; 142 FilePathPrefMember save_file_default_directory_; 143 BooleanPrefMember touch_hud_projection_enabled_; 144 145 // Input method preferences. 146 StringPrefMember preferred_languages_; 147 StringPrefMember preload_engines_; 148 StringPrefMember current_input_method_; 149 StringPrefMember previous_input_method_; 150 StringPrefMember enabled_extension_imes_; 151 152 BooleanPrefMember chewing_boolean_prefs_[ 153 language_prefs::kNumChewingBooleanPrefs]; 154 StringPrefMember chewing_multiple_choice_prefs_[ 155 language_prefs::kNumChewingMultipleChoicePrefs]; 156 IntegerPrefMember chewing_hsu_sel_key_type_; 157 IntegerPrefMember chewing_integer_prefs_[ 158 language_prefs::kNumChewingIntegerPrefs]; 159 StringPrefMember hangul_keyboard_; 160 StringPrefMember hangul_hanja_binding_keys_; 161 StringPrefMember hangul_hanja_keys_; 162 BooleanPrefMember pinyin_boolean_prefs_[ 163 language_prefs::kNumPinyinBooleanPrefs]; 164 IntegerPrefMember pinyin_int_prefs_[ 165 language_prefs::kNumPinyinIntegerPrefs]; 166 IntegerPrefMember pinyin_double_pinyin_schema_; 167 BooleanPrefMember mozc_boolean_prefs_[ 168 language_prefs::kNumMozcBooleanPrefs]; 169 StringPrefMember mozc_multiple_choice_prefs_[ 170 language_prefs::kNumMozcMultipleChoicePrefs]; 171 IntegerPrefMember mozc_integer_prefs_[ 172 language_prefs::kNumMozcIntegerPrefs]; 173 BooleanPrefMember xkb_auto_repeat_enabled_; 174 IntegerPrefMember xkb_auto_repeat_delay_pref_; 175 IntegerPrefMember xkb_auto_repeat_interval_pref_; 176 177 BooleanPrefMember enable_drm_; 178 179 DISALLOW_COPY_AND_ASSIGN(Preferences); 180 }; 181 182 } // namespace chromeos 183 184 #endif // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_ 185