| Index: ui/chromeos/touch_accessibility_enabler.h
|
| diff --git a/ui/chromeos/touch_accessibility_enabler.h b/ui/chromeos/touch_accessibility_enabler.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1b25990a105b1562ec5aa46863057ae089567f87
|
| --- /dev/null
|
| +++ b/ui/chromeos/touch_accessibility_enabler.h
|
| @@ -0,0 +1,119 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef UI_CHROMEOS_TOUCH_ACCESSIBILITY_ENABLER_H_
|
| +#define UI_CHROMEOS_TOUCH_ACCESSIBILITY_ENABLER_H_
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/time/tick_clock.h"
|
| +#include "base/timer/timer.h"
|
| +#include "base/values.h"
|
| +#include "ui/chromeos/ui_chromeos_export.h"
|
| +#include "ui/events/event.h"
|
| +#include "ui/events/event_handler.h"
|
| +#include "ui/events/gesture_detection/gesture_detector.h"
|
| +
|
| +namespace aura {
|
| +class Window;
|
| +}
|
| +
|
| +namespace ui {
|
| +
|
| +class Event;
|
| +class EventHandler;
|
| +class TouchEvent;
|
| +
|
| +// A delegate to handle commands in response to detected accessibility gesture
|
| +// events.
|
| +class TouchAccessibilityEnablerDelegate {
|
| + public:
|
| + virtual ~TouchAccessibilityEnablerDelegate() {}
|
| +
|
| + // While the user holds down two fingers on a touch screen, which is the
|
| + // gesture to enable spoken feedback (if held down long enough), play a sound
|
| + // every "tick" (approximately every half-second) to warn the user something
|
| + // is about to happen.
|
| + virtual void PlaySpokenFeedbackToggleCountdown(int tick_count) {}
|
| +
|
| + // Toggles spoken feedback.
|
| + virtual void ToggleSpokenFeedback() {}
|
| +};
|
| +
|
| +// TouchAccessibilityEnabler triggers turning spoken feedback on or off
|
| +// by holding down two fingers on the touch screen for several seconds.
|
| +class UI_CHROMEOS_EXPORT TouchAccessibilityEnabler : public ui::EventHandler {
|
| + public:
|
| + TouchAccessibilityEnabler(aura::Window* root_window,
|
| + ui::TouchAccessibilityEnablerDelegate* delegate);
|
| + ~TouchAccessibilityEnabler() override;
|
| +
|
| + bool IsInNoFingersDownForTesting() { return state_ == NO_FINGERS_DOWN; }
|
| + bool IsInOneFingerDownForTesting() { return state_ == ONE_FINGER_DOWN; }
|
| + bool IsInTwoFingersDownForTesting() { return state_ == TWO_FINGERS_DOWN; }
|
| + bool IsInWaitForNoFingersForTesting() {
|
| + return state_ == WAIT_FOR_NO_FINGERS;
|
| + }
|
| + void TriggerOnTimerForTesting() { OnTimer(); }
|
| +
|
| + void HandleTouchEvent(const ui::TouchEvent& event);
|
| +
|
| + private:
|
| + // Overridden from ui::EventHandler
|
| + void OnTouchEvent(ui::TouchEvent* event) override;
|
| +
|
| + void StartTimer();
|
| + void CancelTimer();
|
| + void OnTimer();
|
| +
|
| + // Returns the current time of the tick clock.
|
| + base::TimeTicks Now();
|
| +
|
| + enum State {
|
| + // No fingers are down.
|
| + NO_FINGERS_DOWN,
|
| +
|
| + // One finger is down and it's possible this could be a two-finger-hold.
|
| + ONE_FINGER_DOWN,
|
| +
|
| + // Two fingers are down and stationary and we will trigger enabling
|
| + // spoken feedback after a delay.
|
| + TWO_FINGERS_DOWN,
|
| +
|
| + // This is the "reject" state when we get anything other than two fingers
|
| + // held down and stationary. Stay in this state until all fingers are
|
| + // removed.
|
| + WAIT_FOR_NO_FINGERS
|
| + };
|
| +
|
| + aura::Window* root_window_;
|
| +
|
| + // Called when we detect a long-press of two fingers. Not owned.
|
| + ui::TouchAccessibilityEnablerDelegate* delegate_;
|
| +
|
| + // The current state.
|
| + State state_;
|
| +
|
| + // The time when we entered the two finger state.
|
| + base::TimeTicks two_finger_start_time_;
|
| +
|
| + // Map of touch ids to their initial locations.
|
| + std::map<int, gfx::PointF> touch_locations_;
|
| +
|
| + // A timer that triggers repeatedly while two fingers are held down.
|
| + base::RepeatingTimer timer_;
|
| +
|
| + // A default gesture detector config, so we can share the same
|
| + // timeout and pixel slop constants.
|
| + ui::GestureDetector::Config gesture_detector_config_;
|
| +
|
| + // When touch_accessibility_enabler gets time relative to real time during
|
| + // testing, this clock is set to the simulated clock and used.
|
| + base::TickClock* tick_clock_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TouchAccessibilityEnabler);
|
| +};
|
| +
|
| +} // namespace ui
|
| +
|
| +#endif // UI_CHROMEOS_TOUCH_ACCESSIBILITY_ENABLER_H_
|
|
|