Index: trunk/src/ash/root_window_controller.cc |
=================================================================== |
--- trunk/src/ash/root_window_controller.cc (revision 284848) |
+++ trunk/src/ash/root_window_controller.cc (working copy) |
@@ -76,7 +76,7 @@ |
#include "ui/wm/public/window_types.h" |
#if defined(OS_CHROMEOS) |
-#include "ash/ash_touch_exploration_manager_chromeos.h" |
+#include "ash/system/tray_accessibility.h" |
#include "ash/wm/boot_splash_screen_chromeos.h" |
#include "ui/chromeos/touch_exploration_controller.h" |
#endif |
@@ -261,6 +261,54 @@ |
DISALLOW_COPY_AND_ASSIGN(EmptyWindowDelegate); |
}; |
+#if defined(OS_CHROMEOS) |
+// Responsible for initializing TouchExplorationController when spoken |
+// feedback is on. |
+class CrosAccessibilityObserver : public AccessibilityObserver { |
+ public: |
+ explicit CrosAccessibilityObserver( |
+ RootWindowController* root_window_controller) |
+ : root_window_controller_(root_window_controller) { |
+ Shell::GetInstance()->system_tray_notifier()-> |
+ AddAccessibilityObserver(this); |
+ UpdateTouchExplorationState(); |
+ } |
+ |
+ virtual ~CrosAccessibilityObserver() { |
+ SystemTrayNotifier* system_tray_notifier = |
+ Shell::GetInstance()->system_tray_notifier(); |
+ if (system_tray_notifier) |
+ system_tray_notifier->RemoveAccessibilityObserver(this); |
+ } |
+ |
+ private: |
+ void UpdateTouchExplorationState() { |
+ AccessibilityDelegate* delegate = |
+ Shell::GetInstance()->accessibility_delegate(); |
+ bool enabled = delegate->IsSpokenFeedbackEnabled(); |
+ |
+ if (enabled && !touch_exploration_controller_.get()) { |
+ touch_exploration_controller_.reset( |
+ new ui::TouchExplorationController( |
+ root_window_controller_->GetRootWindow())); |
+ } else if (!enabled) { |
+ touch_exploration_controller_.reset(); |
+ } |
+ } |
+ |
+ // Overridden from AccessibilityObserver. |
+ virtual void OnAccessibilityModeChanged( |
+ AccessibilityNotificationVisibility notify) OVERRIDE { |
+ UpdateTouchExplorationState(); |
+ } |
+ |
+ scoped_ptr<ui::TouchExplorationController> touch_exploration_controller_; |
+ RootWindowController* root_window_controller_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CrosAccessibilityObserver); |
+}; |
+#endif // OS_CHROMEOS |
+ |
} // namespace |
void RootWindowController::CreateForPrimaryDisplay(AshWindowTreeHost* host) { |
@@ -348,8 +396,8 @@ |
shell->RemoveShellObserver(this); |
#if defined(OS_CHROMEOS) |
- if (touch_exploration_manager_) { |
- touch_exploration_manager_.reset(); |
+ if (cros_accessibility_observer_) { |
+ cros_accessibility_observer_.reset(); |
} |
#endif |
@@ -759,7 +807,7 @@ |
#if defined(OS_CHROMEOS) |
if (!CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kAshDisableTouchExplorationMode)) { |
- touch_exploration_manager_.reset(new AshTouchExplorationManager(this)); |
+ cros_accessibility_observer_.reset(new CrosAccessibilityObserver(this)); |
} |
#endif |
} |