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 #include "chromeos/ime/input_method_manager.h"
     17 #include "components/user_manager/user_manager.h"
     18 
     19 class PrefRegistrySimple;
     20 class PrefService;
     21 class PrefServiceSyncable;
     22 
     23 class TracingManager;
     24 
     25 namespace user_prefs {
     26 class PrefRegistrySyncable;
     27 }
     28 
     29 namespace chromeos {
     30 
     31 class User;
     32 
     33 namespace input_method {
     34 class InputMethodManager;
     35 }
     36 
     37 // The Preferences class handles Chrome OS preferences. When the class
     38 // is first initialized, it will initialize the OS settings to what's stored in
     39 // the preferences. These include touchpad settings, etc.
     40 // When the preferences change, we change the settings to reflect the new value.
     41 class Preferences : public PrefServiceSyncableObserver,
     42                     public ash::ShellObserver,
     43                     public user_manager::UserManager::UserSessionStateObserver {
     44  public:
     45   Preferences();
     46   explicit Preferences(
     47       input_method::InputMethodManager* input_method_manager);  // for testing
     48   virtual ~Preferences();
     49 
     50   // These method will register the prefs associated with Chrome OS settings.
     51   static void RegisterPrefs(PrefRegistrySimple* registry);
     52   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     53 
     54   // This method will initialize Chrome OS settings to values in user prefs.
     55   // |user| is the user owning this preferences.
     56   void Init(Profile* profile, const user_manager::User* user);
     57 
     58   void InitUserPrefsForTesting(
     59       PrefServiceSyncable* prefs,
     60       const user_manager::User* user,
     61       scoped_refptr<input_method::InputMethodManager::State> ime_state);
     62   void SetInputMethodListForTesting();
     63 
     64  private:
     65   enum ApplyReason {
     66     REASON_INITIALIZATION,
     67     REASON_ACTIVE_USER_CHANGED,
     68     REASON_PREF_CHANGED
     69   };
     70 
     71   // Initializes all member prefs.
     72   void InitUserPrefs(PrefServiceSyncable* prefs);
     73 
     74   // Callback method for preference changes.
     75   void OnPreferenceChanged(const std::string& pref_name);
     76 
     77   // This will set the OS settings when the preference changed or user owning
     78   // these preferences became active. Also this method is called on
     79   // initialization. The reason of call is stored in |reason| parameter.
     80   // |pref_name| keeps name of changed preference in |reason| is
     81   // |REASON_PREF_CHANGED|, otherwise it is empty.
     82   void ApplyPreferences(ApplyReason reason,
     83                         const std::string& pref_name);
     84 
     85   // A variant of SetLanguageConfigStringList. You can pass comma-separated
     86   // values. Examples of |value|: "", "Control+space,Hiragana"
     87   void SetLanguageConfigStringListAsCSV(const char* section,
     88                                         const char* name,
     89                                         const std::string& value);
     90 
     91   // Restores the user's preferred input method / keyboard layout on signing in.
     92   void SetInputMethodList();
     93 
     94   // Updates the initial key repeat delay and key repeat interval following
     95   // current prefs values. We set the delay and interval at once since an
     96   // underlying XKB API requires it.
     97   void UpdateAutoRepeatRate();
     98 
     99   // Force natural scroll to on if --enable-natural-scroll-default is specified
    100   // on the cmd line.
    101   void ForceNaturalScrollDefault();
    102 
    103   // PrefServiceSyncableObserver implementation.
    104   virtual void OnIsSyncingChanged() OVERRIDE;
    105 
    106   // Overriden from ash::ShellObserver.
    107   virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE;
    108 
    109   // Overriden form user_manager::UserManager::UserSessionStateObserver.
    110   virtual void ActiveUserChanged(
    111       const user_manager::User* active_user) OVERRIDE;
    112 
    113   void ActivateInputMethods(const user_manager::User* active_user);
    114 
    115   PrefServiceSyncable* prefs_;
    116 
    117   input_method::InputMethodManager* input_method_manager_;
    118   scoped_ptr<TracingManager> tracing_manager_;
    119 
    120   BooleanPrefMember performance_tracing_enabled_;
    121   BooleanPrefMember tap_to_click_enabled_;
    122   BooleanPrefMember tap_dragging_enabled_;
    123   BooleanPrefMember three_finger_click_enabled_;
    124   BooleanPrefMember natural_scroll_;
    125   BooleanPrefMember vert_edge_scroll_enabled_;
    126   IntegerPrefMember speed_factor_;
    127   IntegerPrefMember mouse_sensitivity_;
    128   IntegerPrefMember touchpad_sensitivity_;
    129   BooleanPrefMember primary_mouse_button_right_;
    130   FilePathPrefMember download_default_directory_;
    131   BooleanPrefMember touch_hud_projection_enabled_;
    132 
    133   // Input method preferences.
    134   StringPrefMember preload_engines_;
    135   StringPrefMember current_input_method_;
    136   StringPrefMember previous_input_method_;
    137   StringPrefMember enabled_extension_imes_;
    138 
    139   BooleanPrefMember xkb_auto_repeat_enabled_;
    140   IntegerPrefMember xkb_auto_repeat_delay_pref_;
    141   IntegerPrefMember xkb_auto_repeat_interval_pref_;
    142 
    143   // User owning these preferences.
    144   const user_manager::User* user_;
    145 
    146   // Whether user is a primary user.
    147   bool user_is_primary_;
    148 
    149   // Input Methods state for this user.
    150   scoped_refptr<input_method::InputMethodManager::State> ime_state_;
    151 
    152   DISALLOW_COPY_AND_ASSIGN(Preferences);
    153 };
    154 
    155 }  // namespace chromeos
    156 
    157 #endif  // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
    158