| // Copyright (c) 2012 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 "chrome/browser/ui/ash/volume_controller_chromeos.h" |
| |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/chromeos/audio/audio_handler.h" |
| #include "chrome/browser/extensions/system/system_api.h" |
| #include "content/public/browser/user_metrics.h" |
| |
| namespace { |
| |
| // Percent by which the volume should be changed when a volume key is pressed. |
| const double kStepPercentage = 4.0; |
| |
| } // namespace |
| |
| bool VolumeController::HandleVolumeMute(const ui::Accelerator& accelerator) { |
| if (accelerator.key_code() == ui::VKEY_F8) |
| content::RecordAction(content::UserMetricsAction("Accel_VolumeMute_F8")); |
| |
| chromeos::AudioHandler* audio_handler = chromeos::AudioHandler::GetInstance(); |
| |
| // Always muting (and not toggling) as per final decision on |
| // http://crosbug.com/3751 |
| audio_handler->SetMuted(true); |
| |
| extensions::DispatchVolumeChangedEvent(audio_handler->GetVolumePercent(), |
| audio_handler->IsMuted()); |
| return true; |
| } |
| |
| bool VolumeController::HandleVolumeDown(const ui::Accelerator& accelerator) { |
| if (accelerator.key_code() == ui::VKEY_F9) |
| content::RecordAction(content::UserMetricsAction("Accel_VolumeDown_F9")); |
| |
| chromeos::AudioHandler* audio_handler = chromeos::AudioHandler::GetInstance(); |
| if (audio_handler->IsMuted()) |
| audio_handler->SetVolumePercent(0.0); |
| else |
| audio_handler->AdjustVolumeByPercent(-kStepPercentage); |
| |
| extensions::DispatchVolumeChangedEvent(audio_handler->GetVolumePercent(), |
| audio_handler->IsMuted()); |
| return true; |
| } |
| |
| bool VolumeController::HandleVolumeUp(const ui::Accelerator& accelerator) { |
| if (accelerator.key_code() == ui::VKEY_F10) |
| content::RecordAction(content::UserMetricsAction("Accel_VolumeUp_F10")); |
| |
| chromeos::AudioHandler* audio_handler = chromeos::AudioHandler::GetInstance(); |
| if (audio_handler->IsMuted()) { |
| audio_handler->SetMuted(false); |
| // If volume percent is still 0.0 after reset the mute status, it means that |
| // the mute status was done by VolumeDown, so we need to increase |
| // the volume as usual. |
| if (audio_handler->GetVolumePercent() == 0.0) |
| audio_handler->AdjustVolumeByPercent(kStepPercentage); |
| } else { |
| audio_handler->AdjustVolumeByPercent(kStepPercentage); |
| } |
| |
| extensions::DispatchVolumeChangedEvent(audio_handler->GetVolumePercent(), |
| audio_handler->IsMuted()); |
| return true; |
| } |
| |
| bool VolumeController::IsAudioMuted() const { |
| return chromeos::AudioHandler::GetInstance()->IsMuted(); |
| } |
| |
| void VolumeController::SetAudioMuted(bool muted) { |
| chromeos::AudioHandler::GetInstance()->SetMuted(muted); |
| } |
| |
| // Gets the volume level. The range is [0, 1.0]. |
| float VolumeController::GetVolumeLevel() const { |
| return chromeos::AudioHandler::GetInstance()->GetVolumePercent() / 100.f; |
| } |
| |
| // Sets the volume level. The range is [0, 1.0]. |
| void VolumeController::SetVolumeLevel(float level) { |
| chromeos::AudioHandler::GetInstance()->SetVolumePercent(level * 100.f); |
| } |
| |
| void VolumeController::SetVolumePercent(double percent) { |
| chromeos::AudioHandler* audio_handler = chromeos::AudioHandler::GetInstance(); |
| audio_handler->SetVolumePercent(percent); |
| extensions::DispatchVolumeChangedEvent(audio_handler->GetVolumePercent(), |
| audio_handler->IsMuted()); |
| } |