Index: ui/chromeos/touch_exploration_controller.h |
diff --git a/ui/chromeos/touch_exploration_controller.h b/ui/chromeos/touch_exploration_controller.h |
index 12f0bfa2fcebe0e32d1289d5343f9a0d1dfb0552..021ed684c7a3bd5e0ea4b20b63ab5a43b9818b50 100644 |
--- a/ui/chromeos/touch_exploration_controller.h |
+++ b/ui/chromeos/touch_exploration_controller.h |
@@ -39,6 +39,11 @@ class TouchExplorationControllerDelegate { |
// Takes an int from 0.0 to 100.0 that indicates the percent the volume |
// should be set to. |
virtual void SetOutputLevel(int volume) = 0; |
+ |
+ // This function should be called whenever the delegate should play an earcon. |
+ // In the future a parameter can be passed to indicate what sound should be |
+ // played. |
+ virtual void PlayEarCon() = 0; |
}; |
// TouchExplorationController is used in tandem with "Spoken Feedback" to |
@@ -56,7 +61,9 @@ class TouchExplorationControllerDelegate { |
// right would correspond to the keyboard short cut shift+search+right. |
// When two or more fingers are pressed initially, from then on the events |
// are passed through, but with the initial finger removed - so if you swipe |
-// down with two fingers, the running app will see a one-finger swipe. Slide |
+// down with two fingers, the running app will see a one-finger swipe. If the |
+// user holds down the corner of the screen until an earcon sounds, all |
+// subsequent fingers will also be passed through in a similar manner. Slide |
// gestures performed on the edge of the screen can change settings |
// continuously. For example, sliding a finger along the right side of the |
// screen will change the volume. |
@@ -165,6 +172,8 @@ class UI_CHROMEOS_EXPORT TouchExplorationController |
const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); |
ui::EventRewriteStatus InTwoToOneFinger( |
const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); |
+ ui::EventRewriteStatus InCornerPassthrough( |
+ const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); |
ui::EventRewriteStatus InPassthrough( |
const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); |
ui::EventRewriteStatus InGestureInProgress( |
@@ -176,12 +185,21 @@ class UI_CHROMEOS_EXPORT TouchExplorationController |
ui::EventRewriteStatus InSlideGesture( |
const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); |
- // This timer is started every time we get the first press event, and |
- // it fires after the double-click timeout elapses (300 ms by default). |
+ // This timer is started every time we get the first press event and the |
+ // finger is not in the corner of the screen. |
+ // It fires after the double-click timeout elapses (300 ms by default). |
// If the user taps and releases within 300 ms and doesn't press again, |
- // we treat that as a single mouse move (touch exploration) event. |
+ // we treat that as a single mouse move (touch exploration) event. If the user |
+ // completes a swipe gesture within 300 ms, then the gesture is processed. |
void OnTapTimerFired(); |
+ // This timer is started every timer we get the first press event and the |
+ // finger is in the corner of the screen. |
+ // It fires after the long_press timeout elapses (500 ms by default). If the |
+ // user is still in the corner by the time this timre fires, all subsequent |
+ // fingers added on the screen will be passed through. |
+ void OnLongPressTimerFired(); |
+ |
// Dispatch a new event outside of the event rewriting flow. |
void DispatchEvent(ui::Event* event); |
@@ -285,6 +303,11 @@ class UI_CHROMEOS_EXPORT TouchExplorationController |
// happens until all fingers are up. |
TWO_TO_ONE_FINGER, |
+ // If the user has pressed and held down the left corner past long press, |
+ // then as long as they are holding the corner, all subsequent fingers |
+ // registered will be in passthrough. |
+ CORNER_PASSTHROUGH, |
+ |
// If the user is in TWO_TO_ONE_FINGER with two fingers down and presses |
// a third finger, every finger and touch event is passed through until |
// all fingers are released. |
@@ -309,6 +332,8 @@ class UI_CHROMEOS_EXPORT TouchExplorationController |
TOP_EDGE = 1 << 1, |
LEFT_EDGE = 1 << 2, |
BOTTOM_EDGE = 1 << 3, |
+ BOTTOM_LEFT_CORNER = LEFT_EDGE | BOTTOM_EDGE, |
+ BOTTOM_RIGHT_CORNER = RIGHT_EDGE | BOTTOM_EDGE, |
}; |
// Given a point, if it is within the given bounds of an edge, returns the |
@@ -355,7 +380,10 @@ class UI_CHROMEOS_EXPORT TouchExplorationController |
// the location and id of the touch release is from here. |
scoped_ptr<ui::TouchEvent> last_two_to_one_; |
- // A timer to fire the mouse move event after the double-tap delay. |
+ // A timer that fires after a long press delay. |
+ base::OneShotTimer<TouchExplorationController> long_press_timer_; |
+ |
+ // A timer that fires after a double tap delay. |
base::OneShotTimer<TouchExplorationController> tap_timer_; |
// A timer to fire an indicating sound when sliding to change volume. |
@@ -381,6 +409,10 @@ class UI_CHROMEOS_EXPORT TouchExplorationController |
// This toggles whether VLOGS are turned on or not. |
bool VLOG_on_; |
+ // Indicates if a finger is in the lower left corner waiting for the timer to |
+ // run out. |
+ bool waiting_for_corner_passthrough_; |
+ |
DISALLOW_COPY_AND_ASSIGN(TouchExplorationController); |
}; |