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

Side by Side Diff: ui/chromeos/touch_exploration_controller.h

Issue 410783002: Corner Passthrough for Accessibility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@side-gestures
Patch Set: Added tests and Rebase off Master Created 6 years, 4 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_CHROMEOS_TOUCH_EXPLORATION_CONTROLLER_H_ 5 #ifndef UI_CHROMEOS_TOUCH_EXPLORATION_CONTROLLER_H_
6 #define UI_CHROMEOS_TOUCH_EXPLORATION_CONTROLLER_H_ 6 #define UI_CHROMEOS_TOUCH_EXPLORATION_CONTROLLER_H_
7 7
8 #include "base/timer/timer.h" 8 #include "base/timer/timer.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "ui/chromeos/ui_chromeos_export.h" 10 #include "ui/chromeos/ui_chromeos_export.h"
(...skipping 21 matching lines...) Expand all
32 public: 32 public:
33 virtual ~TouchExplorationControllerDelegate() {} 33 virtual ~TouchExplorationControllerDelegate() {}
34 34
35 // This function should be called whenever the delegate wants to play a sound 35 // This function should be called whenever the delegate wants to play a sound
36 // when the volume adjusts. 36 // when the volume adjusts.
37 virtual void PlayVolumeAdjustSound() = 0; 37 virtual void PlayVolumeAdjustSound() = 0;
38 38
39 // Takes an int from 0.0 to 100.0 that indicates the percent the volume 39 // Takes an int from 0.0 to 100.0 that indicates the percent the volume
40 // should be set to. 40 // should be set to.
41 virtual void SetOutputLevel(int volume) = 0; 41 virtual void SetOutputLevel(int volume) = 0;
42
43 // This function should be called whenever the delegate should play an earcon.
44 // In the future a parameter can be passed to indicate what sound should be
45 // played.
46 virtual void PlayEarCon() = 0;
42 }; 47 };
43 48
44 // TouchExplorationController is used in tandem with "Spoken Feedback" to 49 // TouchExplorationController is used in tandem with "Spoken Feedback" to
45 // make the touch UI accessible. Gestures performed in the middle of the screen 50 // make the touch UI accessible. Gestures performed in the middle of the screen
46 // are mapped to accessiblity key shortcuts while gestures performed on the edge 51 // are mapped to accessiblity key shortcuts while gestures performed on the edge
47 // of the screen can change settings. 52 // of the screen can change settings.
48 // 53 //
49 // ** Short version ** 54 // ** Short version **
50 // 55 //
51 // At a high-level, single-finger events are used for accessibility - 56 // At a high-level, single-finger events are used for accessibility -
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 ui::EventRewriteStatus InSingleTapPressed( 163 ui::EventRewriteStatus InSingleTapPressed(
159 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 164 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
160 ui::EventRewriteStatus InSingleTapOrTouchExploreReleased( 165 ui::EventRewriteStatus InSingleTapOrTouchExploreReleased(
161 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 166 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
162 ui::EventRewriteStatus InDoubleTapPressed( 167 ui::EventRewriteStatus InDoubleTapPressed(
163 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 168 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
164 ui::EventRewriteStatus InTouchExploration( 169 ui::EventRewriteStatus InTouchExploration(
165 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 170 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
166 ui::EventRewriteStatus InTwoToOneFinger( 171 ui::EventRewriteStatus InTwoToOneFinger(
167 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 172 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
173 ui::EventRewriteStatus InCornerPassthrough(
174 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
168 ui::EventRewriteStatus InPassthrough( 175 ui::EventRewriteStatus InPassthrough(
169 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 176 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
170 ui::EventRewriteStatus InGestureInProgress( 177 ui::EventRewriteStatus InGestureInProgress(
171 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 178 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
172 ui::EventRewriteStatus InTouchExploreSecondPress( 179 ui::EventRewriteStatus InTouchExploreSecondPress(
173 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 180 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
174 ui::EventRewriteStatus InWaitForRelease( 181 ui::EventRewriteStatus InWaitForRelease(
175 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 182 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
176 ui::EventRewriteStatus InSlideGesture( 183 ui::EventRewriteStatus InSlideGesture(
177 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event); 184 const ui::TouchEvent& event, scoped_ptr<ui::Event>* rewritten_event);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 // touch explore. Any fingers pressed past the first two are ignored. 285 // touch explore. Any fingers pressed past the first two are ignored.
279 TOUCH_EXPLORE_SECOND_PRESS, 286 TOUCH_EXPLORE_SECOND_PRESS,
280 287
281 // The user placed two fingers down within the grace period. 288 // The user placed two fingers down within the grace period.
282 // We're now in two to one finger mode until one of the fingers is 289 // We're now in two to one finger mode until one of the fingers is
283 // lifted. The first finger is ignored and the events for the second 290 // lifted. The first finger is ignored and the events for the second
284 // finger are passed throuugh. If either finger is released, nothing 291 // finger are passed throuugh. If either finger is released, nothing
285 // happens until all fingers are up. 292 // happens until all fingers are up.
286 TWO_TO_ONE_FINGER, 293 TWO_TO_ONE_FINGER,
287 294
295 // If the user has pressed and held down the left corner past long press,
296 // then as long as they are holding the corner, all subsequent fingers
297 // registered will be in passthrough.
298 CORNER_PASSTHROUGH,
299
288 // If the user is in TWO_TO_ONE_FINGER with two fingers down and presses 300 // If the user is in TWO_TO_ONE_FINGER with two fingers down and presses
289 // a third finger, every finger and touch event is passed through until 301 // a third finger, every finger and touch event is passed through until
290 // all fingers are released. 302 // all fingers are released.
291 PASSTHROUGH, 303 PASSTHROUGH,
292 304
293 // If the user lifted a finger in TWO_TO_ONE_FINGER, they must release 305 // If the user lifted a finger in TWO_TO_ONE_FINGER, they must release
294 // all fingers before completing any more actions. This state is 306 // all fingers before completing any more actions. This state is
295 // generally useful for developing new features, because it creates a 307 // generally useful for developing new features, because it creates a
296 // simple way to handle a dead end in user flow. 308 // simple way to handle a dead end in user flow.
297 WAIT_FOR_RELEASE, 309 WAIT_FOR_RELEASE,
298 310
299 // If the user is within the given bounds from an edge of the screen, not 311 // If the user is within the given bounds from an edge of the screen, not
300 // including corners, then the resulting movements will be interpreted as 312 // including corners, then the resulting movements will be interpreted as
301 // slide gestures. 313 // slide gestures.
302 SLIDE_GESTURE, 314 SLIDE_GESTURE,
303 }; 315 };
304 316
305 enum ScreenLocation { 317 enum ScreenLocation {
306 // Hot "edges" of the screen are each represented by a respective bit. 318 // Hot "edges" of the screen are each represented by a respective bit.
307 NO_EDGE = 0, 319 NO_EDGE = 0,
308 RIGHT_EDGE = 1 << 0, 320 RIGHT_EDGE = 1 << 0,
309 TOP_EDGE = 1 << 1, 321 TOP_EDGE = 1 << 1,
310 LEFT_EDGE = 1 << 2, 322 LEFT_EDGE = 1 << 2,
311 BOTTOM_EDGE = 1 << 3, 323 BOTTOM_EDGE = 1 << 3,
324 BOTTOM_LEFT_CORNER = LEFT_EDGE | BOTTOM_EDGE,
aboxhall 2014/07/24 18:26:34 Very nice!
325 BOTTOM_RIGHT_CORNER = RIGHT_EDGE | BOTTOM_EDGE,
312 }; 326 };
313 327
328
aboxhall 2014/07/24 18:26:34 nit: rogue newline
lisayin 2014/07/25 20:11:57 Done.
314 // Given a point, if it is within the given bounds of an edge, returns the 329 // Given a point, if it is within the given bounds of an edge, returns the
315 // edge. If it is within the given bounds of two edges, returns an int with 330 // edge. If it is within the given bounds of two edges, returns an int with
316 // both bits that represent the respective edges turned on. Otherwise returns 331 // both bits that represent the respective edges turned on. Otherwise returns
317 // SCREEN_CENTER. 332 // SCREEN_CENTER.
318 int FindEdgesWithinBounds(gfx::Point point, float bounds); 333 int FindEdgesWithinBounds(gfx::Point point, float bounds);
319 334
320 void VlogState(const char* function_name); 335 void VlogState(const char* function_name);
321 336
322 void VlogEvent(const ui::TouchEvent& event, const char* function_name); 337 void VlogEvent(const ui::TouchEvent& event, const char* function_name);
323 338
(...skipping 24 matching lines...) Expand all
348 363
349 // The last synthesized mouse move event. When the user double-taps, 364 // The last synthesized mouse move event. When the user double-taps,
350 // we send the passed-through tap to the location of this event. 365 // we send the passed-through tap to the location of this event.
351 scoped_ptr<ui::TouchEvent> last_touch_exploration_; 366 scoped_ptr<ui::TouchEvent> last_touch_exploration_;
352 367
353 // The last event from the finger that is being passed through in 368 // The last event from the finger that is being passed through in
354 // TWO_TO_ONE_FINGER. When the user lifts a finger during two to one, 369 // TWO_TO_ONE_FINGER. When the user lifts a finger during two to one,
355 // the location and id of the touch release is from here. 370 // the location and id of the touch release is from here.
356 scoped_ptr<ui::TouchEvent> last_two_to_one_; 371 scoped_ptr<ui::TouchEvent> last_two_to_one_;
357 372
358 // A timer to fire the mouse move event after the double-tap delay. 373 // A timer to fire to change states if a pre-set action is not completed in
374 // the allocaated time.
aboxhall 2014/07/24 18:26:34 nit: allocaated (Dutch?)
lisayin 2014/07/25 20:11:57 Done.
359 base::OneShotTimer<TouchExplorationController> tap_timer_; 375 base::OneShotTimer<TouchExplorationController> tap_timer_;
aboxhall 2014/07/24 18:26:34 This may need to be renamed, based on the comment
360 376
361 // A timer to fire an indicating sound when sliding to change volume. 377 // A timer to fire an indicating sound when sliding to change volume.
362 base::RepeatingTimer<TouchExplorationController> sound_timer_; 378 base::RepeatingTimer<TouchExplorationController> sound_timer_;
363 379
364 // For testing only, an event handler to use for generated events 380 // For testing only, an event handler to use for generated events
365 // outside of the normal event rewriting flow. 381 // outside of the normal event rewriting flow.
366 ui::EventHandler* event_handler_for_testing_; 382 ui::EventHandler* event_handler_for_testing_;
367 383
368 // A default gesture detector config, so we can share the same 384 // A default gesture detector config, so we can share the same
369 // timeout and pixel slop constants. 385 // timeout and pixel slop constants.
370 ui::GestureDetector::Config gesture_detector_config_; 386 ui::GestureDetector::Config gesture_detector_config_;
371 387
372 // Gesture Handler to interpret the touch events. 388 // Gesture Handler to interpret the touch events.
373 ui::GestureProviderAura gesture_provider_; 389 ui::GestureProviderAura gesture_provider_;
374 390
375 // The previous state entered. 391 // The previous state entered.
376 State prev_state_; 392 State prev_state_;
377 393
378 // A copy of the previous event passed. 394 // A copy of the previous event passed.
379 scoped_ptr<ui::TouchEvent> prev_event_; 395 scoped_ptr<ui::TouchEvent> prev_event_;
380 396
381 // This toggles whether VLOGS are turned on or not. 397 // This toggles whether VLOGS are turned on or not.
382 bool VLOG_on_; 398 bool VLOG_on_;
383 399
400 // Indicates if a finger is in the lower left corner waiting for the timer to
401 // run out.
402 bool waiting_for_corner_passthrough_;
403
384 DISALLOW_COPY_AND_ASSIGN(TouchExplorationController); 404 DISALLOW_COPY_AND_ASSIGN(TouchExplorationController);
385 }; 405 };
386 406
387 } // namespace ui 407 } // namespace ui
388 408
389 #endif // UI_CHROMEOS_TOUCH_EXPLORATION_CONTROLLER_H_ 409 #endif // UI_CHROMEOS_TOUCH_EXPLORATION_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698