Home | History | Annotate | Download | only in dbus
      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
    179