Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(259)

Side by Side Diff: chrome/browser/chromeos/login/wizard_accessibility_helper.cc

Issue 5839003: Fix to enable toggling accessibility using Ctrl+Alt+Z (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" 5 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stl_util-inl.h" 8 #include "base/stl_util-inl.h"
9 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/extensions/extension_accessibility_api.h" 10 #include "chrome/browser/extensions/extension_accessibility_api.h"
11 #include "chrome/browser/prefs/pref_service.h" 11 #include "chrome/browser/prefs/pref_service.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/profiles/profile_manager.h" 13 #include "chrome/browser/profiles/profile_manager.h"
14 #include "chrome/common/notification_registrar.h" 14 #include "chrome/common/notification_registrar.h"
15 #include "chrome/common/notification_service.h" 15 #include "chrome/common/notification_service.h"
16 #include "chrome/common/pref_names.h" 16 #include "chrome/common/pref_names.h"
17 #include "views/accelerator.h" 17 #include "views/accelerator.h"
18 #include "views/view.h" 18 #include "views/view.h"
19 19
20 namespace chromeos { 20 namespace chromeos {
21 21
22 scoped_ptr<views::Accelerator> WizardAccessibilityHelper::accelerator_; 22 scoped_ptr<views::Accelerator> WizardAccessibilityHelper::accelerator_;
23 23
24 // static 24 // static
25 views::Accelerator WizardAccessibilityHelper::GetAccelerator() { 25 views::Accelerator WizardAccessibilityHelper::GetAccelerator() {
26 // Use an accelerator that would never match any hotkey to temporarily 26 // Use an accelerator that would never match any hotkey to temporarily
27 // disable the accessibility hotkey per http://crosbug.com/9195 27 // disable the accessibility hotkey per http://crosbug.com/9195
28 // TODO(xiyuan): Change back to real hotkey as the following 28 // TODO(xiyuan): Change back to real hotkey as the following
29 // new views::Accelerator(app::VKEY_Z, false, true, true) 29 // new views::Accelerator(app::VKEY_Z, false, true, true)
xiyuan 2010/12/15 22:44:52 please remove the TODO since you re-enabled the ho
30 if (!WizardAccessibilityHelper::accelerator_.get()) 30 if (!WizardAccessibilityHelper::accelerator_.get())
31 WizardAccessibilityHelper::accelerator_.reset( 31 WizardAccessibilityHelper::accelerator_.reset(
32 new views::Accelerator(app::VKEY_UNKNOWN, 0xdeadbeef)); 32 new views::Accelerator(app::VKEY_Z, false, true, true));
33 return *(WizardAccessibilityHelper::accelerator_.get()); 33 return *(WizardAccessibilityHelper::accelerator_.get());
34 } 34 }
35 35
36 // static 36 // static
37 WizardAccessibilityHelper* WizardAccessibilityHelper::GetInstance() { 37 WizardAccessibilityHelper* WizardAccessibilityHelper::GetInstance() {
38 return Singleton<WizardAccessibilityHelper>::get(); 38 return Singleton<WizardAccessibilityHelper>::get();
39 } 39 }
40 40
41 WizardAccessibilityHelper::WizardAccessibilityHelper() { 41 WizardAccessibilityHelper::WizardAccessibilityHelper() {
42 accessibility_handler_.reset(new WizardAccessibilityHandler()); 42 accessibility_handler_.reset(new WizardAccessibilityHandler());
(...skipping 20 matching lines...) Expand all
63 registered_notifications_ = true; 63 registered_notifications_ = true;
64 } 64 }
65 65
66 void WizardAccessibilityHelper::UnregisterNotifications() { 66 void WizardAccessibilityHelper::UnregisterNotifications() {
67 if (!registered_notifications_) 67 if (!registered_notifications_)
68 return; 68 return;
69 registrar_.RemoveAll(); 69 registrar_.RemoveAll();
70 registered_notifications_ = false; 70 registered_notifications_ = false;
71 } 71 }
72 72
73 bool WizardAccessibilityHelper::IsAccessibilityEnabled() {
74 return g_browser_process &&
75 g_browser_process->local_state()->GetBoolean(
76 prefs::kAccessibilityEnabled);
77 }
78
73 void WizardAccessibilityHelper::MaybeEnableAccessibility( 79 void WizardAccessibilityHelper::MaybeEnableAccessibility(
74 views::View* view_tree) { 80 views::View* view_tree) {
75 if (g_browser_process && 81 if (IsAccessibilityEnabled()) {
76 g_browser_process->local_state()->GetBoolean( 82 EnableAccessibilityForView(view_tree);
77 prefs::kAccessibilityEnabled)) {
78 EnableAccessibility(view_tree);
79 } else { 83 } else {
80 AddViewToBuffer(view_tree); 84 AddViewToBuffer(view_tree);
81 } 85 }
82 } 86 }
83 87
84 void WizardAccessibilityHelper::MaybeSpeak(const char* str, bool queue, 88 void WizardAccessibilityHelper::MaybeSpeak(const char* str, bool queue,
85 bool interruptible) { 89 bool interruptible) {
86 if (g_browser_process && 90 if (IsAccessibilityEnabled()) {
87 g_browser_process->local_state()->GetBoolean(
88 prefs::kAccessibilityEnabled)) {
89 accessibility_handler_->Speak(str, queue, interruptible); 91 accessibility_handler_->Speak(str, queue, interruptible);
90 } 92 }
91 } 93 }
92 94
93 void WizardAccessibilityHelper::EnableAccessibility(views::View* view_tree) { 95 void WizardAccessibilityHelper::EnableAccessibilityForView(
96 views::View* view_tree) {
94 VLOG(1) << "Enabling accessibility."; 97 VLOG(1) << "Enabling accessibility.";
95 if (!registered_notifications_) 98 if (!registered_notifications_)
96 RegisterNotifications(); 99 RegisterNotifications();
97 if (g_browser_process) { 100 SetAccessibilityEnabled(true);
98 PrefService* prefService = g_browser_process->local_state(); 101 if (view_tree) {
99 if (!prefService->GetBoolean(prefs::kAccessibilityEnabled)) { 102 AddViewToBuffer(view_tree);
100 prefService->SetBoolean(prefs::kAccessibilityEnabled, true); 103 // If accessibility pref is set, enable accessibility for all views in
101 prefService->ScheduleSavePersistentPrefs(); 104 // the buffer for which access is not yet enabled.
102 } 105 for (std::map<views::View*, bool>::iterator iter =
103 } 106 views_buffer_.begin();
104 ExtensionAccessibilityEventRouter::GetInstance()-> 107 iter != views_buffer_.end(); ++iter) {
105 SetAccessibilityEnabled(true); 108 if (!(*iter).second) {
106 AddViewToBuffer(view_tree); 109 AccessibleViewHelper *helper = new AccessibleViewHelper((*iter).first,
107 // If accessibility pref is set, enable accessibility for all views in 110 profile_);
108 // the buffer for which access is not yet enabled. 111 accessible_view_helpers_.push_back(helper);
109 for (std::map<views::View*, bool>::iterator iter = 112 (*iter).second = true;
110 views_buffer_.begin(); 113 }
111 iter != views_buffer_.end(); ++iter) {
112 if (!(*iter).second) {
113 AccessibleViewHelper *helper = new AccessibleViewHelper((*iter).first,
114 profile_);
115 accessible_view_helpers_.push_back(helper);
116 (*iter).second = true;
117 } 114 }
118 } 115 }
119 } 116 }
120 117
118 void WizardAccessibilityHelper::ToggleAccessibility(views::View* view_tree) {
119 if (!IsAccessibilityEnabled()) {
120 EnableAccessibilityForView(view_tree);
121 } else {
122 SetAccessibilityEnabled(false);
123 }
124 }
125
126 void WizardAccessibilityHelper::SetAccessibilityEnabled(bool enabled) {
127 if (g_browser_process) {
128 PrefService* prefService = g_browser_process->local_state();
129 prefService->SetBoolean(prefs::kAccessibilityEnabled, enabled);
130 prefService->ScheduleSavePersistentPrefs();
131 }
132 ExtensionAccessibilityEventRouter::GetInstance()->
133 SetAccessibilityEnabled(enabled);
134 accessibility_handler_->Speak(enabled ? "Accessibility turned on." :
135 "Accessibility turned off",
xiyuan 2010/12/15 22:44:52 Do we need to move the string literals into resour
136 false, true);
137 }
138
121 void WizardAccessibilityHelper::AddViewToBuffer(views::View* view_tree) { 139 void WizardAccessibilityHelper::AddViewToBuffer(views::View* view_tree) {
122 if (!view_tree->GetWidget()) 140 if (!view_tree->GetWidget())
123 return; 141 return;
124 bool view_exists = false; 142 bool view_exists = false;
125 // Check if the view is already queued for enabling accessibility. 143 // Check if the view is already queued for enabling accessibility.
126 // Prevent adding the same view in the buffer twice. 144 // Prevent adding the same view in the buffer twice.
127 for (std::map<views::View*, bool>::iterator iter = views_buffer_.begin(); 145 for (std::map<views::View*, bool>::iterator iter = views_buffer_.begin();
128 iter != views_buffer_.end(); ++iter) { 146 iter != views_buffer_.end(); ++iter) {
129 if ((*iter).first == view_tree) { 147 if ((*iter).first == view_tree) {
130 view_exists = true; 148 view_exists = true;
131 break; 149 break;
132 } 150 }
133 } 151 }
134 if (!view_exists) 152 if (!view_exists)
135 views_buffer_[view_tree] = false; 153 views_buffer_[view_tree] = false;
136 } 154 }
137 155
138 } // namespace chromeos 156 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698