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 // |is_primary_user| is true if preferences are initialized for primary user 51 // in multi-profile session. 52 void Init(PrefServiceSyncable* prefs, bool is_primary_user); 53 54 void InitUserPrefsForTesting(PrefServiceSyncable* prefs); 55 void SetInputMethodListForTesting(); 56 57 private: 58 // Initializes all member prefs. 59 void InitUserPrefs(PrefServiceSyncable* prefs); 60 61 // Callback method for preference changes. 62 void OnPreferenceChanged(const std::string& pref_name); 63 64 // This will set the OS settings when the preference changes. 65 // If this method is called with NULL, it will set all OS settings to what's 66 // stored in the preferences. 67 void NotifyPrefChanged(const std::string* pref_name); 68 69 // A variant of SetLanguageConfigStringList. You can pass comma-separated 70 // values. Examples of |value|: "", "Control+space,Hiragana" 71 void SetLanguageConfigStringListAsCSV(const char* section, 72 const char* name, 73 const std::string& value); 74 75 // Restores the user's preferred input method / keyboard layout on signing in. 76 void SetInputMethodList(); 77 78 // Updates the initial key repeat delay and key repeat interval following 79 // current prefs values. We set the delay and interval at once since an 80 // underlying XKB API requires it. 81 void UpdateAutoRepeatRate(); 82 83 // Force natural scroll to on if --enable-natural-scroll-default is specified 84 // on the cmd line. 85 void ForceNaturalScrollDefault(); 86 87 // PrefServiceSyncableObserver implementation. 88 virtual void OnIsSyncingChanged() OVERRIDE; 89 90 // Overriden from ash::ShellObserver. 91 virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE; 92 93 PrefServiceSyncable* prefs_; 94 95 input_method::InputMethodManager* input_method_manager_; 96 scoped_ptr<TracingManager> tracing_manager_; 97 98 BooleanPrefMember performance_tracing_enabled_; 99 BooleanPrefMember tap_to_click_enabled_; 100 BooleanPrefMember tap_dragging_enabled_; 101 BooleanPrefMember three_finger_click_enabled_; 102 BooleanPrefMember natural_scroll_; 103 BooleanPrefMember vert_edge_scroll_enabled_; 104 BooleanPrefMember a11y_spoken_feedback_enabled_; 105 BooleanPrefMember a11y_high_contrast_enabled_; 106 BooleanPrefMember a11y_screen_magnifier_enabled_; 107 IntegerPrefMember a11y_screen_magnifier_type_; 108 DoublePrefMember a11y_screen_magnifier_scale_; 109 IntegerPrefMember speed_factor_; 110 IntegerPrefMember mouse_sensitivity_; 111 IntegerPrefMember touchpad_sensitivity_; 112 BooleanPrefMember primary_mouse_button_right_; 113 BooleanPrefMember use_24hour_clock_; 114 BooleanPrefMember disable_drive_; 115 BooleanPrefMember disable_drive_over_cellular_; 116 BooleanPrefMember disable_drive_hosted_files_; 117 FilePathPrefMember download_default_directory_; 118 FilePathPrefMember select_file_last_directory_; 119 FilePathPrefMember save_file_default_directory_; 120 BooleanPrefMember touch_hud_projection_enabled_; 121 122 // Input method preferences. 123 StringPrefMember preferred_languages_; 124 StringPrefMember preload_engines_; 125 StringPrefMember current_input_method_; 126 StringPrefMember previous_input_method_; 127 StringPrefMember enabled_extension_imes_; 128 129 BooleanPrefMember xkb_auto_repeat_enabled_; 130 IntegerPrefMember xkb_auto_repeat_delay_pref_; 131 IntegerPrefMember xkb_auto_repeat_interval_pref_; 132 133 // True if this preferences instance is for primary user. 134 bool is_primary_user_prefs_; 135 136 DISALLOW_COPY_AND_ASSIGN(Preferences); 137 }; 138 139 } // namespace chromeos 140 141 #endif // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_ 142