Home | History | Annotate | Download | only in chromeos
      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