1// Copyright (c) 2011 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#include "chrome/browser/ui/webui/options/chromeos/system_options_handler.h"
6
7#include <string>
8
9#include "base/basictypes.h"
10#include "base/callback.h"
11#include "base/string_number_conversions.h"
12#include "base/utf_string_conversions.h"
13#include "base/values.h"
14#include "chrome/browser/browser_process.h"
15#include "chrome/browser/chromeos/language_preferences.h"
16#include "chrome/browser/prefs/pref_service.h"
17#include "chrome/browser/ui/webui/options/chromeos/system_settings_provider.h"
18#include "chrome/common/pref_names.h"
19#include "grit/chromium_strings.h"
20#include "grit/generated_resources.h"
21#include "grit/locale_settings.h"
22#include "grit/theme_resources.h"
23#include "ui/base/l10n/l10n_util.h"
24
25SystemOptionsHandler::SystemOptionsHandler()
26    : chromeos::CrosOptionsPageUIHandler(
27        new chromeos::SystemSettingsProvider()) {
28}
29
30SystemOptionsHandler::~SystemOptionsHandler() {
31}
32
33void SystemOptionsHandler::GetLocalizedValues(
34    DictionaryValue* localized_strings) {
35  DCHECK(localized_strings);
36
37  RegisterTitle(localized_strings, "systemPage", IDS_OPTIONS_SYSTEM_TAB_LABEL);
38  localized_strings->SetString("datetime_title",
39      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_SECTION_TITLE_DATETIME));
40  localized_strings->SetString("timezone",
41      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION));
42  localized_strings->SetString("use_24hour_clock",
43      l10n_util::GetStringUTF16(
44          IDS_OPTIONS_SETTINGS_USE_24HOUR_CLOCK_DESCRIPTION));
45
46  localized_strings->SetString("touchpad",
47      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_SECTION_TITLE_TOUCHPAD));
48  localized_strings->SetString("enable_tap_to_click",
49      l10n_util::GetStringUTF16(
50          IDS_OPTIONS_SETTINGS_TAP_TO_CLICK_ENABLED_DESCRIPTION));
51  localized_strings->SetString("sensitivity",
52      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_SENSITIVITY_DESCRIPTION));
53  localized_strings->SetString("sensitivity_less",
54      l10n_util::GetStringUTF16(
55          IDS_OPTIONS_SETTINGS_SENSITIVITY_LESS_DESCRIPTION));
56  localized_strings->SetString("sensitivity_more",
57      l10n_util::GetStringUTF16(
58          IDS_OPTIONS_SETTINGS_SENSITIVITY_MORE_DESCRIPTION));
59
60  localized_strings->SetString("language",
61      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_SECTION_TITLE_LANGUAGE));
62  localized_strings->SetString("language_customize",
63      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_LANGUAGES_CUSTOMIZE));
64  localized_strings->SetString("modifier_keys_customize",
65      l10n_util::GetStringUTF16(
66          IDS_OPTIONS_SETTINGS_LANGUAGES_MODIFIER_KEYS_CUSTOMIZE));
67
68  localized_strings->SetString("accessibility_title",
69      l10n_util::GetStringUTF16(
70          IDS_OPTIONS_SETTINGS_SECTION_TITLE_ACCESSIBILITY));
71  localized_strings->SetString("accessibility",
72      l10n_util::GetStringUTF16(
73          IDS_OPTIONS_SETTINGS_ACCESSIBILITY_DESCRIPTION));
74
75  localized_strings->Set("timezoneList",
76      reinterpret_cast<chromeos::SystemSettingsProvider*>(
77          settings_provider_.get())->GetTimezoneList());
78}
79
80void SystemOptionsHandler::Initialize() {
81  DCHECK(web_ui_);
82  PrefService* pref_service = g_browser_process->local_state();
83  bool acc_enabled = pref_service->GetBoolean(prefs::kAccessibilityEnabled);
84  FundamentalValue checked(acc_enabled);
85  web_ui_->CallJavascriptFunction(
86      "options.SystemOptions.SetAccessibilityCheckboxState", checked);
87}
88
89void SystemOptionsHandler::RegisterMessages() {
90  DCHECK(web_ui_);
91  web_ui_->RegisterMessageCallback("accessibilityChange",
92      NewCallback(this, &SystemOptionsHandler::AccessibilityChangeCallback));
93}
94
95void SystemOptionsHandler::AccessibilityChangeCallback(const ListValue* args) {
96  std::string checked_str;
97  args->GetString(0, &checked_str);
98  bool accessibility_enabled = (checked_str == "true");
99  PrefService* pref_service = g_browser_process->local_state();
100  pref_service->SetBoolean(prefs::kAccessibilityEnabled, accessibility_enabled);
101}
102