blob: e28852bb201e2f23a41b083a04b7bcdcfbf9bb6e [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/dbus/fake_cras_audio_client.h"
namespace chromeos {
FakeCrasAudioClient::FakeCrasAudioClient()
: active_input_node_id_(0),
active_output_node_id_(0) {
}
FakeCrasAudioClient::~FakeCrasAudioClient() {
}
void FakeCrasAudioClient::Init(dbus::Bus* bus) {
VLOG(1) << "FakeCrasAudioClient is created";
// Fake audio output nodes.
AudioNode output_1;
output_1.is_input = false;
output_1.id = 10001;
output_1.device_name = "Fake Speaker";
output_1.type = "INTERNAL_SPEAKER";
output_1.name = "Speaker";
node_list_.push_back(output_1);
AudioNode output_2;
output_2.is_input = false;
output_2.id = 10002;
output_2.device_name = "Fake Headphone";
output_2.type = "HEADPHONE";
output_2.name = "Headphone";
node_list_.push_back(output_2);
AudioNode output_3;
output_3.is_input = false;
output_3.id = 10003;
output_3.device_name = "Fake Bluetooth Headphone";
output_3.type = "BLUETOOTH";
output_3.name = "Headphone";
node_list_.push_back(output_3);
AudioNode output_4;
output_4.is_input = false;
output_4.id = 10004;
output_4.device_name = "Fake HDMI Speaker";
output_4.type = "HDMI";
output_4.name = "HDMI Speaker";
node_list_.push_back(output_4);
// Fake audio input nodes
AudioNode input_1;
input_1.is_input = true;
input_1.id = 20001;
input_1.device_name = "Fake Internal Mic";
input_1.type = "INTERNAL_MIC";
input_1.name = "Internal Mic";
node_list_.push_back(input_1);
AudioNode input_2;
input_2.is_input = true;
input_2.id = 20002;
input_2.device_name = "Fake USB Mic";
input_2.type = "USB";
input_2.name = "Mic";
node_list_.push_back(input_2);
AudioNode input_3;
input_3.is_input = true;
input_3.id = 20003;
input_3.device_name = "Fake Mick Jack";
input_3.type = "MIC";
input_3.name = "Some type of Mic";
node_list_.push_back(input_3);
}
void FakeCrasAudioClient::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void FakeCrasAudioClient::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
bool FakeCrasAudioClient::HasObserver(const Observer* observer) const {
return observers_.HasObserver(observer);
}
void FakeCrasAudioClient::GetVolumeState(
const GetVolumeStateCallback& callback) {
callback.Run(volume_state_, true);
}
void FakeCrasAudioClient::GetNodes(const GetNodesCallback& callback,
const ErrorCallback& error_callback) {
callback.Run(node_list_, true);
}
void FakeCrasAudioClient::SetOutputNodeVolume(uint64 node_id, int32 volume) {}
void FakeCrasAudioClient::SetOutputUserMute(bool mute_on) {
volume_state_.output_user_mute = mute_on;
FOR_EACH_OBSERVER(Observer, observers_,
OutputMuteChanged(volume_state_.output_user_mute));
}
void FakeCrasAudioClient::SetInputNodeGain(uint64 node_id, int32 input_gain) {}
void FakeCrasAudioClient::SetInputMute(bool mute_on) {
volume_state_.input_mute = mute_on;
FOR_EACH_OBSERVER(Observer, observers_,
InputMuteChanged(volume_state_.input_mute));
}
void FakeCrasAudioClient::SetActiveOutputNode(uint64 node_id) {
if (active_output_node_id_ == node_id)
return;
for (size_t i = 0; i < node_list_.size(); ++i) {
if (node_list_[i].id == active_output_node_id_)
node_list_[i].active = false;
else if (node_list_[i].id == node_id)
node_list_[i].active = true;
}
active_output_node_id_ = node_id;
FOR_EACH_OBSERVER(Observer, observers_, ActiveOutputNodeChanged(node_id));
}
void FakeCrasAudioClient::SetActiveInputNode(uint64 node_id) {
if (active_input_node_id_ == node_id)
return;
for (size_t i = 0; i < node_list_.size(); ++i) {
if (node_list_[i].id == active_input_node_id_)
node_list_[i].active = false;
else if (node_list_[i].id == node_id)
node_list_[i].active = true;
}
active_input_node_id_ = node_id;
FOR_EACH_OBSERVER(Observer, observers_, ActiveInputNodeChanged(node_id));
}
void FakeCrasAudioClient::AddActiveInputNode(uint64 node_id) {
for (size_t i = 0; i < node_list_.size(); ++i) {
if (node_list_[i].id == node_id)
node_list_[i].active = true;
}
}
void FakeCrasAudioClient::RemoveActiveInputNode(uint64 node_id) {
for (size_t i = 0; i < node_list_.size(); ++i) {
if (node_list_[i].id == node_id)
node_list_[i].active = false;
}
}
void FakeCrasAudioClient::SwapLeftRight(uint64 node_id, bool swap) {
}
void FakeCrasAudioClient::AddActiveOutputNode(uint64 node_id) {
for (size_t i = 0; i < node_list_.size(); ++i) {
if (node_list_[i].id == node_id)
node_list_[i].active = true;
}
}
void FakeCrasAudioClient::RemoveActiveOutputNode(uint64 node_id) {
for (size_t i = 0; i < node_list_.size(); ++i) {
if (node_list_[i].id == node_id)
node_list_[i].active = false;
}
}
void FakeCrasAudioClient::InsertAudioNodeToList(const AudioNode& audio_node) {
auto iter = FindNode(audio_node.id);
if (iter != node_list_.end())
(*iter) = audio_node;
else
node_list_.push_back(audio_node);
FOR_EACH_OBSERVER(Observer, observers_, NodesChanged());
}
void FakeCrasAudioClient::RemoveAudioNodeFromList(const uint64& node_id) {
auto iter = FindNode(node_id);
if (iter != node_list_.end()) {
node_list_.erase(iter);
FOR_EACH_OBSERVER(Observer, observers_, NodesChanged());
}
}
void FakeCrasAudioClient::SetAudioNodesForTesting(
const AudioNodeList& audio_nodes) {
node_list_ = audio_nodes;
}
void FakeCrasAudioClient::SetAudioNodesAndNotifyObserversForTesting(
const AudioNodeList& new_nodes) {
SetAudioNodesForTesting(new_nodes);
FOR_EACH_OBSERVER(Observer, observers_, NodesChanged());
}
AudioNodeList::iterator FakeCrasAudioClient::FindNode(uint64 node_id) {
return std::find_if(
node_list_.begin(), node_list_.end(),
[node_id](const AudioNode& node) { return node_id == node.id; });
}
} // namespace chromeos