Home | History | Annotate | Download | only in audioservice
      1 // Copyright 2016 The Android Open Source Project
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //      http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 //
     15 
     16 // Implementation of audio_service_callback.
     17 
     18 #include "audio_service_callback.h"
     19 
     20 #include <base/bind.h>
     21 #include <base/logging.h>
     22 
     23 #include "brillo_audio_client_helpers.h"
     24 #include "brillo_audio_device_info_def.h"
     25 
     26 using android::binder::Status;
     27 
     28 namespace brillo {
     29 
     30 AudioServiceCallback::AudioServiceCallback(const BAudioCallback* callback,
     31                                            void* user_data) {
     32   connected_callback_ = base::Bind(callback->OnAudioDeviceAdded);
     33   disconnected_callback_ = base::Bind(callback->OnAudioDeviceRemoved);
     34   volume_callback_ = base::Bind(callback->OnVolumeChanged);
     35   user_data_ = user_data;
     36 }
     37 
     38 Status AudioServiceCallback::OnAudioDevicesConnected(
     39     const std::vector<int>& devices) {
     40   for (auto device : devices) {
     41     BAudioDeviceInfo device_info;
     42     device_info.internal_ = std::unique_ptr<BAudioDeviceInfoInternal>(
     43         BAudioDeviceInfoInternal::CreateFromAudioDevicesT(device));
     44     connected_callback_.Run(&device_info, user_data_);
     45   }
     46   return Status::ok();
     47 }
     48 
     49 Status AudioServiceCallback::OnAudioDevicesDisconnected(
     50     const std::vector<int>& devices) {
     51   for (auto device : devices) {
     52     BAudioDeviceInfo device_info;
     53     device_info.internal_ = std::unique_ptr<BAudioDeviceInfoInternal>(
     54         BAudioDeviceInfoInternal::CreateFromAudioDevicesT(device));
     55     disconnected_callback_.Run(&device_info, user_data_);
     56   }
     57   return Status::ok();
     58 }
     59 
     60 Status AudioServiceCallback::OnVolumeChanged(int stream,
     61                                              int previous_index,
     62                                              int current_index) {
     63   auto usage = BrilloAudioClientHelpers::GetBAudioUsage(
     64       static_cast<audio_stream_type_t>(stream));
     65   volume_callback_.Run(usage, previous_index, current_index, user_data_);
     66   return Status::ok();
     67 }
     68 
     69 bool AudioServiceCallback::Equals(const android::sp<AudioServiceCallback>& callback) {
     70   if (callback->connected_callback_.Equals(connected_callback_) &&
     71       callback->disconnected_callback_.Equals(disconnected_callback_) &&
     72       callback->volume_callback_.Equals(volume_callback_) &&
     73       callback->user_data_ == user_data_)
     74     return true;
     75   return false;
     76 }
     77 
     78 }  // namespace brillo
     79