Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / chromeos / dbus / cras_audio_client_stub_impl.cc
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
9 CrasAudioClientStubImpl::CrasAudioClientStubImpl()
10     : active_input_node_id_(0),
11       active_output_node_id_(0) {
12 }
13
14 CrasAudioClientStubImpl::~CrasAudioClientStubImpl() {
15 }
16
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
63 void CrasAudioClientStubImpl::AddObserver(Observer* observer) {
64   observers_.AddObserver(observer);
65 }
66
67 void CrasAudioClientStubImpl::RemoveObserver(Observer* observer) {
68   observers_.RemoveObserver(observer);
69 }
70
71 bool CrasAudioClientStubImpl::HasObserver(Observer* observer) {
72   return observers_.HasObserver(observer);
73 }
74
75 void CrasAudioClientStubImpl::GetVolumeState(
76     const GetVolumeStateCallback& callback) {
77   callback.Run(volume_state_, true);
78 }
79
80 void CrasAudioClientStubImpl::GetNodes(const GetNodesCallback& callback,
81                                        const ErrorCallback& error_callback) {
82   callback.Run(node_list_, true);
83 }
84
85 void CrasAudioClientStubImpl::SetOutputNodeVolume(uint64 node_id,
86                                                   int32 volume) {
87 }
88
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
96 void CrasAudioClientStubImpl::SetInputNodeGain(uint64 node_id,
97                                                int32 input_gain) {
98 }
99
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
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
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
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
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
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
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
167 void CrasAudioClientStubImpl::SetAudioNodesForTesting(
168     const AudioNodeList& audio_nodes) {
169   node_list_ = audio_nodes;
170 }
171
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