Index: chromeos/audio/cras_audio_handler.cc |
diff --git a/chromeos/audio/cras_audio_handler.cc b/chromeos/audio/cras_audio_handler.cc |
index 10883334013a90f56adc24937b7e9ef6e6bfd9e5..7ad5c844e1cb875646e0fd0fc2219ca9aad3f43f 100644 |
--- a/chromeos/audio/cras_audio_handler.cc |
+++ b/chromeos/audio/cras_audio_handler.cc |
@@ -104,10 +104,11 @@ bool CrasAudioHandler::IsOutputMuted() { |
} |
bool CrasAudioHandler::IsOutputMutedForDevice(uint64 device_id) { |
- if (device_id == active_output_node_id_) |
- return output_mute_on_; |
- else |
- return audio_pref_handler_->GetMuteValue(device_id); |
+ return audio_pref_handler_->GetMuteValue(device_id); |
+} |
+ |
+bool CrasAudioHandler::IsOutputVolumeBelowDefaultMuteLvel() { |
+ return output_volume_ <= kMuteThresholdPercent; |
} |
bool CrasAudioHandler::IsInputMuted() { |
@@ -115,10 +116,7 @@ bool CrasAudioHandler::IsInputMuted() { |
} |
bool CrasAudioHandler::IsInputMutedForDevice(uint64 device_id) { |
- if (device_id == active_input_node_id_) |
- return input_mute_on_; |
- else |
- return audio_pref_handler_->GetMuteValue(device_id); |
+ return audio_pref_handler_->GetMuteValue(device_id); |
} |
int CrasAudioHandler::GetOutputVolumePercent() { |
@@ -178,14 +176,21 @@ void CrasAudioHandler::SetOutputVolumePercent(int volume_percent) { |
volume_percent = min(max(volume_percent, 0), 100); |
if (volume_percent <= kMuteThresholdPercent) |
volume_percent = 0; |
- SetOutputVolumeInternal(volume_percent); |
+ output_volume_ = volume_percent; |
+ audio_pref_handler_->SetVolumeGainValue(active_output_node_id_, |
+ output_volume_); |
+ SetOutputVolumeInternal(output_volume_); |
+ FOR_EACH_OBSERVER(AudioObserver, observers_, OnOutputVolumeChanged()); |
} |
void CrasAudioHandler::SetInputGainPercent(int gain_percent) { |
gain_percent = min(max(gain_percent, 0), 100); |
if (gain_percent <= kMuteThresholdPercent) |
gain_percent = 0; |
- SetInputGainInternal(gain_percent); |
+ input_gain_ = gain_percent; |
+ audio_pref_handler_->SetVolumeGainValue(active_input_node_id_, input_gain_); |
+ SetInputGainInternal(input_gain_); |
+ FOR_EACH_OBSERVER(AudioObserver, observers_, OnInputGainChanged()); |
} |
void CrasAudioHandler::AdjustOutputVolumeByPercent(int adjust_by_percent) { |
@@ -196,37 +201,26 @@ void CrasAudioHandler::SetOutputMute(bool mute_on) { |
if (!SetOutputMuteInternal(mute_on)) |
return; |
- if (mute_on) |
- return; |
+ output_mute_on_ = mute_on; |
+ audio_pref_handler_->SetMuteValue(active_output_node_id_, output_mute_on_); |
+ FOR_EACH_OBSERVER(AudioObserver, observers_, OnOutputMuteChanged()); |
+} |
- // Adjust volume level if user unmute the device and makes sure the volume |
- // is set to a minimum audible level. |
+void CrasAudioHandler::AdjustOutputVolumeToAudibleLevel() { |
if (output_volume_ <= kMuteThresholdPercent) { |
// Avoid the situation when sound has been unmuted, but the volume |
// is set to a very low value, so user still can't hear any sound. |
- SetOutputVolumeInternal(kDefaultUnmuteVolumePercent); |
+ SetOutputVolumePercent(kDefaultUnmuteVolumePercent); |
} |
} |
-bool CrasAudioHandler::SetOutputMuteInternal(bool mute_on) { |
- if (output_mute_locked_) |
- return false; |
- |
- output_mute_on_ = mute_on; |
- audio_pref_handler_->SetMuteValue(active_output_node_id_, mute_on); |
- chromeos::DBusThreadManager::Get()->GetCrasAudioClient()-> |
- SetOutputMute(mute_on); |
- return true; |
-} |
- |
void CrasAudioHandler::SetInputMute(bool mute_on) { |
- if (input_mute_locked_) |
+ if (!SetInputMuteInternal(mute_on)) |
return; |
input_mute_on_ = mute_on; |
- audio_pref_handler_->SetMuteValue(active_input_node_id_, mute_on); |
- chromeos::DBusThreadManager::Get()->GetCrasAudioClient()-> |
- SetInputMute(mute_on); |
+ audio_pref_handler_->SetMuteValue(active_input_node_id_, input_mute_on_); |
+ FOR_EACH_OBSERVER(AudioObserver, observers_, OnInputMuteChanged()); |
} |
void CrasAudioHandler::SetActiveOutputNode(uint64 node_id) { |
@@ -311,41 +305,32 @@ void CrasAudioHandler::AudioClientRestarted() { |
} |
void CrasAudioHandler::OutputVolumeChanged(int volume) { |
- if (output_volume_ == volume) |
+ if (output_volume_ != volume) { |
+ LOG(WARNING) << "Output volume state inconsistent, internal volume=" |
+ << output_volume_ << ", dbus signal volume=" << volume; |
return; |
- |
- output_volume_ = volume; |
- audio_pref_handler_->SetVolumeGainValue(active_output_node_id_, volume); |
- FOR_EACH_OBSERVER(AudioObserver, observers_, OnOutputVolumeChanged()); |
+ } |
} |
void CrasAudioHandler::InputGainChanged(int gain) { |
- if (input_gain_ == gain) |
- return; |
- |
- input_gain_ = gain; |
- audio_pref_handler_->SetVolumeGainValue(active_input_node_id_, gain); |
- FOR_EACH_OBSERVER(AudioObserver, observers_, OnInputGainChanged()); |
+ if (input_gain_ != gain) { |
+ LOG(WARNING) << "input gain state inconsistent, internal gain=" |
+ << input_gain_ << ", dbus signal gain=" << gain; |
+ } |
} |
void CrasAudioHandler::OutputMuteChanged(bool mute_on) { |
- if (output_mute_on_ == mute_on) |
- return; |
- |
- output_mute_on_ = mute_on; |
- // TODO(rkc,jennyz): We need to save the mute preferences here. See |
- // crbug.com/239646. |
- FOR_EACH_OBSERVER(AudioObserver, observers_, OnOutputMuteChanged()); |
+ if (output_mute_on_ != mute_on) { |
+ LOG(WARNING) << "output mute state inconsistent, internal mute=" |
+ << output_mute_on_ << ", dbus signal mute=" << mute_on; |
+ } |
} |
void CrasAudioHandler::InputMuteChanged(bool mute_on) { |
- if (input_mute_on_ == mute_on) |
- return; |
- |
- input_mute_on_ = mute_on; |
- // TODO(rkc,jennyz): Fix this also when fixing the output mute. See |
- // crbug.com/239646. |
- FOR_EACH_OBSERVER(AudioObserver, observers_, OnInputMuteChanged()); |
+ if (input_mute_on_ != mute_on) { |
+ LOG(WARNING) << "input mute state inconsistent, internal mute=" |
+ << input_mute_on_ << ", dbus signal mute=" << mute_on; |
+ } |
} |
void CrasAudioHandler::NodesChanged() { |
@@ -381,12 +366,13 @@ void CrasAudioHandler::SetupAudioInputState() { |
input_mute_on_ = audio_pref_handler_->GetMuteValue(active_input_node_id_); |
input_gain_ = audio_pref_handler_->GetVolumeGainValue( |
active_input_node_id_); |
- SetInputMute(input_mute_on_); |
- SetInputGainInternal(input_gain_); |
} else { |
- SetInputMute(kPrefMuteOff); |
- SetInputGainInternal(kDefaultVolumeGainPercent); |
+ input_mute_on_ = kPrefMuteOff; |
+ input_gain_ = kDefaultVolumeGainPercent; |
} |
+ |
+ SetInputMuteInternal(input_mute_on_); |
+ SetInputGainInternal(input_gain_); |
} |
void CrasAudioHandler::SetupAudioOutputState() { |
@@ -429,11 +415,29 @@ void CrasAudioHandler::SetOutputVolumeInternal(int volume) { |
SetOutputVolume(volume); |
} |
+bool CrasAudioHandler::SetOutputMuteInternal(bool mute_on) { |
+ if (output_mute_locked_) |
+ return false; |
+ |
+ chromeos::DBusThreadManager::Get()->GetCrasAudioClient()-> |
+ SetOutputMute(mute_on); |
+ return true; |
+} |
+ |
void CrasAudioHandler::SetInputGainInternal(int gain) { |
chromeos::DBusThreadManager::Get()->GetCrasAudioClient()-> |
SetInputGain(gain); |
} |
+bool CrasAudioHandler::SetInputMuteInternal(bool mute_on) { |
+ if (input_mute_locked_) |
+ return false; |
+ |
+ chromeos::DBusThreadManager::Get()->GetCrasAudioClient()-> |
+ SetInputMute(mute_on); |
+ return true; |
+} |
+ |
void CrasAudioHandler::GetNodes() { |
chromeos::DBusThreadManager::Get()->GetCrasAudioClient()->GetNodes( |
base::Bind(&CrasAudioHandler::HandleGetNodes, |
@@ -455,11 +459,11 @@ void CrasAudioHandler::SwitchToDevice(const AudioDevice& device) { |
// to hear the wrong volume for a device. |
LOG(INFO) << "Switching active device to: " << device.ToString(); |
if (device.is_input) { |
- DBusThreadManager::Get()->GetCrasAudioClient()->SetInputMute(true); |
+ SetInputMuteInternal(true); |
DBusThreadManager::Get()->GetCrasAudioClient()->SetActiveInputNode( |
device.id); |
} else { |
- DBusThreadManager::Get()->GetCrasAudioClient()->SetOutputMute(true); |
+ SetOutputMuteInternal(true); |
DBusThreadManager::Get()->GetCrasAudioClient()->SetActiveOutputNode( |
device.id); |
} |