• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 ST_AUDIO_ZONE_MANAGER_H
17 #define ST_AUDIO_ZONE_MANAGER_H
18 
19 #include <vector>
20 #include <list>
21 #include <utility>
22 #include "audio_info.h"
23 #include "audio_interrupt_info.h"
24 #include "audio_system_manager.h"
25 #include "audio_zone_info.h"
26 #include "audio_device_descriptor.h"
27 
28 namespace OHOS {
29 namespace AudioStandard {
30 class AudioZoneCallback {
31 public:
32     virtual ~AudioZoneCallback() = default;
33 
34     virtual void OnAudioZoneAdd(const AudioZoneDescriptor &zoneDescriptor) = 0;
35 
36     virtual void OnAudioZoneRemove(int32_t zoneId) = 0;
37 };
38 
39 class AudioZoneChangeCallback {
40 public:
41     virtual ~AudioZoneChangeCallback() = default;
42 
43     virtual void OnAudioZoneChange(const AudioZoneDescriptor &zoneDescriptor, AudioZoneChangeReason reason) = 0;
44 };
45 
46 class AudioZoneVolumeProxy {
47 public:
48     virtual ~AudioZoneVolumeProxy() = default;
49 
50     virtual void SetSystemVolume(const AudioVolumeType volumeType, const int32_t volumeLevel) = 0;
51     virtual int32_t GetSystemVolume(AudioVolumeType volumeType) = 0;
52 };
53 
54 class AudioZoneInterruptCallback {
55 public:
56     virtual ~AudioZoneInterruptCallback() = default;
57 
58     virtual void OnInterruptEvent(const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts,
59         AudioZoneInterruptReason reason) = 0;
60 };
61 
62 class AudioZoneManager {
63 public:
64     AudioZoneManager() = default;
65     virtual ~AudioZoneManager() = default;
66 
67     static AudioZoneManager *GetInstance();
68 
69     virtual int32_t CreateAudioZone(const std::string &name, const AudioZoneContext &context) = 0;
70 
71     virtual void ReleaseAudioZone(int32_t zoneId) = 0;
72 
73     virtual const std::vector<std::shared_ptr<AudioZoneDescriptor>> GetAllAudioZone() = 0;
74 
75     virtual const std::shared_ptr<AudioZoneDescriptor> GetAudioZone(int32_t zoneId) = 0;
76 
77     virtual int32_t GetAudioZoneByName(std::string name) = 0;
78 
79     virtual int32_t BindDeviceToAudioZone(int32_t zoneId,
80         std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices) = 0;
81 
82     virtual int32_t UnBindDeviceToAudioZone(int32_t zoneId,
83         std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices) = 0;
84 
85     virtual int32_t RegisterAudioZoneCallback(const std::shared_ptr<AudioZoneCallback> &callback) = 0;
86 
87     virtual int32_t UnRegisterAudioZoneCallback() = 0;
88 
89     virtual int32_t RegisterAudioZoneChangeCallback(int32_t zoneId,
90         const std::shared_ptr<AudioZoneChangeCallback> &callback) = 0;
91 
92     virtual int32_t UnRegisterAudioZoneChangeCallback(int32_t zoneId) = 0;
93 
94     virtual int32_t AddUidToAudioZone(int32_t zoneId, int32_t uid) = 0;
95 
96     virtual int32_t RemoveUidFromAudioZone(int32_t zoneId, int32_t uid) = 0;
97 
98     virtual int32_t AddStreamToAudioZone(int32_t zoneId, AudioZoneStream stream) = 0;
99 
100     virtual int32_t AddStreamsToAudioZone(int32_t zoneId, std::vector<AudioZoneStream> streams) = 0;
101 
102     virtual int32_t RemoveStreamFromAudioZone(int32_t zoneId, AudioZoneStream stream) = 0;
103 
104     virtual int32_t RemoveStreamsFromAudioZone(int32_t zoneId, std::vector<AudioZoneStream> streams) = 0;
105 
106     virtual void SetZoneDeviceVisible(bool visible) = 0;
107 
108     virtual int32_t RegisterSystemVolumeProxy(int32_t zoneId,
109         const std::shared_ptr<AudioZoneVolumeProxy> &proxy) = 0;
110 
111     virtual int32_t UnRegisterSystemVolumeProxy(int32_t zoneId) = 0;
112 
113     virtual std::list<std::pair<AudioInterrupt, AudioFocuState>> GetAudioInterruptForZone(
114         int32_t zoneId) = 0;
115 
116     virtual std::list<std::pair<AudioInterrupt, AudioFocuState>> GetAudioInterruptForZone(
117         int32_t zoneId, const std::string &deviceTag) = 0;
118 
119     virtual int32_t RegisterAudioZoneInterruptCallback(int32_t zoneId,
120         const std::shared_ptr<AudioZoneInterruptCallback> &callback) = 0;
121 
122     virtual int32_t UnRegisterAudioZoneInterruptCallback(int32_t zoneId) = 0;
123 
124     virtual int32_t RegisterAudioZoneInterruptCallback(int32_t zoneId, const std::string &deviceTag,
125         const std::shared_ptr<AudioZoneInterruptCallback> &callback) = 0;
126 
127     virtual int32_t UnRegisterAudioZoneInterruptCallback(int32_t zoneId,
128         const std::string &deviceTag) = 0;
129 
130     virtual int32_t InjectInterruptToAudioZone(int32_t zoneId,
131         const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts) = 0;
132 
133     virtual int32_t InjectInterruptToAudioZone(int32_t zoneId, const std::string &deviceTag,
134         const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts) = 0;
135 };
136 } // namespace AudioStandard
137 } // namespace OHOS
138 #endif // ST_AUDIO_ZONE_MANAGER_H