1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
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 #ifndef LOG_TAG
16 #define LOG_TAG "UserSelectRouter"
17 #endif
18 
19 #include "user_select_router.h"
20 
21 using namespace std;
22 
23 namespace OHOS {
24 namespace AudioStandard {
GetMediaRenderDevice(StreamUsage streamUsage,int32_t clientUID)25 unique_ptr<AudioDeviceDescriptor> UserSelectRouter::GetMediaRenderDevice(StreamUsage streamUsage, int32_t clientUID)
26 {
27     if (streamUsage == STREAM_USAGE_RINGTONE || streamUsage == STREAM_USAGE_VOICE_RINGTONE) {
28         AUDIO_INFO_LOG("Ringtone skip user select");
29         return make_unique<AudioDeviceDescriptor>();
30     }
31     unique_ptr<AudioDeviceDescriptor> perDev_ =
32         AudioStateManager::GetAudioStateManager().GetPreferredMediaRenderDevice();
33     vector<unique_ptr<AudioDeviceDescriptor>> mediaDevices =
34         AudioDeviceManager::GetAudioDeviceManager().GetAvailableDevicesByUsage(MEDIA_OUTPUT_DEVICES);
35     if (perDev_->deviceId_ == 0) {
36         AUDIO_DEBUG_LOG(" PreferredMediaRenderDevice is null");
37         return make_unique<AudioDeviceDescriptor>();
38     } else {
39         int32_t audioId = perDev_->deviceId_;
40         AUDIO_INFO_LOG(" PreferredMediaRenderDevice audioId is %{public}d", audioId);
41         return RouterBase::GetPairCaptureDevice(perDev_, mediaDevices);
42     }
43 }
44 
GetCallRenderDevice(StreamUsage streamUsage,int32_t clientUID)45 unique_ptr<AudioDeviceDescriptor> UserSelectRouter::GetCallRenderDevice(StreamUsage streamUsage, int32_t clientUID)
46 {
47     unique_ptr<AudioDeviceDescriptor> perDev_ =
48         AudioStateManager::GetAudioStateManager().GetPreferredCallRenderDevice();
49     vector<unique_ptr<AudioDeviceDescriptor>> callDevices =
50         AudioDeviceManager::GetAudioDeviceManager().GetAvailableDevicesByUsage(CALL_OUTPUT_DEVICES);
51     if (perDev_->deviceId_ == 0) {
52         AUDIO_DEBUG_LOG(" PreferredCallRenderDevice is null");
53         return make_unique<AudioDeviceDescriptor>();
54     } else {
55         int32_t audioId = perDev_->deviceId_;
56         AUDIO_INFO_LOG(" PreferredCallRenderDevice audioId is %{public}d", audioId);
57         return RouterBase::GetPairCaptureDevice(perDev_, callDevices);
58     }
59 }
60 
GetCallCaptureDevice(SourceType sourceType,int32_t clientUID)61 unique_ptr<AudioDeviceDescriptor> UserSelectRouter::GetCallCaptureDevice(SourceType sourceType, int32_t clientUID)
62 {
63     unique_ptr<AudioDeviceDescriptor> perDev_ =
64         AudioStateManager::GetAudioStateManager().GetPreferredCallCaptureDevice();
65     vector<unique_ptr<AudioDeviceDescriptor>> callDevices =
66         AudioDeviceManager::GetAudioDeviceManager().GetAvailableDevicesByUsage(CALL_INPUT_DEVICES);
67     if (perDev_->deviceId_ == 0) {
68         AUDIO_DEBUG_LOG(" PreferredCallCaptureDevice is null");
69         return make_unique<AudioDeviceDescriptor>();
70     } else {
71         int32_t audioId = perDev_->deviceId_;
72         AUDIO_INFO_LOG(" PreferredCallCaptureDevice audioId is %{public}d", audioId);
73         return RouterBase::GetPairCaptureDevice(perDev_, callDevices);
74     }
75 }
76 
GetRingRenderDevices(StreamUsage streamUsage,int32_t clientUID)77 vector<std::unique_ptr<AudioDeviceDescriptor>> UserSelectRouter::GetRingRenderDevices(StreamUsage streamUsage,
78     int32_t clientUID)
79 {
80     vector<unique_ptr<AudioDeviceDescriptor>> descs;
81     return descs;
82 }
83 
GetRecordCaptureDevice(SourceType sourceType,int32_t clientUID)84 unique_ptr<AudioDeviceDescriptor> UserSelectRouter::GetRecordCaptureDevice(SourceType sourceType, int32_t clientUID)
85 {
86     unique_ptr<AudioDeviceDescriptor> perDev_ =
87         AudioStateManager::GetAudioStateManager().GetPreferredRecordCaptureDevice();
88     vector<unique_ptr<AudioDeviceDescriptor>> recordDevices =
89         AudioDeviceManager::GetAudioDeviceManager().GetAvailableDevicesByUsage(MEDIA_INPUT_DEVICES);
90     if (perDev_->deviceId_ == 0) {
91         AUDIO_DEBUG_LOG(" PreferredRecordCaptureDevice is null");
92         return make_unique<AudioDeviceDescriptor>();
93     } else {
94         int32_t audioId = perDev_->deviceId_;
95         AUDIO_INFO_LOG(" PreferredRecordCaptureDevice audioId is %{public}d", audioId);
96         return RouterBase::GetPairCaptureDevice(perDev_, recordDevices);
97     }
98 }
99 
GetToneRenderDevice(StreamUsage streamUsage,int32_t clientUID)100 unique_ptr<AudioDeviceDescriptor> UserSelectRouter::GetToneRenderDevice(StreamUsage streamUsage, int32_t clientUID)
101 {
102     return make_unique<AudioDeviceDescriptor>();
103 }
104 
105 } // namespace AudioStandard
106 } // namespace OHOS