1// Copyright 2014 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 ASH_ACCELERATORS_SPOKEN_FEEDBACK_TOGGLER_H_
6#define ASH_ACCELERATORS_SPOKEN_FEEDBACK_TOGGLER_H_
7
8#include "ash/accelerators/key_hold_detector.h"
9#include "ash/ash_export.h"
10#include "base/memory/scoped_ptr.h"
11#include "ui/events/event_handler.h"
12
13namespace ui {
14class KeyEvent;
15}
16
17namespace ash {
18
19// A KeyHoldDetector delegate to toggle spoken feedback.
20class ASH_EXPORT SpokenFeedbackToggler : public KeyHoldDetector::Delegate {
21 public:
22  static bool IsEnabled();
23  static void SetEnabled(bool enabled);
24  static scoped_ptr<ui::EventHandler> CreateHandler();
25
26  // A scoped object to enable and disable the magnifier accelerator for test.
27  class ScopedEnablerForTest {
28   public:
29    ScopedEnablerForTest() {
30      SetEnabled(true);
31    }
32    ~ScopedEnablerForTest() {
33      SetEnabled(false);
34    }
35
36   private:
37    DISALLOW_COPY_AND_ASSIGN(ScopedEnablerForTest);
38  };
39
40 private:
41  // KeyHoldDetector overrides:
42  virtual bool ShouldProcessEvent(const ui::KeyEvent* event) const OVERRIDE;
43  virtual bool IsStartEvent(const ui::KeyEvent* event) const OVERRIDE;
44  virtual void OnKeyHold(const ui::KeyEvent* event) OVERRIDE;
45  virtual void OnKeyUnhold(const ui::KeyEvent* event) OVERRIDE;
46
47  SpokenFeedbackToggler();
48  virtual ~SpokenFeedbackToggler();
49
50  bool toggled_;
51
52  DISALLOW_COPY_AND_ASSIGN(SpokenFeedbackToggler);
53};
54
55}  // namespace ash
56
57#endif  // ASH_ACCELERATORS_SPOKEN_FEEDBACK_TOGGLER_H_
58