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 void CrasAudioClientStubImpl::Init(dbus::Bus* bus) {
     15   VLOG(1) << "CrasAudioClientStubImpl is created";
     16 
     17   // Fake audio output nodes.
     18   AudioNode node_1;
     19   node_1.is_input = false;
     20   node_1.id = 10001;
     21   node_1.device_name = "Fake Speaker";
     22   node_1.type = "INTERNAL_SPEAKER";
     23   node_1.name = "Speaker";
     24   node_list_.push_back(node_1);
     25 
     26   AudioNode node_2;
     27   node_2.is_input = false;
     28   node_2.id = 10002;
     29   node_2.device_name = "Fake Headphone";
     30   node_2.type = "HEADPHONE";
     31   node_2.name = "Headphone";
     32   node_list_.push_back(node_2);
     33 
     34   AudioNode node_3;
     35   node_3.is_input = false;
     36   node_3.id = 10003;
     37   node_3.device_name = "Fake Bluetooth Headphone";
     38   node_3.type = "BLUETOOTH";
     39   node_3.name = "Headphone";
     40   node_list_.push_back(node_3);
     41 
     42   // Fake audio input ndoes
     43   AudioNode node_4;
     44   node_4.is_input = true;
     45   node_4.id = 10004;
     46   node_4.device_name = "Fake Internal Mic";
     47   node_4.type = "INTERNAL_MIC";
     48   node_4.name = "Internal Mic";
     49   node_list_.push_back(node_4);
     50 
     51   AudioNode node_5;
     52   node_5.is_input = true;
     53   node_5.id = 10005;
     54   node_5.device_name = "Fake USB Mic";
     55   node_5.type = "USB";
     56   node_5.name = "Mic";
     57   node_list_.push_back(node_5);
     58 }
     59 
     60 CrasAudioClientStubImpl::~CrasAudioClientStubImpl() {
     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::SetAudioDevices(
    140     const AudioNodeList& audio_nodes) {
    141   node_list_.clear();
    142   for (size_t i = 0; i < audio_nodes.size(); ++i)
    143     node_list_.push_back(audio_nodes[i]);
    144 }
    145 
    146 void CrasAudioClientStubImpl::ChangeAudioNodes(const AudioNodeList& new_nodes) {
    147   SetAudioDevices(new_nodes);
    148   FOR_EACH_OBSERVER(Observer, observers_, NodesChanged());
    149 }
    150 
    151 }  // namespace chromeos
    152