Commit 9838087d authored by Kevin Schoedel's avatar Kevin Schoedel Committed by Commit Bot

[chromecast] Tap action for touch exploration

Plumbs the CastSystemGestureDispatcher through to touch exploration,
and invokes tap actions when touch exploration calls for a tap at a
location outside lift activation bounds (currently always the case).
This allows waking from the ambient screen in screen reading mode.

Bug: internal b/112073530
Test: manual
Change-Id: Iab086ee76c0aa254c23e2635a4b283ff6156434d
Reviewed-on: https://chromium-review.googlesource.com/1168117
Commit-Queue: Ryan Daum <rdaum@chromium.org>
Reviewed-by: default avatarRyan Daum <rdaum@chromium.org>
Reviewed-by: default avatarAlex Sakhartchouk <alexst@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582908}
parent c6163d95
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "chromecast/graphics/accessibility/focus_ring_controller.h" #include "chromecast/graphics/accessibility/focus_ring_controller.h"
#include "chromecast/graphics/accessibility/fullscreen_magnification_controller.h" #include "chromecast/graphics/accessibility/fullscreen_magnification_controller.h"
#include "chromecast/graphics/cast_window_manager_aura.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
#include "ui/aura/window_tree_host.h" #include "ui/aura/window_tree_host.h"
#include "ui/wm/public/activation_client.h" #include "ui/wm/public/activation_client.h"
...@@ -14,11 +15,11 @@ namespace chromecast { ...@@ -14,11 +15,11 @@ namespace chromecast {
namespace shell { namespace shell {
AccessibilityManager::AccessibilityManager( AccessibilityManager::AccessibilityManager(
aura::WindowTreeHost* window_tree_host) CastWindowManagerAura* window_manager)
: window_tree_host_(window_tree_host), : window_tree_host_(window_manager->window_tree_host()),
accessibility_sound_proxy_(std::make_unique<AccessibilitySoundPlayer>()) { accessibility_sound_proxy_(std::make_unique<AccessibilitySoundPlayer>()) {
DCHECK(window_tree_host); DCHECK(window_tree_host_);
aura::Window* root_window = window_tree_host->window()->GetRootWindow(); aura::Window* root_window = window_tree_host_->window()->GetRootWindow();
wm::ActivationClient* activation_client = wm::ActivationClient* activation_client =
wm::GetActivationClient(root_window); wm::GetActivationClient(root_window);
focus_ring_controller_ = focus_ring_controller_ =
...@@ -28,7 +29,8 @@ AccessibilityManager::AccessibilityManager( ...@@ -28,7 +29,8 @@ AccessibilityManager::AccessibilityManager(
touch_exploration_manager_ = std::make_unique<TouchExplorationManager>( touch_exploration_manager_ = std::make_unique<TouchExplorationManager>(
root_window, activation_client, root_window, activation_client,
accessibility_focus_ring_controller_.get(), accessibility_focus_ring_controller_.get(),
&accessibility_sound_proxy_); &accessibility_sound_proxy_,
window_manager->GetGestureHandler());
triple_tap_detector_ = std::make_unique<TripleTapDetector>(root_window, this); triple_tap_detector_ = std::make_unique<TripleTapDetector>(root_window, this);
magnification_controller_ = magnification_controller_ =
std::make_unique<FullscreenMagnificationController>(root_window); std::make_unique<FullscreenMagnificationController>(root_window);
......
...@@ -19,6 +19,7 @@ class WindowTreeHost; ...@@ -19,6 +19,7 @@ class WindowTreeHost;
namespace chromecast { namespace chromecast {
class CastWindowManagerAura;
class FocusRingController; class FocusRingController;
class MagnificationController; class MagnificationController;
...@@ -28,7 +29,7 @@ namespace shell { ...@@ -28,7 +29,7 @@ namespace shell {
// to the responsible party. // to the responsible party.
class AccessibilityManager : public TripleTapDetectorDelegate { class AccessibilityManager : public TripleTapDetectorDelegate {
public: public:
explicit AccessibilityManager(aura::WindowTreeHost* window_tree_host); explicit AccessibilityManager(CastWindowManagerAura* window_manager);
~AccessibilityManager() override; ~AccessibilityManager() override;
// Sets the focus ring color. // Sets the focus ring color.
......
...@@ -611,6 +611,8 @@ void TouchExplorationController::MaybeSendSimulatedTapInLiftActivationBounds( ...@@ -611,6 +611,8 @@ void TouchExplorationController::MaybeSendSimulatedTapInLiftActivationBounds(
lift_activation_bounds_.Contains(location)) { lift_activation_bounds_.Contains(location)) {
accessibility_sound_player_->PlayTouchTypeEarcon(); accessibility_sound_player_->PlayTouchTypeEarcon();
SendSimulatedTap(); SendSimulatedTap();
} else {
delegate_->HandleTap(location);
} }
} }
......
...@@ -43,6 +43,10 @@ class TouchExplorationControllerDelegate { ...@@ -43,6 +43,10 @@ class TouchExplorationControllerDelegate {
// Called when the user performed an accessibility gesture while in touch // Called when the user performed an accessibility gesture while in touch
// accessibility mode, that should be forwarded to ChromeVox. // accessibility mode, that should be forwarded to ChromeVox.
virtual void HandleAccessibilityGesture(ax::mojom::Gesture gesture) = 0; virtual void HandleAccessibilityGesture(ax::mojom::Gesture gesture) = 0;
// Called when the user has performed a single tap, if it is not within
// lift activation bounds.
virtual void HandleTap(const gfx::Point touch_location) = 0;
}; };
// TouchExplorationController is used in tandem with "Spoken Feedback" to // TouchExplorationController is used in tandem with "Spoken Feedback" to
......
...@@ -81,6 +81,9 @@ class MockTouchExplorationControllerDelegate ...@@ -81,6 +81,9 @@ class MockTouchExplorationControllerDelegate
void HandleAccessibilityGesture(ax::mojom::Gesture gesture) override { void HandleAccessibilityGesture(ax::mojom::Gesture gesture) override {
last_gesture_ = gesture; last_gesture_ = gesture;
} }
void HandleTap(const gfx::Point touch_location) override {
last_tap_ = touch_location;
}
const std::vector<float> VolumeChanges() const { return volume_changes_; } const std::vector<float> VolumeChanges() const { return volume_changes_; }
ax::mojom::Gesture GetLastGesture() const { return last_gesture_; } ax::mojom::Gesture GetLastGesture() const { return last_gesture_; }
...@@ -89,6 +92,7 @@ class MockTouchExplorationControllerDelegate ...@@ -89,6 +92,7 @@ class MockTouchExplorationControllerDelegate
private: private:
std::vector<float> volume_changes_; std::vector<float> volume_changes_;
ax::mojom::Gesture last_gesture_ = ax::mojom::Gesture::kNone; ax::mojom::Gesture last_gesture_ = ax::mojom::Gesture::kNone;
gfx::Point last_tap_;
}; };
class MockAccessibilitySoundPlayer : public AccessibilitySoundPlayer { class MockAccessibilitySoundPlayer : public AccessibilitySoundPlayer {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "chromecast/browser/cast_browser_process.h" #include "chromecast/browser/cast_browser_process.h"
#include "chromecast/common/extensions_api/accessibility_private.h" #include "chromecast/common/extensions_api/accessibility_private.h"
#include "chromecast/graphics/cast_focus_client_aura.h" #include "chromecast/graphics/cast_focus_client_aura.h"
#include "chromecast/graphics/cast_gesture_handler.h"
#include "extensions/browser/event_router.h" #include "extensions/browser/event_router.h"
#include "ui/accessibility/ax_enum_util.h" #include "ui/accessibility/ax_enum_util.h"
#include "ui/aura/client/aura_constants.h" #include "ui/aura/client/aura_constants.h"
...@@ -24,12 +25,14 @@ TouchExplorationManager::TouchExplorationManager( ...@@ -24,12 +25,14 @@ TouchExplorationManager::TouchExplorationManager(
aura::Window* root_window, aura::Window* root_window,
wm::ActivationClient* activation_client, wm::ActivationClient* activation_client,
AccessibilityFocusRingController* accessibility_focus_ring_controller, AccessibilityFocusRingController* accessibility_focus_ring_controller,
AccessibilitySoundPlayer* accessibility_sound_player) AccessibilitySoundPlayer* accessibility_sound_player,
CastGestureHandler* cast_gesture_handler)
: touch_exploration_enabled_(false), : touch_exploration_enabled_(false),
root_window_(root_window), root_window_(root_window),
activation_client_(activation_client), activation_client_(activation_client),
accessibility_focus_ring_controller_(accessibility_focus_ring_controller), accessibility_focus_ring_controller_(accessibility_focus_ring_controller),
accessibility_sound_player_(accessibility_sound_player) { accessibility_sound_player_(accessibility_sound_player),
cast_gesture_handler_(cast_gesture_handler) {
DCHECK(root_window); DCHECK(root_window);
root_window->GetHost()->GetEventSource()->AddEventRewriter(this); root_window->GetHost()->GetEventSource()->AddEventRewriter(this);
UpdateTouchExplorationState(); UpdateTouchExplorationState();
...@@ -81,6 +84,11 @@ void TouchExplorationManager::HandleAccessibilityGesture( ...@@ -81,6 +84,11 @@ void TouchExplorationManager::HandleAccessibilityGesture(
extension_misc::kChromeVoxExtensionId, std::move(event)); extension_misc::kChromeVoxExtensionId, std::move(event));
} }
void TouchExplorationManager::HandleTap(const gfx::Point touch_location) {
cast_gesture_handler_->HandleTapDownGesture(touch_location);
cast_gesture_handler_->HandleTapGesture(touch_location);
}
void TouchExplorationManager::OnWindowActivated( void TouchExplorationManager::OnWindowActivated(
::wm::ActivationChangeObserver::ActivationReason reason, ::wm::ActivationChangeObserver::ActivationReason reason,
aura::Window* gained_active, aura::Window* gained_active,
......
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
#include "ui/wm/public/activation_client.h" #include "ui/wm/public/activation_client.h"
namespace chromecast { namespace chromecast {
class CastGestureHandler;
namespace shell { namespace shell {
// Responsible for initializing TouchExplorationController when spoken feedback // Responsible for initializing TouchExplorationController when spoken feedback
...@@ -29,7 +32,8 @@ class TouchExplorationManager : public ui::EventRewriter, ...@@ -29,7 +32,8 @@ class TouchExplorationManager : public ui::EventRewriter,
aura::Window* root_window, aura::Window* root_window,
wm::ActivationClient* activation_client, wm::ActivationClient* activation_client,
AccessibilityFocusRingController* accessibility_focus_ring_controller, AccessibilityFocusRingController* accessibility_focus_ring_controller,
AccessibilitySoundPlayer* accessibility_sound_player); AccessibilitySoundPlayer* accessibility_sound_player,
CastGestureHandler* cast_gesture_handler);
~TouchExplorationManager() override; ~TouchExplorationManager() override;
// Enable or disable touch exploration. // Enable or disable touch exploration.
...@@ -46,6 +50,7 @@ class TouchExplorationManager : public ui::EventRewriter, ...@@ -46,6 +50,7 @@ class TouchExplorationManager : public ui::EventRewriter,
// TouchExplorationControllerDelegate overrides: // TouchExplorationControllerDelegate overrides:
void HandleAccessibilityGesture(ax::mojom::Gesture gesture) override; void HandleAccessibilityGesture(ax::mojom::Gesture gesture) override;
void HandleTap(const gfx::Point touch_location) override;
// wm::ActivationChangeObserver overrides: // wm::ActivationChangeObserver overrides:
void OnWindowActivated( void OnWindowActivated(
...@@ -68,6 +73,7 @@ class TouchExplorationManager : public ui::EventRewriter, ...@@ -68,6 +73,7 @@ class TouchExplorationManager : public ui::EventRewriter,
wm::ActivationClient* activation_client_; wm::ActivationClient* activation_client_;
AccessibilityFocusRingController* accessibility_focus_ring_controller_; AccessibilityFocusRingController* accessibility_focus_ring_controller_;
AccessibilitySoundPlayer* accessibility_sound_player_; AccessibilitySoundPlayer* accessibility_sound_player_;
CastGestureHandler* cast_gesture_handler_;
DISALLOW_COPY_AND_ASSIGN(TouchExplorationManager); DISALLOW_COPY_AND_ASSIGN(TouchExplorationManager);
}; };
......
...@@ -535,8 +535,7 @@ void CastBrowserMainParts::PreMainMessageLoopRun() { ...@@ -535,8 +535,7 @@ void CastBrowserMainParts::PreMainMessageLoopRun() {
#if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS) #if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
cast_browser_process_->SetAccessibilityManager( cast_browser_process_->SetAccessibilityManager(
std::make_unique<AccessibilityManager>( std::make_unique<AccessibilityManager>(window_manager_.get()));
window_manager_->window_tree_host()));
#endif // BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS) #endif // BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
#else // defined(USE_AURA) #else // defined(USE_AURA)
......
...@@ -324,4 +324,8 @@ void CastWindowManagerAura::CastWindowManagerAura::SetColorInversion( ...@@ -324,4 +324,8 @@ void CastWindowManagerAura::CastWindowManagerAura::SetColorInversion(
window_tree_host_->window()->layer()->SetLayerInverted(enable); window_tree_host_->window()->layer()->SetLayerInverted(enable);
} }
CastGestureHandler* CastWindowManagerAura::GetGestureHandler() const {
return system_gesture_dispatcher_.get();
}
} // namespace chromecast } // namespace chromecast
...@@ -22,6 +22,7 @@ class ScreenPositionClient; ...@@ -22,6 +22,7 @@ class ScreenPositionClient;
namespace chromecast { namespace chromecast {
class CastFocusClientAura; class CastFocusClientAura;
class CastGestureHandler;
class CastSystemGestureEventHandler; class CastSystemGestureEventHandler;
class CastSystemGestureDispatcher; class CastSystemGestureDispatcher;
class SideSwipeDetector; class SideSwipeDetector;
...@@ -72,6 +73,8 @@ class CastWindowManagerAura : public CastWindowManager, ...@@ -72,6 +73,8 @@ class CastWindowManagerAura : public CastWindowManager,
CastWindowTreeHost* window_tree_host() const; CastWindowTreeHost* window_tree_host() const;
CastGestureHandler* GetGestureHandler() const;
private: private:
const bool enable_input_; const bool enable_input_;
std::unique_ptr<CastWindowTreeHost> window_tree_host_; std::unique_ptr<CastWindowTreeHost> window_tree_host_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment