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 #ifndef AUDIO_SYSTEM_MANAGER_ADAPTER_H
17 #define AUDIO_SYSTEM_MANAGER_ADAPTER_H
18 
19 #include <vector>
20 
21 #include "audio_renderer_adapter.h"
22 
23 namespace OHOS::NWeb {
24 
25 enum class AudioAdapterStreamType : int32_t {
26     STREAM_DEFAULT = -1,
27     STREAM_VOICE_CALL = 0,
28     STREAM_MUSIC = 1,
29     STREAM_RING = 2,
30     STREAM_MEDIA = 3,
31     STREAM_VOICE_ASSISTANT = 4,
32     STREAM_SYSTEM = 5,
33     STREAM_ALARM = 6,
34     STREAM_NOTIFICATION = 7,
35     STREAM_BLUETOOTH_SCO = 8,
36     STREAM_ENFORCED_AUDIBLE = 9,
37     STREAM_DTMF = 10,
38     STREAM_TTS = 11,
39     STREAM_ACCESSIBILITY = 12,
40     STREAM_RECORDING = 13,
41     STREAM_ALL = 100
42 };
43 
44 enum AdapterDeviceFlag : int32_t {
45     NONE_DEVICES_FLAG = 0,
46     OUTPUT_DEVICES_FLAG = 1,
47     INPUT_DEVICES_FLAG = 2,
48     ALL_DEVICES_FLAG = 3,
49     DISTRIBUTED_OUTPUT_DEVICES_FLAG = 4,
50     DISTRIBUTED_INPUT_DEVICES_FLAG = 8,
51     ALL_DISTRIBUTED_DEVICES_FLAG = 12,
52     ALL_L_D_DEVICES_FLAG = 15,
53     DEVICE_FLAG_MAX
54 };
55 
56 class AudioInterruptAdapter {
57 public:
58     AudioInterruptAdapter() = default;
59 
60     virtual ~AudioInterruptAdapter() = default;
61 
62     virtual AudioAdapterStreamUsage GetStreamUsage() = 0;
63 
64     virtual AudioAdapterContentType GetContentType() = 0;
65 
66     virtual AudioAdapterStreamType GetStreamType() = 0;
67 
68     virtual uint32_t GetSessionID() = 0;
69 
70     virtual bool GetPauseWhenDucked() = 0;
71 };
72 
73 class AudioDeviceDescAdapter {
74 public:
75     AudioDeviceDescAdapter() = default;
76 
77     virtual ~AudioDeviceDescAdapter() = default;
78 
79     virtual int32_t GetDeviceId() = 0;
80 
81     virtual std::string GetDeviceName() = 0;
82 };
83 
84 class AudioManagerCallbackAdapter {
85 public:
86     AudioManagerCallbackAdapter() = default;
87 
88     virtual ~AudioManagerCallbackAdapter() = default;
89 
90     virtual void OnSuspend() = 0;
91 
92     virtual void OnResume() = 0;
93 };
94 
95 class AudioManagerDeviceChangeCallbackAdapter {
96 public:
97     AudioManagerDeviceChangeCallbackAdapter() = default;
98 
99     virtual ~AudioManagerDeviceChangeCallbackAdapter() = default;
100 
101     virtual void OnDeviceChange() = 0;
102 };
103 
104 class AudioSystemManagerAdapter {
105 public:
106     AudioSystemManagerAdapter() = default;
107 
108     virtual ~AudioSystemManagerAdapter() = default;
109 
110     virtual bool HasAudioOutputDevices() = 0;
111 
112     virtual bool HasAudioInputDevices() = 0;
113 
114     virtual int32_t RequestAudioFocus(const std::shared_ptr<AudioInterruptAdapter> audioInterrupt) = 0;
115 
116     virtual int32_t AbandonAudioFocus(const std::shared_ptr<AudioInterruptAdapter> audioInterrupt) = 0;
117 
118     virtual int32_t SetAudioManagerInterruptCallback(std::shared_ptr<AudioManagerCallbackAdapter> callback) = 0;
119 
120     virtual int32_t UnsetAudioManagerInterruptCallback() = 0;
121 
122     virtual std::vector<std::shared_ptr<AudioDeviceDescAdapter>> GetDevices(AdapterDeviceFlag flag) = 0;
123 
124     virtual int32_t SelectAudioDeviceById(int32_t deviceId, bool isInput) = 0;
125 
126     virtual int32_t SetDeviceChangeCallback(std::shared_ptr<AudioManagerDeviceChangeCallbackAdapter> callback) = 0;
127 
128     virtual int32_t UnsetDeviceChangeCallback() = 0;
129 
130     virtual std::shared_ptr<AudioDeviceDescAdapter> GetDefaultOutputDevice() = 0;
131 
132     virtual std::shared_ptr<AudioDeviceDescAdapter> GetDefaultInputDevice() = 0;
133 
134     virtual bool SetLanguage(const std::string& language) = 0;
135 };
136 
137 } // namespace OHOS::NWeb
138 
139 #endif // AUDIO_RENDERER_ADAPTER_H
140