Skip to content

Commit

Permalink
[chromecast] Allow toggling magnification by triple-tap.
Browse files Browse the repository at this point in the history
If the magnification gesture is enabled, the AccessibilityManager will
listen for triple-tap events and turn on (or off) the
PartialMagnificationController.

Bug: internal b/110532350
Bug: internal b/110481596
Test: manual
Change-Id: I3e1ed53fddb1c525c0cc3b238e243f59b737323d
Reviewed-on: https://chromium-review.googlesource.com/1125038
Commit-Queue: Ryan Daum <rdaum@chromium.org>
Reviewed-by: Alex Sakhartchouk <alexst@chromium.org>
Cr-Commit-Position: refs/heads/master@{#573468}
  • Loading branch information
Ryan Daum authored and Commit Bot committed Jul 9, 2018
1 parent d956f86 commit 177d558
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 2 deletions.
17 changes: 17 additions & 0 deletions chromecast/browser/accessibility/accessibility_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "chromecast/browser/accessibility/accessibility_manager.h"

#include "chromecast/graphics/accessibility/focus_ring_controller.h"
#include "chromecast/graphics/accessibility/partial_magnification_controller.h"
#include "ui/aura/window.h"
#include "ui/aura/window_tree_host.h"
#include "ui/wm/public/activation_client.h"
Expand All @@ -26,6 +27,9 @@ AccessibilityManager::AccessibilityManager(
touch_exploration_manager_ = std::make_unique<TouchExplorationManager>(
root_window, activation_client,
accessibility_focus_ring_controller_.get());
triple_tap_detector_ = std::make_unique<TripleTapDetector>(root_window, this);
magnification_controller_ =
std::make_unique<PartialMagnificationController>(root_window);
}

AccessibilityManager::~AccessibilityManager() {}
Expand Down Expand Up @@ -79,5 +83,18 @@ aura::WindowTreeHost* AccessibilityManager::window_tree_host() const {
return window_tree_host_;
}

void AccessibilityManager::SetMagnificationGestureEnabled(bool enabled) {
triple_tap_detector_->set_enabled(enabled);
}

bool AccessibilityManager::IsMagnificationGestureEnabled() const {
return triple_tap_detector_->enabled();
}

void AccessibilityManager::OnTripleTap(const gfx::Point& tap_location) {
magnification_controller_->SetEnabled(
!magnification_controller_->IsEnabled());
}

} // namespace shell
} // namespace chromecast
17 changes: 15 additions & 2 deletions chromecast/browser/accessibility/accessibility_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#include "chromecast/browser/accessibility/touch_exploration_manager.h"
#include "chromecast/graphics/accessibility/accessibility_focus_ring_controller.h"
#include "chromecast/graphics/triple_tap_detector.h"

namespace aura {
class WindowTreeHost;
Expand All @@ -18,15 +19,16 @@ class WindowTreeHost;
namespace chromecast {

class FocusRingController;
class MagnificationController;

namespace shell {

// Responsible for delegating chromecast browser process accessibility functions
// to the responsible party.
class AccessibilityManager {
class AccessibilityManager : public TripleTapDetectorDelegate {
public:
explicit AccessibilityManager(aura::WindowTreeHost* window_tree_host);
~AccessibilityManager();
~AccessibilityManager() override;

// Sets the focus ring color.
void SetFocusRingColor(SkColor color);
Expand Down Expand Up @@ -63,12 +65,23 @@ class AccessibilityManager {
// Get the window tree host this AccessibilityManager was created with.
aura::WindowTreeHost* window_tree_host() const;

// Enable or disable the triple-tap gesture to turn on magnification.
void SetMagnificationGestureEnabled(bool enabled);

// Returns whether the magnification gesture is currently enabled.
bool IsMagnificationGestureEnabled() const;

// TripleTapDetectorDelegate implementation
void OnTripleTap(const gfx::Point& tap_location) override;

private:
std::unique_ptr<FocusRingController> focus_ring_controller_;
std::unique_ptr<AccessibilityFocusRingController>
accessibility_focus_ring_controller_;
aura::WindowTreeHost* window_tree_host_;
std::unique_ptr<TouchExplorationManager> touch_exploration_manager_;
std::unique_ptr<TripleTapDetector> triple_tap_detector_;
std::unique_ptr<MagnificationController> magnification_controller_;
};

} // namespace shell
Expand Down
3 changes: 3 additions & 0 deletions chromecast/graphics/accessibility/magnification_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ class MagnificationController {
// Turns magnifier feature on or off.
virtual void SetEnabled(bool enabled) = 0;

// Returns true if magnification feature is on.
virtual bool IsEnabled() const = 0;

// Adjust the ratio of the scale of magnification.
virtual void SetMagnificationScale(float magnification_scale) = 0;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,10 @@ void PartialMagnificationController::SetEnabled(bool enabled) {
SetActive(false);
}

bool PartialMagnificationController::IsEnabled() const {
return is_enabled_;
}

void PartialMagnificationController::SwitchTargetRootWindowIfNeeded(
aura::Window* new_root_window) {
if (host_widget_ &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class PartialMagnificationController : public MagnificationController,
// and active. Magnification becomes active on a finger press.
void SetEnabled(bool enabled) override;

bool IsEnabled() const override;

// Adjust the scale of magnification.
void SetMagnificationScale(float magnification_scale) override;

Expand Down
1 change: 1 addition & 0 deletions chromecast/graphics/triple_tap_detector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "chromecast/graphics/triple_tap_detector.h"

#include "base/auto_reset.h"
#include "base/logging.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
Expand Down

0 comments on commit 177d558

Please sign in to comment.