ash_touch_exploration_manager_chromeos.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/ash_touch_exploration_manager_chromeos.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/accessibility_delegate.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/audio/sounds.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/root_window_controller.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/shell.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/command_line.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/audio/chromeos_sounds.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/audio/cras_audio_handler.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/chromeos/touch_exploration_controller.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace ash { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)AshTouchExplorationManager::AshTouchExplorationManager( 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RootWindowController* root_window_controller) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : root_window_controller_(root_window_controller), 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) audio_handler_(chromeos::CrasAudioHandler::Get()) { 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Shell::GetInstance()->system_tray_notifier()->AddAccessibilityObserver(this); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UpdateTouchExplorationState(); 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)AshTouchExplorationManager::~AshTouchExplorationManager() { 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SystemTrayNotifier* system_tray_notifier = 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Shell::GetInstance()->system_tray_notifier(); 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (system_tray_notifier) 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) system_tray_notifier->RemoveAccessibilityObserver(this); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AshTouchExplorationManager::OnAccessibilityModeChanged( 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccessibilityNotificationVisibility notify) { 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UpdateTouchExplorationState(); 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AshTouchExplorationManager::PlayVolumeAdjustSound() { 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!VolumeAdjustSoundEnabled()) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((!audio_handler_->IsOutputMuted()) || 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) !(audio_handler_->GetOutputVolumePercent() == 100)) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PlaySystemSoundIfSpokenFeedback(chromeos::SOUND_VOLUME_ADJUST); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AshTouchExplorationManager::SetOutputLevel(int volume) { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (volume > 0) { 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (audio_handler_->IsOutputMuted()) { 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) audio_handler_->SetOutputMute(false); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) audio_handler_->SetOutputVolumePercent(volume); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Avoid negative volume. 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (audio_handler_->IsOutputVolumeBelowDefaultMuteLevel()) 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) audio_handler_->SetOutputMute(true); 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void AshTouchExplorationManager::UpdateTouchExplorationState() { 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AccessibilityDelegate* delegate = 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Shell::GetInstance()->accessibility_delegate(); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool enabled = delegate->IsSpokenFeedbackEnabled(); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (enabled && !touch_exploration_controller_.get()) { 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) touch_exploration_controller_.reset(new ui::TouchExplorationController( 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) root_window_controller_->GetRootWindow(), this)); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (!enabled) { 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) touch_exploration_controller_.reset(); 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool AshTouchExplorationManager::VolumeAdjustSoundEnabled() { 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return !CommandLine::ForCurrentProcess()->HasSwitch( 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chromeos::switches::kDisableVolumeAdjustSound); 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace ash 79