| 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..342ce59186581edf57f819ea130ebd1cfa864976 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,6 +203,10 @@ 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);
|
| @@ -251,7 +260,7 @@ class CrasAudioClientImpl : public CrasAudioClient {
|
| uint64 node_id;
|
| if (!reader.PopUint64(&node_id)) {
|
| LOG(ERROR) << "Error reading signal from cras:"
|
| - << signal->ToString();
|
| + << signal->ToString();
|
| }
|
| FOR_EACH_OBSERVER(Observer, observers_, ActiveOutputNodeChanged(node_id));
|
| }
|
| @@ -261,7 +270,7 @@ class CrasAudioClientImpl : public CrasAudioClient {
|
| uint64 node_id;
|
| if (!reader.PopUint64(&node_id)) {
|
| LOG(ERROR) << "Error reading signal from cras:"
|
| - << signal->ToString();
|
| + << signal->ToString();
|
| }
|
| FOR_EACH_OBSERVER(Observer, observers_, ActiveInputNodeChanged(node_id));
|
| }
|
| @@ -295,7 +304,7 @@ 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: "
|
| @@ -374,32 +383,111 @@ 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 {
|
| + volume_state_.output_volume = volume;
|
| + FOR_EACH_OBSERVER(Observer,
|
| + observers_,
|
| + OutputVolumeChanged(volume_state_.output_volume));
|
| + }
|
| +
|
| + virtual void SetOutputMute(bool mute_on) OVERRIDE {
|
| + 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) {
|
| }
|
|
|
|
|