// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
#define CHROME_BROWSER_CHROMEOS_PREFERENCES_H_
#include <string>
#include <vector>
#include "ash/shell_observer.h"
#include "base/compiler_specific.h"
#include "base/prefs/pref_member.h"
#include "chrome/browser/chromeos/language_preferences.h"
#include "chrome/browser/prefs/pref_service_syncable_observer.h"
class PrefRegistrySimple;
class PrefService;
class PrefServiceSyncable;
class TracingManager;
namespace user_prefs {
class PrefRegistrySyncable;
}
namespace chromeos {
namespace input_method {
class InputMethodManager;
}
// The Preferences class handles Chrome OS preferences. When the class
// is first initialized, it will initialize the OS settings to what's stored in
// the preferences. These include touchpad settings, etc.
// When the preferences change, we change the settings to reflect the new value.
class Preferences : public PrefServiceSyncableObserver,
public ash::ShellObserver {
public:
Preferences();
explicit Preferences(
input_method::InputMethodManager* input_method_manager); // for testing
virtual ~Preferences();
// These method will register the prefs associated with Chrome OS settings.
static void RegisterPrefs(PrefRegistrySimple* registry);
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// This method will initialize Chrome OS settings to values in user prefs.
// |is_primary_user| is true if preferences are initialized for primary user
// in multi-profile session.
void Init(PrefServiceSyncable* prefs, bool is_primary_user);
void InitUserPrefsForTesting(PrefServiceSyncable* prefs);
void SetInputMethodListForTesting();
private:
// Initializes all member prefs.
void InitUserPrefs(PrefServiceSyncable* prefs);
// Callback method for preference changes.
void OnPreferenceChanged(const std::string& pref_name);
// This will set the OS settings when the preference changes.
// If this method is called with NULL, it will set all OS settings to what's
// stored in the preferences.
void NotifyPrefChanged(const std::string* pref_name);
// A variant of SetLanguageConfigStringList. You can pass comma-separated
// values. Examples of |value|: "", "Control+space,Hiragana"
void SetLanguageConfigStringListAsCSV(const char* section,
const char* name,
const std::string& value);
// Restores the user's preferred input method / keyboard layout on signing in.
void SetInputMethodList();
// Updates the initial key repeat delay and key repeat interval following
// current prefs values. We set the delay and interval at once since an
// underlying XKB API requires it.
void UpdateAutoRepeatRate();
// Force natural scroll to on if --enable-natural-scroll-default is specified
// on the cmd line.
void ForceNaturalScrollDefault();
// PrefServiceSyncableObserver implementation.
virtual void OnIsSyncingChanged() OVERRIDE;
// Overriden from ash::ShellObserver.
virtual void OnTouchHudProjectionToggled(bool enabled) OVERRIDE;
PrefServiceSyncable* prefs_;
input_method::InputMethodManager* input_method_manager_;
scoped_ptr<TracingManager> tracing_manager_;
BooleanPrefMember performance_tracing_enabled_;
BooleanPrefMember tap_to_click_enabled_;
BooleanPrefMember tap_dragging_enabled_;
BooleanPrefMember three_finger_click_enabled_;
BooleanPrefMember natural_scroll_;
BooleanPrefMember vert_edge_scroll_enabled_;
BooleanPrefMember a11y_spoken_feedback_enabled_;
BooleanPrefMember a11y_high_contrast_enabled_;
BooleanPrefMember a11y_screen_magnifier_enabled_;
IntegerPrefMember a11y_screen_magnifier_type_;
DoublePrefMember a11y_screen_magnifier_scale_;
IntegerPrefMember speed_factor_;
IntegerPrefMember mouse_sensitivity_;
IntegerPrefMember touchpad_sensitivity_;
BooleanPrefMember primary_mouse_button_right_;
BooleanPrefMember use_24hour_clock_;
BooleanPrefMember disable_drive_;
BooleanPrefMember disable_drive_over_cellular_;
BooleanPrefMember disable_drive_hosted_files_;
FilePathPrefMember download_default_directory_;
FilePathPrefMember select_file_last_directory_;
FilePathPrefMember save_file_default_directory_;
BooleanPrefMember touch_hud_projection_enabled_;
// Input method preferences.
StringPrefMember preferred_languages_;
StringPrefMember preload_engines_;
StringPrefMember current_input_method_;
StringPrefMember previous_input_method_;
StringPrefMember enabled_extension_imes_;
BooleanPrefMember xkb_auto_repeat_enabled_;
IntegerPrefMember xkb_auto_repeat_delay_pref_;
IntegerPrefMember xkb_auto_repeat_interval_pref_;
// True if this preferences instance is for primary user.
bool is_primary_user_prefs_;
DISALLOW_COPY_AND_ASSIGN(Preferences);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_PREFERENCES_H_