// Copyright 2014 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 "ash/ash_touch_exploration_manager_chromeos.h" #include "ash/accessibility_delegate.h" #include "ash/audio/sounds.h" #include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/system/tray/system_tray_notifier.h" #include "base/command_line.h" #include "chromeos/audio/chromeos_sounds.h" #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/chromeos_switches.h" #include "ui/chromeos/touch_exploration_controller.h" namespace ash { AshTouchExplorationManager::AshTouchExplorationManager( RootWindowController* root_window_controller) : root_window_controller_(root_window_controller), audio_handler_(chromeos::CrasAudioHandler::Get()) { Shell::GetInstance()->system_tray_notifier()->AddAccessibilityObserver(this); UpdateTouchExplorationState(); } AshTouchExplorationManager::~AshTouchExplorationManager() { SystemTrayNotifier* system_tray_notifier = Shell::GetInstance()->system_tray_notifier(); if (system_tray_notifier) system_tray_notifier->RemoveAccessibilityObserver(this); } void AshTouchExplorationManager::OnAccessibilityModeChanged( ui::AccessibilityNotificationVisibility notify) { UpdateTouchExplorationState(); } void AshTouchExplorationManager::SetOutputLevel(int volume) { if (volume > 0) { if (audio_handler_->IsOutputMuted()) { audio_handler_->SetOutputMute(false); } } audio_handler_->SetOutputVolumePercent(volume); // Avoid negative volume. if (audio_handler_->IsOutputVolumeBelowDefaultMuteLevel()) audio_handler_->SetOutputMute(true); } void AshTouchExplorationManager::SilenceSpokenFeedback() { AccessibilityDelegate* delegate = Shell::GetInstance()->accessibility_delegate(); if (!delegate->IsSpokenFeedbackEnabled()) return; delegate->SilenceSpokenFeedback(); } void AshTouchExplorationManager::PlayVolumeAdjustEarcon() { if (!VolumeAdjustSoundEnabled()) return; if (!audio_handler_->IsOutputMuted() && audio_handler_->GetOutputVolumePercent() != 100) PlaySystemSoundIfSpokenFeedback(chromeos::SOUND_VOLUME_ADJUST); } void AshTouchExplorationManager::PlayPassthroughEarcon() { Shell::GetInstance()->accessibility_delegate()->PlayEarcon( chromeos::SOUND_PASSTHROUGH); } void AshTouchExplorationManager::PlayExitScreenEarcon() { Shell::GetInstance()->accessibility_delegate()->PlayEarcon( chromeos::SOUND_EXIT_SCREEN); } void AshTouchExplorationManager::PlayEnterScreenEarcon() { Shell::GetInstance()->accessibility_delegate()->PlayEarcon( chromeos::SOUND_ENTER_SCREEN); } void AshTouchExplorationManager::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(), this)); } else if (!enabled) { touch_exploration_controller_.reset(); } } bool AshTouchExplorationManager::VolumeAdjustSoundEnabled() { return !base::CommandLine::ForCurrentProcess()->HasSwitch( chromeos::switches::kDisableVolumeAdjustSound); } } // namespace ash