| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" | 5 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
| 6 | 6 |
| 7 #include "ash/audio/sounds.h" | 7 #include "ash/audio/sounds.h" |
| 8 #include "ash/autoclick/autoclick_controller.h" | 8 #include "ash/autoclick/autoclick_controller.h" |
| 9 #include "ash/high_contrast/high_contrast_controller.h" | 9 #include "ash/high_contrast/high_contrast_controller.h" |
| 10 #include "ash/metrics/user_metrics_recorder.h" | 10 #include "ash/metrics/user_metrics_recorder.h" |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 large_cursor_enabled_(false), | 301 large_cursor_enabled_(false), |
| 302 sticky_keys_enabled_(false), | 302 sticky_keys_enabled_(false), |
| 303 spoken_feedback_enabled_(false), | 303 spoken_feedback_enabled_(false), |
| 304 high_contrast_enabled_(false), | 304 high_contrast_enabled_(false), |
| 305 autoclick_enabled_(false), | 305 autoclick_enabled_(false), |
| 306 autoclick_delay_ms_(ash::AutoclickController::kDefaultAutoclickDelayMs), | 306 autoclick_delay_ms_(ash::AutoclickController::kDefaultAutoclickDelayMs), |
| 307 virtual_keyboard_enabled_(false), | 307 virtual_keyboard_enabled_(false), |
| 308 spoken_feedback_notification_(ash::A11Y_NOTIFICATION_NONE), | 308 spoken_feedback_notification_(ash::A11Y_NOTIFICATION_NONE), |
| 309 weak_ptr_factory_(this), | 309 weak_ptr_factory_(this), |
| 310 should_speak_chrome_vox_announcements_on_user_screen_(true), | 310 should_speak_chrome_vox_announcements_on_user_screen_(true), |
| 311 system_sounds_enabled_(false) { | 311 system_sounds_enabled_(false), |
| 312 braille_display_connected_(false), |
| 313 scoped_braille_observer_(this) { |
| 312 notification_registrar_.Add(this, | 314 notification_registrar_.Add(this, |
| 313 chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, | 315 chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, |
| 314 content::NotificationService::AllSources()); | 316 content::NotificationService::AllSources()); |
| 315 notification_registrar_.Add(this, | 317 notification_registrar_.Add(this, |
| 316 chrome::NOTIFICATION_SESSION_STARTED, | 318 chrome::NOTIFICATION_SESSION_STARTED, |
| 317 content::NotificationService::AllSources()); | 319 content::NotificationService::AllSources()); |
| 318 notification_registrar_.Add(this, | 320 notification_registrar_.Add(this, |
| 319 chrome::NOTIFICATION_PROFILE_DESTROYED, | 321 chrome::NOTIFICATION_PROFILE_DESTROYED, |
| 320 content::NotificationService::AllSources()); | 322 content::NotificationService::AllSources()); |
| 321 notification_registrar_.Add(this, | 323 notification_registrar_.Add(this, |
| 322 chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED, | 324 chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED, |
| 323 content::NotificationService::AllSources()); | 325 content::NotificationService::AllSources()); |
| 324 | 326 |
| 325 GetBrailleController()->AddObserver(this); | |
| 326 | |
| 327 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 327 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 328 media::SoundsManager* manager = media::SoundsManager::Get(); | 328 media::SoundsManager* manager = media::SoundsManager::Get(); |
| 329 manager->Initialize(SOUND_SHUTDOWN, | 329 manager->Initialize(SOUND_SHUTDOWN, |
| 330 bundle.GetRawDataResource(IDR_SOUND_SHUTDOWN_WAV)); | 330 bundle.GetRawDataResource(IDR_SOUND_SHUTDOWN_WAV)); |
| 331 manager->Initialize( | 331 manager->Initialize( |
| 332 SOUND_SPOKEN_FEEDBACK_ENABLED, | 332 SOUND_SPOKEN_FEEDBACK_ENABLED, |
| 333 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_ENABLED_WAV)); | 333 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_ENABLED_WAV)); |
| 334 manager->Initialize( | 334 manager->Initialize( |
| 335 SOUND_SPOKEN_FEEDBACK_DISABLED, | 335 SOUND_SPOKEN_FEEDBACK_DISABLED, |
| 336 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_DISABLED_WAV)); | 336 bundle.GetRawDataResource(IDR_SOUND_SPOKEN_FEEDBACK_DISABLED_WAV)); |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 | 732 |
| 733 #if defined(USE_ASH) | 733 #if defined(USE_ASH) |
| 734 keyboard::SetAccessibilityKeyboardEnabled(enabled); | 734 keyboard::SetAccessibilityKeyboardEnabled(enabled); |
| 735 if (enabled) | 735 if (enabled) |
| 736 ash::Shell::GetInstance()->CreateKeyboard(); | 736 ash::Shell::GetInstance()->CreateKeyboard(); |
| 737 else if (!keyboard::IsKeyboardEnabled()) | 737 else if (!keyboard::IsKeyboardEnabled()) |
| 738 ash::Shell::GetInstance()->DeactivateKeyboard(); | 738 ash::Shell::GetInstance()->DeactivateKeyboard(); |
| 739 #endif | 739 #endif |
| 740 } | 740 } |
| 741 | 741 |
| 742 bool AccessibilityManager::IsBrailleDisplayConnected() const { |
| 743 return braille_display_connected_; |
| 744 } |
| 745 |
| 742 void AccessibilityManager::CheckBrailleState() { | 746 void AccessibilityManager::CheckBrailleState() { |
| 747 BrailleController* braille_controller = GetBrailleController(); |
| 748 if (!scoped_braille_observer_.IsObserving(braille_controller)) |
| 749 scoped_braille_observer_.Add(braille_controller); |
| 743 BrowserThread::PostTaskAndReplyWithResult( | 750 BrowserThread::PostTaskAndReplyWithResult( |
| 744 BrowserThread::IO, FROM_HERE, base::Bind( | 751 BrowserThread::IO, |
| 745 &BrailleController::GetDisplayState, | 752 FROM_HERE, |
| 746 base::Unretained(GetBrailleController())), | 753 base::Bind(&BrailleController::GetDisplayState, |
| 754 base::Unretained(braille_controller)), |
| 747 base::Bind(&AccessibilityManager::ReceiveBrailleDisplayState, | 755 base::Bind(&AccessibilityManager::ReceiveBrailleDisplayState, |
| 748 weak_ptr_factory_.GetWeakPtr())); | 756 weak_ptr_factory_.GetWeakPtr())); |
| 749 } | 757 } |
| 750 | 758 |
| 751 void AccessibilityManager::ReceiveBrailleDisplayState( | 759 void AccessibilityManager::ReceiveBrailleDisplayState( |
| 752 scoped_ptr<extensions::api::braille_display_private::DisplayState> state) { | 760 scoped_ptr<extensions::api::braille_display_private::DisplayState> state) { |
| 753 OnDisplayStateChanged(*state); | 761 OnDisplayStateChanged(*state); |
| 754 } | 762 } |
| 755 | 763 |
| 756 | 764 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 base::Unretained(this))); | 812 base::Unretained(this))); |
| 805 } | 813 } |
| 806 | 814 |
| 807 large_cursor_pref_handler_.HandleProfileChanged(profile_, profile); | 815 large_cursor_pref_handler_.HandleProfileChanged(profile_, profile); |
| 808 spoken_feedback_pref_handler_.HandleProfileChanged(profile_, profile); | 816 spoken_feedback_pref_handler_.HandleProfileChanged(profile_, profile); |
| 809 high_contrast_pref_handler_.HandleProfileChanged(profile_, profile); | 817 high_contrast_pref_handler_.HandleProfileChanged(profile_, profile); |
| 810 autoclick_pref_handler_.HandleProfileChanged(profile_, profile); | 818 autoclick_pref_handler_.HandleProfileChanged(profile_, profile); |
| 811 autoclick_delay_pref_handler_.HandleProfileChanged(profile_, profile); | 819 autoclick_delay_pref_handler_.HandleProfileChanged(profile_, profile); |
| 812 virtual_keyboard_pref_handler_.HandleProfileChanged(profile_, profile); | 820 virtual_keyboard_pref_handler_.HandleProfileChanged(profile_, profile); |
| 813 | 821 |
| 814 if (!profile_ && profile) | 822 bool had_profile = (profile_ != NULL); |
| 823 profile_ = profile; |
| 824 |
| 825 if (!had_profile && profile) |
| 815 CheckBrailleState(); | 826 CheckBrailleState(); |
| 816 | 827 |
| 817 profile_ = profile; | |
| 818 UpdateLargeCursorFromPref(); | 828 UpdateLargeCursorFromPref(); |
| 819 UpdateStickyKeysFromPref(); | 829 UpdateStickyKeysFromPref(); |
| 820 UpdateSpokenFeedbackFromPref(); | 830 UpdateSpokenFeedbackFromPref(); |
| 821 UpdateHighContrastFromPref(); | 831 UpdateHighContrastFromPref(); |
| 822 UpdateAutoclickFromPref(); | 832 UpdateAutoclickFromPref(); |
| 823 UpdateAutoclickDelayFromPref(); | 833 UpdateAutoclickDelayFromPref(); |
| 824 UpdateVirtualKeyboardFromPref(); | 834 UpdateVirtualKeyboardFromPref(); |
| 825 } | 835 } |
| 826 | 836 |
| 827 void AccessibilityManager::ActiveUserChanged(const std::string& user_id) { | 837 void AccessibilityManager::ActiveUserChanged(const std::string& user_id) { |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 LoadChromeVoxToUserScreen(); | 965 LoadChromeVoxToUserScreen(); |
| 956 } | 966 } |
| 957 } | 967 } |
| 958 break; | 968 break; |
| 959 } | 969 } |
| 960 } | 970 } |
| 961 } | 971 } |
| 962 | 972 |
| 963 void AccessibilityManager::OnDisplayStateChanged( | 973 void AccessibilityManager::OnDisplayStateChanged( |
| 964 const DisplayState& display_state) { | 974 const DisplayState& display_state) { |
| 965 if (display_state.available) | 975 braille_display_connected_ = display_state.available; |
| 976 if (braille_display_connected_) |
| 966 EnableSpokenFeedback(true, ash::A11Y_NOTIFICATION_SHOW); | 977 EnableSpokenFeedback(true, ash::A11Y_NOTIFICATION_SHOW); |
| 978 |
| 979 AccessibilityStatusEventDetails details( |
| 980 ACCESSIBILITY_BRAILLE_DISPLAY_CONNECTION_STATE_CHANGED, |
| 981 braille_display_connected_, |
| 982 ash::A11Y_NOTIFICATION_SHOW); |
| 983 NotifyAccessibilityStatusChanged(details); |
| 967 } | 984 } |
| 968 | 985 |
| 969 void AccessibilityManager::PostLoadChromeVox(Profile* profile) { | 986 void AccessibilityManager::PostLoadChromeVox(Profile* profile) { |
| 970 // Do any setup work needed immediately after ChromeVox actually loads. | 987 // Do any setup work needed immediately after ChromeVox actually loads. |
| 971 if (system_sounds_enabled_) | 988 if (system_sounds_enabled_) |
| 972 ash::PlaySystemSoundAlways(SOUND_SPOKEN_FEEDBACK_ENABLED); | 989 ash::PlaySystemSoundAlways(SOUND_SPOKEN_FEEDBACK_ENABLED); |
| 973 | 990 |
| 974 ExtensionAccessibilityEventRouter::GetInstance()-> | 991 ExtensionAccessibilityEventRouter::GetInstance()-> |
| 975 OnChromeVoxLoadStateChanged(profile_, | 992 OnChromeVoxLoadStateChanged(profile_, |
| 976 IsSpokenFeedbackEnabled(), | 993 IsSpokenFeedbackEnabled(), |
| 977 chrome_vox_loaded_on_lock_screen_ || | 994 chrome_vox_loaded_on_lock_screen_ || |
| 978 should_speak_chrome_vox_announcements_on_user_screen_); | 995 should_speak_chrome_vox_announcements_on_user_screen_); |
| 979 | 996 |
| 980 should_speak_chrome_vox_announcements_on_user_screen_ = | 997 should_speak_chrome_vox_announcements_on_user_screen_ = |
| 981 chrome_vox_loaded_on_lock_screen_; | 998 chrome_vox_loaded_on_lock_screen_; |
| 982 } | 999 } |
| 983 | 1000 |
| 984 void AccessibilityManager::PostUnloadChromeVox(Profile* profile) { | 1001 void AccessibilityManager::PostUnloadChromeVox(Profile* profile) { |
| 985 // Do any teardown work needed immediately after ChromeVox actually unloads. | 1002 // Do any teardown work needed immediately after ChromeVox actually unloads. |
| 986 if (system_sounds_enabled_) | 1003 if (system_sounds_enabled_) |
| 987 ash::PlaySystemSoundAlways(SOUND_SPOKEN_FEEDBACK_DISABLED); | 1004 ash::PlaySystemSoundAlways(SOUND_SPOKEN_FEEDBACK_DISABLED); |
| 988 } | 1005 } |
| 989 | 1006 |
| 990 } // namespace chromeos | 1007 } // namespace chromeos |
| OLD | NEW |