1 // Copyright (C) 2020 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 #include "AudioProxyDevicesManagerImpl.h"
16 
17 #include <utils/Log.h>
18 
19 using ::android::OK;
20 using ::android::status_t;
21 
22 namespace audio_proxy {
23 namespace service {
24 
25 AudioProxyDevicesManagerImpl::AudioProxyDevicesManagerImpl() = default;
26 AudioProxyDevicesManagerImpl::~AudioProxyDevicesManagerImpl() = default;
27 
registerDevice(const hidl_string & address,const sp<IBusDevice> & device)28 Return<bool> AudioProxyDevicesManagerImpl::registerDevice(
29     const hidl_string& address, const sp<IBusDevice>& device) {
30   if (address.empty() || !device) {
31     return false;
32   }
33 
34   if (!mBusDeviceProvider.add(address, device)) {
35     ALOGE("Failed to register bus device with addr %s", address.c_str());
36     return false;
37   }
38 
39   if (!ensureDevicesFactory()) {
40     ALOGE("Failed to register audio devices factory.");
41     mBusDeviceProvider.removeAll();
42     return false;
43   }
44 
45   return true;
46 }
47 
ensureDevicesFactory()48 bool AudioProxyDevicesManagerImpl::ensureDevicesFactory() {
49   sp<DevicesFactoryImpl> factory = mDevicesFactory.promote();
50   if (factory) {
51     return true;
52   }
53 
54   factory = new DevicesFactoryImpl(mBusDeviceProvider);
55   status_t status = factory->registerAsService("audio_proxy");
56   if (status != OK) {
57     return false;
58   }
59 
60   mDevicesFactory = factory;
61   return true;
62 }
63 
64 }  // namespace service
65 }  // namespace audio_proxy
66