1 /*
2  * Copyright (c) 2022 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 
16 #include "ohos_adapter/bridge/ark_audio_system_manager_adapter_impl.h"
17 
18 #include "ohos_adapter/bridge/ark_audio_device_desc_adapter_impl.h"
19 #include "ohos_adapter/bridge/ark_audio_interrupt_adapter_wrapper.h"
20 #include "ohos_adapter/bridge/ark_audio_manager_callback_adapter_wrapper.h"
21 #include "ohos_adapter/bridge/ark_audio_manager_device_change_callback_adapter_wrapper.h"
22 #include "ohos_adapter/cpptoc/ark_audio_device_desc_adapter_vector_cpptoc.h"
23 
24 #include "base/bridge/ark_web_bridge_macros.h"
25 
26 namespace OHOS::ArkWeb {
27 
ArkAudioSystemManagerAdapterImpl(NWeb::AudioSystemManagerAdapter & ref)28 ArkAudioSystemManagerAdapterImpl::ArkAudioSystemManagerAdapterImpl(NWeb::AudioSystemManagerAdapter& ref) : real_(ref) {}
29 
HasAudioOutputDevices()30 bool ArkAudioSystemManagerAdapterImpl::HasAudioOutputDevices()
31 {
32     return real_.HasAudioOutputDevices();
33 }
34 
HasAudioInputDevices()35 bool ArkAudioSystemManagerAdapterImpl::HasAudioInputDevices()
36 {
37     return real_.HasAudioInputDevices();
38 }
39 
RequestAudioFocus(const ArkWebRefPtr<ArkAudioInterruptAdapter> audioInterrupt)40 int32_t ArkAudioSystemManagerAdapterImpl::RequestAudioFocus(const ArkWebRefPtr<ArkAudioInterruptAdapter> audioInterrupt)
41 {
42     if (CHECK_REF_PTR_IS_NULL(audioInterrupt)) {
43         return real_.RequestAudioFocus(nullptr);
44     }
45     return real_.RequestAudioFocus(std::make_shared<ArkAudioInterruptAdapterWrapper>(audioInterrupt));
46 }
47 
AbandonAudioFocus(const ArkWebRefPtr<ArkAudioInterruptAdapter> audioInterrupt)48 int32_t ArkAudioSystemManagerAdapterImpl::AbandonAudioFocus(const ArkWebRefPtr<ArkAudioInterruptAdapter> audioInterrupt)
49 {
50     if (CHECK_REF_PTR_IS_NULL(audioInterrupt)) {
51         return real_.AbandonAudioFocus(nullptr);
52     }
53     return real_.AbandonAudioFocus(std::make_shared<ArkAudioInterruptAdapterWrapper>(audioInterrupt));
54 }
55 
SetAudioManagerInterruptCallback(ArkWebRefPtr<ArkAudioManagerCallbackAdapter> callback)56 int32_t ArkAudioSystemManagerAdapterImpl::SetAudioManagerInterruptCallback(
57     ArkWebRefPtr<ArkAudioManagerCallbackAdapter> callback)
58 {
59     if (CHECK_REF_PTR_IS_NULL(callback)) {
60         return real_.SetAudioManagerInterruptCallback(nullptr);
61     }
62 
63     return real_.SetAudioManagerInterruptCallback(std::make_shared<ArkAudioManagerCallbackAdapterWrapper>(callback));
64 }
65 
UnsetAudioManagerInterruptCallback()66 int32_t ArkAudioSystemManagerAdapterImpl::UnsetAudioManagerInterruptCallback()
67 {
68     return real_.UnsetAudioManagerInterruptCallback();
69 }
70 
GetDevices(int32_t flag)71 ArkAudioDeviceDescAdapterVector ArkAudioSystemManagerAdapterImpl::GetDevices(int32_t flag)
72 {
73     std::vector<std::shared_ptr<NWeb::AudioDeviceDescAdapter>> descs = real_.GetDevices((NWeb::AdapterDeviceFlag)flag);
74     ArkAudioDeviceDescAdapterVector result = ArkAudioDeviceDescAdapterVectorClassToStruct(descs);
75     return result;
76 }
77 
SelectAudioDeviceById(int32_t id,bool isInput)78 int32_t ArkAudioSystemManagerAdapterImpl::SelectAudioDeviceById(int32_t id, bool isInput)
79 {
80     return real_.SelectAudioDeviceById(id, isInput);
81 }
82 
SetDeviceChangeCallback(ArkWebRefPtr<ArkAudioManagerDeviceChangeCallbackAdapter> callback)83 int32_t ArkAudioSystemManagerAdapterImpl::SetDeviceChangeCallback(
84     ArkWebRefPtr<ArkAudioManagerDeviceChangeCallbackAdapter> callback)
85 {
86     if (CHECK_REF_PTR_IS_NULL(callback)) {
87         return real_.SetDeviceChangeCallback(nullptr);
88     }
89 
90     return real_.SetDeviceChangeCallback(std::make_shared<ArkAudioManagerDeviceChangeCallbackAdapterWrapper>(callback));
91 }
92 
UnsetDeviceChangeCallback()93 int32_t ArkAudioSystemManagerAdapterImpl::UnsetDeviceChangeCallback()
94 {
95     return real_.UnsetDeviceChangeCallback();
96 }
97 
GetDefaultOutputDevice()98 ArkWebRefPtr<ArkAudioDeviceDescAdapter> ArkAudioSystemManagerAdapterImpl::GetDefaultOutputDevice()
99 {
100     std::shared_ptr<NWeb::AudioDeviceDescAdapter> desc = real_.GetDefaultOutputDevice();
101     if (CHECK_SHARED_PTR_IS_NULL(desc)) {
102         return nullptr;
103     }
104 
105     return new ArkAudioDeviceDescAdapterImpl(desc);
106 }
107 
GetDefaultInputDevice()108 ArkWebRefPtr<ArkAudioDeviceDescAdapter> ArkAudioSystemManagerAdapterImpl::GetDefaultInputDevice()
109 {
110     std::shared_ptr<NWeb::AudioDeviceDescAdapter> desc = real_.GetDefaultInputDevice();
111     if (CHECK_SHARED_PTR_IS_NULL(desc)) {
112         return nullptr;
113     }
114 
115     return new ArkAudioDeviceDescAdapterImpl(desc);
116 }
117 
SetLanguage(ArkWebString language)118 bool ArkAudioSystemManagerAdapterImpl::SetLanguage(ArkWebString language)
119 {
120     return real_.SetLanguage(ArkWebStringStructToClass(language));
121 }
122 
123 } // namespace OHOS::ArkWeb
124