| Index: ui/chromeos/touch_accessibility_enabler.cc
|
| diff --git a/ui/chromeos/touch_accessibility_enabler.cc b/ui/chromeos/touch_accessibility_enabler.cc
|
| deleted file mode 100644
|
| index 07d5c80005516624d0102259d5707ff9b41e162c..0000000000000000000000000000000000000000
|
| --- a/ui/chromeos/touch_accessibility_enabler.cc
|
| +++ /dev/null
|
| @@ -1,158 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "ui/chromeos/touch_accessibility_enabler.h"
|
| -
|
| -#include <math.h>
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/metrics/user_metrics.h"
|
| -#include "base/time/default_tick_clock.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_event_dispatcher.h"
|
| -#include "ui/aura/window_tree_host.h"
|
| -#include "ui/events/event.h"
|
| -#include "ui/events/event_processor.h"
|
| -#include "ui/events/event_utils.h"
|
| -
|
| -namespace ui {
|
| -
|
| -namespace {
|
| -
|
| -// Delay between timer callbacks. Each one plays a tick sound.
|
| -constexpr int kTimerDelayInMS = 500;
|
| -
|
| -// The number of ticks of the timer before the first sound is generated.
|
| -constexpr int kTimerTicksOfFirstSoundFeedback = 6;
|
| -
|
| -// The number of ticks of the timer before toggling spoken feedback.
|
| -constexpr int kTimerTicksToToggleSpokenFeedback = 10;
|
| -
|
| -} // namespace
|
| -
|
| -TouchAccessibilityEnabler::TouchAccessibilityEnabler(
|
| - aura::Window* root_window,
|
| - TouchAccessibilityEnablerDelegate* delegate)
|
| - : root_window_(root_window),
|
| - delegate_(delegate),
|
| - state_(NO_FINGERS_DOWN),
|
| - tick_clock_(NULL) {
|
| - DCHECK(root_window);
|
| - DCHECK(delegate);
|
| - root_window_->AddPreTargetHandler(this);
|
| -}
|
| -
|
| -TouchAccessibilityEnabler::~TouchAccessibilityEnabler() {
|
| - root_window_->RemovePreTargetHandler(this);
|
| -}
|
| -
|
| -void TouchAccessibilityEnabler::OnTouchEvent(ui::TouchEvent* event) {
|
| - // Skip events rewritten by TouchExplorationController, it will hand
|
| - // us the unrewritten events directly.
|
| - if (!(event->flags() & ui::EF_TOUCH_ACCESSIBILITY))
|
| - HandleTouchEvent(*event);
|
| -}
|
| -
|
| -void TouchAccessibilityEnabler::HandleTouchEvent(const ui::TouchEvent& event) {
|
| - DCHECK(!(event.flags() & ui::EF_TOUCH_ACCESSIBILITY));
|
| - const ui::EventType type = event.type();
|
| - const gfx::PointF& location = event.location_f();
|
| - const int touch_id = event.touch_id();
|
| -
|
| - if (type == ui::ET_TOUCH_PRESSED) {
|
| - touch_locations_.insert(std::pair<int, gfx::PointF>(touch_id, location));
|
| - } else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) {
|
| - auto iter = touch_locations_.find(touch_id);
|
| -
|
| - // Can happen if this object is constructed while fingers were down.
|
| - if (iter == touch_locations_.end())
|
| - return;
|
| -
|
| - touch_locations_.erase(touch_id);
|
| - } else if (type == ui::ET_TOUCH_MOVED) {
|
| - auto iter = touch_locations_.find(touch_id);
|
| -
|
| - // Can happen if this object is constructed while fingers were down.
|
| - if (iter == touch_locations_.end())
|
| - return;
|
| -
|
| - float delta = (location - iter->second).Length();
|
| - if (delta > gesture_detector_config_.double_tap_slop) {
|
| - state_ = WAIT_FOR_NO_FINGERS;
|
| - CancelTimer();
|
| - return;
|
| - }
|
| - } else {
|
| - NOTREACHED() << "Unexpected event type received: " << event.name();
|
| - return;
|
| - }
|
| -
|
| - if (touch_locations_.size() == 0) {
|
| - state_ = NO_FINGERS_DOWN;
|
| - CancelTimer();
|
| - return;
|
| - }
|
| -
|
| - if (touch_locations_.size() > 2) {
|
| - state_ = WAIT_FOR_NO_FINGERS;
|
| - CancelTimer();
|
| - return;
|
| - }
|
| -
|
| - if (state_ == NO_FINGERS_DOWN && event.type() == ui::ET_TOUCH_PRESSED) {
|
| - state_ = ONE_FINGER_DOWN;
|
| - } else if (state_ == ONE_FINGER_DOWN &&
|
| - event.type() == ui::ET_TOUCH_PRESSED) {
|
| - state_ = TWO_FINGERS_DOWN;
|
| - two_finger_start_time_ = Now();
|
| - StartTimer();
|
| - }
|
| -}
|
| -
|
| -base::TimeTicks TouchAccessibilityEnabler::Now() {
|
| - if (tick_clock_) {
|
| - // This is the same as what EventTimeForNow() does, but here we do it
|
| - // with a clock that can be replaced with a simulated clock for tests.
|
| - return tick_clock_->NowTicks();
|
| - }
|
| - return ui::EventTimeForNow();
|
| -}
|
| -
|
| -void TouchAccessibilityEnabler::StartTimer() {
|
| - if (timer_.IsRunning())
|
| - return;
|
| -
|
| - timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kTimerDelayInMS),
|
| - this, &ui::TouchAccessibilityEnabler::OnTimer);
|
| -}
|
| -
|
| -void TouchAccessibilityEnabler::CancelTimer() {
|
| - if (timer_.IsRunning())
|
| - timer_.Stop();
|
| -}
|
| -
|
| -void TouchAccessibilityEnabler::OnTimer() {
|
| - base::TimeTicks now = Now();
|
| - double tick_count_f =
|
| - (now - two_finger_start_time_).InMillisecondsF() / kTimerDelayInMS;
|
| - int tick_count = roundf(tick_count_f);
|
| -
|
| - if (tick_count == kTimerTicksOfFirstSoundFeedback) {
|
| - base::RecordAction(
|
| - base::UserMetricsAction("Accessibility.TwoFingersHeldDown"));
|
| - }
|
| -
|
| - if (tick_count >= kTimerTicksOfFirstSoundFeedback &&
|
| - tick_count < kTimerTicksToToggleSpokenFeedback) {
|
| - delegate_->PlaySpokenFeedbackToggleCountdown(tick_count);
|
| - }
|
| - if (tick_count == kTimerTicksToToggleSpokenFeedback) {
|
| - delegate_->ToggleSpokenFeedback();
|
| - state_ = WAIT_FOR_NO_FINGERS;
|
| - }
|
| -}
|
| -
|
| -} // namespace ui
|
|
|