Chromium Code Reviews| Index: chromeos/dbus/cras_audio_client.cc |
| diff --git a/chromeos/dbus/cras_audio_client.cc b/chromeos/dbus/cras_audio_client.cc |
| index 2ed9bdfb7a742a2d26b72eb59d042042dbfd24f8..872b55e72895c46f632deba73d2af9bf3e498a62 100644 |
| --- a/chromeos/dbus/cras_audio_client.cc |
| +++ b/chromeos/dbus/cras_audio_client.cc |
| @@ -23,6 +23,11 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| cras::kCrasServiceName, |
| dbus::ObjectPath(cras::kCrasServicePath)); |
| + // Monitor NameOwnerChanged signal. |
| + cras_proxy_->SetNameOwnerChangedCallback( |
| + base::Bind(&CrasAudioClientImpl::NameOwnerChangedReceived, |
| + weak_ptr_factory_.GetWeakPtr())); |
| + |
| // Monitor the D-Bus signal for output volume change. |
| cras_proxy_->ConnectToSignal( |
| cras::kCrasControlInterface, |
| @@ -198,13 +203,17 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| << "Failed to connect to cras signal:" << signal_name; |
| } |
| + void NameOwnerChangedReceived(dbus::Signal* signal) { |
| + FOR_EACH_OBSERVER(Observer, observers_, AudioClientRestarted()); |
| + } |
| + |
| // Called when a OutputVolumeChanged signal is received. |
| void OutputVolumeChangedReceived(dbus::Signal* signal) { |
| dbus::MessageReader reader(signal); |
| int32 volume; |
| if (!reader.PopInt32(&volume)) { |
| - LOG(ERROR) << "Error reading signal from cras:" |
| - << signal->ToString(); |
| + VLOG(1) << "Error reading signal from cras:" |
|
stevenjb
2013/04/18 17:10:26
These should probably also be LOG(ERROR) or LOG(WA
jennyz
2013/04/18 17:44:21
Done.
|
| + << signal->ToString(); |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, OutputVolumeChanged(volume)); |
| } |
| @@ -214,8 +223,8 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| dbus::MessageReader reader(signal); |
| bool mute; |
| if (!reader.PopBool(&mute)) { |
| - LOG(ERROR) << "Error reading signal from cras:" |
| - << signal->ToString(); |
| + VLOG(1) << "Error reading signal from cras:" |
| + << signal->ToString(); |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, OutputMuteChanged(mute)); |
| } |
| @@ -225,8 +234,8 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| dbus::MessageReader reader(signal); |
| int32 gain; |
| if (!reader.PopInt32(&gain)) { |
| - LOG(ERROR) << "Error reading signal from cras:" |
| - << signal->ToString(); |
| + VLOG(1) << "Error reading signal from cras:" |
| + << signal->ToString(); |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, InputGainChanged(gain)); |
| } |
| @@ -236,8 +245,8 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| dbus::MessageReader reader(signal); |
| bool mute; |
| if (!reader.PopBool(&mute)) { |
| - LOG(ERROR) << "Error reading signal from cras:" |
| - << signal->ToString(); |
| + VLOG(1) << "Error reading signal from cras:" |
| + << signal->ToString(); |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, InputMuteChanged(mute)); |
| } |
| @@ -250,8 +259,8 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| dbus::MessageReader reader(signal); |
| uint64 node_id; |
| if (!reader.PopUint64(&node_id)) { |
| - LOG(ERROR) << "Error reading signal from cras:" |
| - << signal->ToString(); |
| + VLOG(1) << "Error reading signal from cras:" |
| + << signal->ToString(); |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, ActiveOutputNodeChanged(node_id)); |
| } |
| @@ -260,8 +269,8 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| dbus::MessageReader reader(signal); |
| uint64 node_id; |
| if (!reader.PopUint64(&node_id)) { |
| - LOG(ERROR) << "Error reading signal from cras:" |
| - << signal->ToString(); |
| + VLOG(1) << "Error reading signal from cras:" |
| + << signal->ToString(); |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, ActiveInputNodeChanged(node_id)); |
| } |
| @@ -277,12 +286,12 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| !reader.PopInt32(&volume_state.input_gain) || |
| !reader.PopBool(&volume_state.input_mute)) { |
| success = false; |
| - LOG(ERROR) << "Error reading response from cras: " |
| - << response->ToString(); |
| + VLOG(1) << "Error reading response from cras: " |
| + << response->ToString(); |
| } |
| } else { |
| success = false; |
| - LOG(ERROR) << "Error calling " << cras::kGetVolumeState; |
| + VLOG(1) << "Error calling " << cras::kGetVolumeState; |
| } |
| callback.Run(volume_state, success); |
| @@ -295,11 +304,11 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| if (response) { |
| dbus::MessageReader response_reader(response); |
| dbus::MessageReader array_reader(response); |
| - while(response_reader.HasMoreData()) { |
| + while (response_reader.HasMoreData()) { |
| if (!response_reader.PopArray(&array_reader)) { |
| success = false; |
| - LOG(ERROR) << "Error reading response from cras: " |
| - << response->ToString(); |
| + VLOG(1) << "Error reading response from cras: " |
| + << response->ToString(); |
| break; |
| } |
| @@ -315,7 +324,7 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| } |
| } else { |
| success = false; |
| - LOG(ERROR) << "Error calling " << cras::kGetNodes; |
| + VLOG(1) << "Error calling " << cras::kGetNodes; |
| } |
| callback.Run(node_list, success); |
| @@ -374,32 +383,113 @@ class CrasAudioClientStubImpl : public CrasAudioClient { |
| public: |
| CrasAudioClientStubImpl() { |
| VLOG(1) << "CrasAudioClientStubImpl is created"; |
| + |
| + // Fake audio nodes. |
| + AudioNode node_1; |
| + node_1.is_input = false; |
| + node_1.id = 10001; |
| + node_1.device_name = "Fake Audio Output"; |
| + node_1.type = "INTERNAL_SPEAKER"; |
| + node_1.name = "Internal Speaker"; |
| + node_1.active = true; |
| + |
| + AudioNode node_2; |
| + node_2.is_input = true; |
| + node_2.id = 10002; |
| + node_2.device_name = "Fake Audio Input"; |
| + node_2.type = "INTERNAL_MIC"; |
| + node_2.name = "Internal Mic"; |
| + node_2.active = true; |
| + |
| + node_list_.push_back(node_1); |
| + node_list_.push_back(node_2); |
| + } |
| + virtual ~CrasAudioClientStubImpl() { |
| } |
| - virtual ~CrasAudioClientStubImpl() {} |
| // CrasAudioClient overrides: |
| // TODO(jennyz): Implement the observers and callbacks in the stub for UI |
| // testing. |
| - virtual void AddObserver(Observer* observer) OVERRIDE {} |
| - virtual void RemoveObserver(Observer* observer) OVERRIDE {} |
| - virtual bool HasObserver(Observer* observer) OVERRIDE { return false; } |
| + virtual void AddObserver(Observer* observer) OVERRIDE { |
| + observers_.AddObserver(observer); |
| + } |
| + |
| + virtual void RemoveObserver(Observer* observer) OVERRIDE { |
| + observers_.RemoveObserver(observer); |
| + } |
| + |
| + virtual bool HasObserver(Observer* observer) OVERRIDE { |
| + return observers_.HasObserver(observer); |
| + } |
| + |
| virtual void GetVolumeState(const GetVolumeStateCallback& callback) OVERRIDE { |
| + callback.Run(volume_state_, true); |
| + } |
| + |
| + virtual void GetNodes(const GetNodesCallback& callback)OVERRIDE { |
| + callback.Run(node_list_, true); |
| + } |
| + |
| + virtual void SetOutputVolume(int32 volume) OVERRIDE { |
| + VLOG(1) << "CrasAudioClientStubImpl::SetOutputVolume volume=" << volume; |
| + volume_state_.output_volume = volume; |
| + FOR_EACH_OBSERVER(Observer, |
| + observers_, |
| + OutputVolumeChanged(volume_state_.output_volume)); |
| + } |
| + |
| + virtual void SetOutputMute(bool mute_on) OVERRIDE { |
| + VLOG(1) << "CrasAudioClientStubImpl::SetOutputMute, mute_on=" << mute_on; |
| + volume_state_.output_mute = mute_on; |
| + FOR_EACH_OBSERVER(Observer, |
| + observers_, |
| + OutputMuteChanged(volume_state_.output_mute)); |
| + } |
| + |
| + virtual void SetInputGain(int32 input_gain) OVERRIDE { |
| + volume_state_.input_gain = input_gain; |
| + FOR_EACH_OBSERVER(Observer, |
| + observers_, |
| + InputGainChanged(volume_state_.input_gain)); |
| + } |
| + |
| + virtual void SetInputMute(bool mute_on) OVERRIDE { |
| + volume_state_.input_mute = mute_on; |
| + FOR_EACH_OBSERVER(Observer, |
| + observers_, |
| + InputMuteChanged(volume_state_.input_mute)); |
| + } |
| + |
| + virtual void SetActiveOutputNode(uint64 node_id) OVERRIDE { |
| + active_output_node_id_ = node_id; |
| + FOR_EACH_OBSERVER(Observer, |
| + observers_, |
| + ActiveOutputNodeChanged(node_id)); |
| + } |
| + |
| + virtual void SetActiveInputNode(uint64 node_id) OVERRIDE { |
| + active_input_node_id_ = node_id; |
| + FOR_EACH_OBSERVER(Observer, |
| + observers_, |
| + ActiveInputNodeChanged(node_id)); |
| } |
| - virtual void GetNodes(const GetNodesCallback& callback)OVERRIDE {} |
| - virtual void SetOutputVolume(int32 volume) OVERRIDE {} |
| - virtual void SetOutputMute(bool mute_on) OVERRIDE {} |
| - virtual void SetInputGain(int32 input_gain) OVERRIDE {} |
| - virtual void SetInputMute(bool mute_on) OVERRIDE {} |
| - virtual void SetActiveOutputNode(uint64 node_id) OVERRIDE {} |
| - virtual void SetActiveInputNode(uint64 node_id) OVERRIDE {} |
| private: |
| + VolumeState volume_state_; |
| + AudioNodeList node_list_; |
| + uint64 active_input_node_id_; |
| + uint64 active_output_node_id_; |
| + ObserverList<Observer> observers_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(CrasAudioClientStubImpl); |
| }; |
| CrasAudioClient::Observer::~Observer() { |
| } |
| +void CrasAudioClient::Observer::AudioClientRestarted() { |
| +} |
| + |
| void CrasAudioClient::Observer::OutputVolumeChanged(int32 volume) { |
| } |