Index: chrome/browser/chromeos/login/wizard_accessibility_helper.cc |
=================================================================== |
--- chrome/browser/chromeos/login/wizard_accessibility_helper.cc (revision 69471) |
+++ chrome/browser/chromeos/login/wizard_accessibility_helper.cc (working copy) |
@@ -4,6 +4,7 @@ |
#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" |
+#include "app/l10n_util.h" |
#include "base/logging.h" |
#include "base/stl_util-inl.h" |
#include "chrome/browser/browser_process.h" |
@@ -14,6 +15,7 @@ |
#include "chrome/common/notification_registrar.h" |
#include "chrome/common/notification_service.h" |
#include "chrome/common/pref_names.h" |
+#include "grit/generated_resources.h" |
#include "views/accelerator.h" |
#include "views/view.h" |
@@ -23,13 +25,9 @@ |
// static |
views::Accelerator WizardAccessibilityHelper::GetAccelerator() { |
- // Use an accelerator that would never match any hotkey to temporarily |
- // disable the accessibility hotkey per http://crosbug.com/9195 |
- // TODO(xiyuan): Change back to real hotkey as the following |
- // new views::Accelerator(app::VKEY_Z, false, true, true) |
if (!WizardAccessibilityHelper::accelerator_.get()) |
WizardAccessibilityHelper::accelerator_.reset( |
- new views::Accelerator(app::VKEY_UNKNOWN, 0xdeadbeef)); |
+ new views::Accelerator(app::VKEY_Z, false, true, true)); |
return *(WizardAccessibilityHelper::accelerator_.get()); |
} |
@@ -70,12 +68,16 @@ |
registered_notifications_ = false; |
} |
+bool WizardAccessibilityHelper::IsAccessibilityEnabled() { |
+ return g_browser_process && |
+ g_browser_process->local_state()->GetBoolean( |
+ prefs::kAccessibilityEnabled); |
+} |
+ |
void WizardAccessibilityHelper::MaybeEnableAccessibility( |
views::View* view_tree) { |
- if (g_browser_process && |
- g_browser_process->local_state()->GetBoolean( |
- prefs::kAccessibilityEnabled)) { |
- EnableAccessibility(view_tree); |
+ if (IsAccessibilityEnabled()) { |
+ EnableAccessibilityForView(view_tree); |
} else { |
AddViewToBuffer(view_tree); |
} |
@@ -83,39 +85,54 @@ |
void WizardAccessibilityHelper::MaybeSpeak(const char* str, bool queue, |
bool interruptible) { |
- if (g_browser_process && |
- g_browser_process->local_state()->GetBoolean( |
- prefs::kAccessibilityEnabled)) { |
+ if (IsAccessibilityEnabled()) { |
accessibility_handler_->Speak(str, queue, interruptible); |
} |
} |
-void WizardAccessibilityHelper::EnableAccessibility(views::View* view_tree) { |
+void WizardAccessibilityHelper::EnableAccessibilityForView( |
+ views::View* view_tree) { |
VLOG(1) << "Enabling accessibility."; |
if (!registered_notifications_) |
RegisterNotifications(); |
+ SetAccessibilityEnabled(true); |
+ if (view_tree) { |
+ AddViewToBuffer(view_tree); |
+ // If accessibility pref is set, enable accessibility for all views in |
+ // the buffer for which access is not yet enabled. |
+ for (std::map<views::View*, bool>::iterator iter = |
+ views_buffer_.begin(); |
+ iter != views_buffer_.end(); ++iter) { |
+ if (!(*iter).second) { |
+ AccessibleViewHelper *helper = new AccessibleViewHelper((*iter).first, |
+ profile_); |
+ accessible_view_helpers_.push_back(helper); |
+ (*iter).second = true; |
+ } |
+ } |
+ } |
+} |
+ |
+void WizardAccessibilityHelper::ToggleAccessibility(views::View* view_tree) { |
+ if (!IsAccessibilityEnabled()) { |
+ EnableAccessibilityForView(view_tree); |
+ } else { |
+ SetAccessibilityEnabled(false); |
+ } |
+} |
+ |
+void WizardAccessibilityHelper::SetAccessibilityEnabled(bool enabled) { |
if (g_browser_process) { |
PrefService* prefService = g_browser_process->local_state(); |
- if (!prefService->GetBoolean(prefs::kAccessibilityEnabled)) { |
- prefService->SetBoolean(prefs::kAccessibilityEnabled, true); |
- prefService->ScheduleSavePersistentPrefs(); |
- } |
+ prefService->SetBoolean(prefs::kAccessibilityEnabled, enabled); |
+ prefService->ScheduleSavePersistentPrefs(); |
} |
ExtensionAccessibilityEventRouter::GetInstance()-> |
- SetAccessibilityEnabled(true); |
- AddViewToBuffer(view_tree); |
- // If accessibility pref is set, enable accessibility for all views in |
- // the buffer for which access is not yet enabled. |
- for (std::map<views::View*, bool>::iterator iter = |
- views_buffer_.begin(); |
- iter != views_buffer_.end(); ++iter) { |
- if (!(*iter).second) { |
- AccessibleViewHelper *helper = new AccessibleViewHelper((*iter).first, |
- profile_); |
- accessible_view_helpers_.push_back(helper); |
- (*iter).second = true; |
- } |
- } |
+ SetAccessibilityEnabled(enabled); |
+ accessibility_handler_->Speak(enabled ? |
+ l10n_util::GetStringUTF8(IDS_CHROMEOS_ACC_ACCESS_ENABLED).c_str() : |
+ l10n_util::GetStringUTF8(IDS_CHROMEOS_ACC_ACCESS_DISABLED).c_str(), |
+ false, true); |
} |
void WizardAccessibilityHelper::AddViewToBuffer(views::View* view_tree) { |