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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_ACCESSIBILITY_HELPER_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_ACCESSIBILITY_HELPER_H_
7#pragma once
8
9#include "base/memory/scoped_ptr.h"
10#include "base/memory/singleton.h"
11#include "chrome/browser/chromeos/login/wizard_accessibility_handler.h"
12#include "content/common/notification_registrar.h"
13#include "ui/base/keycodes/keyboard_codes.h"
14
15class Profile;
16namespace views {
17class Accelerator;
18class View;
19}
20
21namespace chromeos {
22
23// Class that provides convenience methods to enable accessibility for a
24// specified View.
25class WizardAccessibilityHelper {
26 public:
27  // Get Singleton instance of WizardAccessibilityHelper.
28  static WizardAccessibilityHelper* GetInstance();
29
30  // Get accelerator for enabling accessibility.
31  static views::Accelerator GetAccelerator();
32
33  // Speak the given text if the accessibility pref is already set. |queue|
34  // specifies whether this utterance will be queued or spoken immediately.
35  // |interruptible| specified whether this utterance can be flushed by a
36  // subsequent utterance.
37  // TODO (chaitanyag): Change API to use string16 instead of char*.
38  void MaybeSpeak(const char* str, bool queue, bool interruptible);
39
40  // Unregisters all accessibility notifications
41  void UnregisterNotifications();
42
43  // Toggles accessibility support.
44  void ToggleAccessibility();
45
46  // Initialize accessibility
47  void Init();
48
49 private:
50  friend struct DefaultSingletonTraits<WizardAccessibilityHelper>;
51
52  WizardAccessibilityHelper();
53
54  virtual ~WizardAccessibilityHelper() {}
55
56  void RegisterNotifications();
57
58  bool IsAccessibilityEnabled();
59
60  void SetAccessibilityEnabled(bool);
61
62  static scoped_ptr<views::Accelerator> accelerator_;
63
64  scoped_ptr<WizardAccessibilityHandler> accessibility_handler_;
65
66  Profile* profile_;
67
68  // Used for tracking registrations to accessibility notifications.
69  NotificationRegistrar registrar_;
70
71  bool registered_notifications_;
72
73  DISALLOW_COPY_AND_ASSIGN(WizardAccessibilityHelper);
74};
75
76}  // namespace chromeos
77
78#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_WIZARD_ACCESSIBILITY_HELPER_H_
79