1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromeos/dbus/cras_audio_client_stub_impl.h"
6
7 namespace chromeos {
8
CrasAudioClientStubImpl()9 CrasAudioClientStubImpl::CrasAudioClientStubImpl()
10 : active_input_node_id_(0),
11 active_output_node_id_(0) {
12 }
13
~CrasAudioClientStubImpl()14 CrasAudioClientStubImpl::~CrasAudioClientStubImpl() {
15 }
16
Init(dbus::Bus * bus)17 void CrasAudioClientStubImpl::Init(dbus::Bus* bus) {
18 VLOG(1) << "CrasAudioClientStubImpl is created";
19
20 // Fake audio output nodes.
21 AudioNode node_1;
22 node_1.is_input = false;
23 node_1.id = 10001;
24 node_1.device_name = "Fake Speaker";
25 node_1.type = "INTERNAL_SPEAKER";
26 node_1.name = "Speaker";
27 node_list_.push_back(node_1);
28
29 AudioNode node_2;
30 node_2.is_input = false;
31 node_2.id = 10002;
32 node_2.device_name = "Fake Headphone";
33 node_2.type = "HEADPHONE";
34 node_2.name = "Headphone";
35 node_list_.push_back(node_2);
36
37 AudioNode node_3;
38 node_3.is_input = false;
39 node_3.id = 10003;
40 node_3.device_name = "Fake Bluetooth Headphone";
41 node_3.type = "BLUETOOTH";
42 node_3.name = "Headphone";
43 node_list_.push_back(node_3);
44
45 // Fake audio input ndoes
46 AudioNode node_4;
47 node_4.is_input = true;
48 node_4.id = 10004;
49 node_4.device_name = "Fake Internal Mic";
50 node_4.type = "INTERNAL_MIC";
51 node_4.name = "Internal Mic";
52 node_list_.push_back(node_4);
53
54 AudioNode node_5;
55 node_5.is_input = true;
56 node_5.id = 10005;
57 node_5.device_name = "Fake USB Mic";
58 node_5.type = "USB";
59 node_5.name = "Mic";
60 node_list_.push_back(node_5);
61 }
62
AddObserver(Observer * observer)63 void CrasAudioClientStubImpl::AddObserver(Observer* observer) {
64 observers_.AddObserver(observer);
65 }
66
RemoveObserver(Observer * observer)67 void CrasAudioClientStubImpl::RemoveObserver(Observer* observer) {
68 observers_.RemoveObserver(observer);
69 }
70
HasObserver(Observer * observer)71 bool CrasAudioClientStubImpl::HasObserver(Observer* observer) {
72 return observers_.HasObserver(observer);
73 }
74
GetVolumeState(const GetVolumeStateCallback & callback)75 void CrasAudioClientStubImpl::GetVolumeState(
76 const GetVolumeStateCallback& callback) {
77 callback.Run(volume_state_, true);
78 }
79
GetNodes(const GetNodesCallback & callback,const ErrorCallback & error_callback)80 void CrasAudioClientStubImpl::GetNodes(const GetNodesCallback& callback,
81 const ErrorCallback& error_callback) {
82 callback.Run(node_list_, true);
83 }
84
SetOutputNodeVolume(uint64 node_id,int32 volume)85 void CrasAudioClientStubImpl::SetOutputNodeVolume(uint64 node_id,
86 int32 volume) {
87 }
88
SetOutputUserMute(bool mute_on)89 void CrasAudioClientStubImpl::SetOutputUserMute(bool mute_on) {
90 volume_state_.output_user_mute = mute_on;
91 FOR_EACH_OBSERVER(Observer,
92 observers_,
93 OutputMuteChanged(volume_state_.output_user_mute));
94 }
95
SetInputNodeGain(uint64 node_id,int32 input_gain)96 void CrasAudioClientStubImpl::SetInputNodeGain(uint64 node_id,
97 int32 input_gain) {
98 }
99
SetInputMute(bool mute_on)100 void CrasAudioClientStubImpl::SetInputMute(bool mute_on) {
101 volume_state_.input_mute = mute_on;
102 FOR_EACH_OBSERVER(Observer,
103 observers_,
104 InputMuteChanged(volume_state_.input_mute));
105 }
106
SetActiveOutputNode(uint64 node_id)107 void CrasAudioClientStubImpl::SetActiveOutputNode(uint64 node_id) {
108 if (active_output_node_id_ == node_id)
109 return;
110
111 for (size_t i = 0; i < node_list_.size(); ++i) {
112 if (node_list_[i].id == active_output_node_id_)
113 node_list_[i].active = false;
114 else if (node_list_[i].id == node_id)
115 node_list_[i].active = true;
116 }
117 active_output_node_id_ = node_id;
118 FOR_EACH_OBSERVER(Observer,
119 observers_,
120 ActiveOutputNodeChanged(node_id));
121 }
122
SetActiveInputNode(uint64 node_id)123 void CrasAudioClientStubImpl::SetActiveInputNode(uint64 node_id) {
124 if (active_input_node_id_ == node_id)
125 return;
126
127 for (size_t i = 0; i < node_list_.size(); ++i) {
128 if (node_list_[i].id == active_input_node_id_)
129 node_list_[i].active = false;
130 else if (node_list_[i].id == node_id)
131 node_list_[i].active = true;
132 }
133 active_input_node_id_ = node_id;
134 FOR_EACH_OBSERVER(Observer,
135 observers_,
136 ActiveInputNodeChanged(node_id));
137 }
138
AddActiveInputNode(uint64 node_id)139 void CrasAudioClientStubImpl::AddActiveInputNode(uint64 node_id) {
140 for (size_t i = 0; i < node_list_.size(); ++i) {
141 if (node_list_[i].id == node_id)
142 node_list_[i].active = true;
143 }
144 }
145
RemoveActiveInputNode(uint64 node_id)146 void CrasAudioClientStubImpl::RemoveActiveInputNode(uint64 node_id) {
147 for (size_t i = 0; i < node_list_.size(); ++i) {
148 if (node_list_[i].id == node_id)
149 node_list_[i].active = false;
150 }
151 }
152
AddActiveOutputNode(uint64 node_id)153 void CrasAudioClientStubImpl::AddActiveOutputNode(uint64 node_id) {
154 for (size_t i = 0; i < node_list_.size(); ++i) {
155 if (node_list_[i].id == node_id)
156 node_list_[i].active = true;
157 }
158 }
159
RemoveActiveOutputNode(uint64 node_id)160 void CrasAudioClientStubImpl::RemoveActiveOutputNode(uint64 node_id) {
161 for (size_t i = 0; i < node_list_.size(); ++i) {
162 if (node_list_[i].id == node_id)
163 node_list_[i].active = false;
164 }
165 }
166
SetAudioNodesForTesting(const AudioNodeList & audio_nodes)167 void CrasAudioClientStubImpl::SetAudioNodesForTesting(
168 const AudioNodeList& audio_nodes) {
169 node_list_ = audio_nodes;
170 }
171
SetAudioNodesAndNotifyObserversForTesting(const AudioNodeList & new_nodes)172 void CrasAudioClientStubImpl::SetAudioNodesAndNotifyObserversForTesting(
173 const AudioNodeList& new_nodes) {
174 SetAudioNodesForTesting(new_nodes);
175 FOR_EACH_OBSERVER(Observer, observers_, NodesChanged());
176 }
177
178 } // namespace chromeos
179