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

Unified Diff: ui/chromeos/touch_accessibility_enabler.h

Issue 2584063002: Re-land: Toggle spoken feedback if two fingers are held down. (Closed)
Patch Set: Only toggle spoken feedback on CFM devices Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/chromeos/BUILD.gn ('k') | ui/chromeos/touch_accessibility_enabler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « ui/chromeos/BUILD.gn ('k') | ui/chromeos/touch_accessibility_enabler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698