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 #ifndef LOG_TAG
16 #define LOG_TAG "AudioPolicyManagerZone"
17 #endif
18
19 #include "audio_policy_manager.h"
20 #include "audio_policy_proxy.h"
21 #include "audio_errors.h"
22 #include "audio_server_death_recipient.h"
23 #include "audio_policy_log.h"
24 #include "audio_utils.h"
25 #include "audio_zone_client.h"
26
27 namespace OHOS {
28 namespace AudioStandard {
RegisterAudioZoneClient(const sptr<IRemoteObject> & object)29 int32_t AudioPolicyManager::RegisterAudioZoneClient(const sptr<IRemoteObject> &object)
30 {
31 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
32 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
33
34 return gsp->RegisterAudioZoneClient(object);
35 }
36
CreateAudioZone(const std::string & name,const AudioZoneContext & context)37 int32_t AudioPolicyManager::CreateAudioZone(const std::string &name, const AudioZoneContext &context)
38 {
39 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
40 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
41
42 int32_t zoneId = ERROR;
43 gsp->CreateAudioZone(name, context, zoneId, getpid());
44 return zoneId;
45 }
46
ReleaseAudioZone(int32_t zoneId)47 void AudioPolicyManager::ReleaseAudioZone(int32_t zoneId)
48 {
49 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
50 CHECK_AND_RETURN_LOG(gsp != nullptr, "audio policy manager proxy is NULL.");
51
52 gsp->ReleaseAudioZone(zoneId);
53 }
54
GetAllAudioZone()55 const std::vector<std::shared_ptr<AudioZoneDescriptor>> AudioPolicyManager::GetAllAudioZone()
56 {
57 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
58 std::vector<std::shared_ptr<AudioZoneDescriptor>> zoneDescriptors;
59 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, zoneDescriptors, "audio policy manager proxy is NULL.");
60
61 std::vector<std::shared_ptr<AudioZoneDescriptor>> descs;
62 gsp->GetAllAudioZone(descs);
63 return descs;
64 }
65
GetAudioZone(int32_t zoneId)66 const std::shared_ptr<AudioZoneDescriptor> AudioPolicyManager::GetAudioZone(int32_t zoneId)
67 {
68 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
69 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
70
71 std::shared_ptr<AudioZoneDescriptor> desc;
72 gsp->GetAudioZone(zoneId, desc);
73 return desc;
74 }
75
GetAudioZoneByName(std::string name)76 int32_t AudioPolicyManager::GetAudioZoneByName(std::string name)
77 {
78 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
79 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
80
81 int32_t zoneId = ERROR;
82 gsp->GetAudioZoneByName(name, zoneId);
83 return zoneId;
84 }
85
BindDeviceToAudioZone(int32_t zoneId,std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices)86 int32_t AudioPolicyManager::BindDeviceToAudioZone(int32_t zoneId,
87 std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices)
88 {
89 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
90 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
91
92 return gsp->BindDeviceToAudioZone(zoneId, devices);
93 }
94
UnBindDeviceToAudioZone(int32_t zoneId,std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices)95 int32_t AudioPolicyManager::UnBindDeviceToAudioZone(int32_t zoneId,
96 std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices)
97 {
98 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
99 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
100
101 return gsp->UnBindDeviceToAudioZone(zoneId, devices);
102 }
103
EnableAudioZoneReport(bool enable)104 int32_t AudioPolicyManager::EnableAudioZoneReport(bool enable)
105 {
106 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
107 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
108
109 return gsp->EnableAudioZoneReport(enable);
110 }
111
EnableAudioZoneChangeReport(int32_t zoneId,bool enable)112 int32_t AudioPolicyManager::EnableAudioZoneChangeReport(int32_t zoneId, bool enable)
113 {
114 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
115 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
116
117 return gsp->EnableAudioZoneChangeReport(zoneId, enable);
118 }
119
AddUidToAudioZone(int32_t zoneId,int32_t uid)120 int32_t AudioPolicyManager::AddUidToAudioZone(int32_t zoneId, int32_t uid)
121 {
122 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
123 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
124
125 return gsp->AddUidToAudioZone(zoneId, uid);
126 }
127
RemoveUidFromAudioZone(int32_t zoneId,int32_t uid)128 int32_t AudioPolicyManager::RemoveUidFromAudioZone(int32_t zoneId, int32_t uid)
129 {
130 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
131 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
132
133 return gsp->RemoveUidFromAudioZone(zoneId, uid);
134 }
135
AddStreamToAudioZone(int32_t zoneId,AudioZoneStream stream)136 int32_t AudioPolicyManager::AddStreamToAudioZone(int32_t zoneId, AudioZoneStream stream)
137 {
138 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
139 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
140 return gsp->AddStreamToAudioZone(zoneId, stream);
141 }
142
AddStreamsToAudioZone(int32_t zoneId,std::vector<AudioZoneStream> streams)143 int32_t AudioPolicyManager::AddStreamsToAudioZone(int32_t zoneId, std::vector<AudioZoneStream> streams)
144 {
145 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
146 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
147 return gsp->AddStreamsToAudioZone(zoneId, streams);
148 }
149
SetZoneDeviceVisible(bool visible)150 void AudioPolicyManager::SetZoneDeviceVisible(bool visible)
151 {
152 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
153 CHECK_AND_RETURN_LOG(gsp != nullptr, "audio policy manager proxy is NULL.");
154 gsp->SetZoneDeviceVisible(visible);
155 }
156
RemoveStreamFromAudioZone(int32_t zoneId,AudioZoneStream stream)157 int32_t AudioPolicyManager::RemoveStreamFromAudioZone(int32_t zoneId, AudioZoneStream stream)
158 {
159 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
160 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
161 return gsp->RemoveStreamFromAudioZone(zoneId, stream);
162 }
163
RemoveStreamsFromAudioZone(int32_t zoneId,std::vector<AudioZoneStream> streams)164 int32_t AudioPolicyManager::RemoveStreamsFromAudioZone(int32_t zoneId, std::vector<AudioZoneStream> streams)
165 {
166 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
167 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
168 return gsp->RemoveStreamsFromAudioZone(zoneId, streams);
169 }
170
EnableSystemVolumeProxy(int32_t zoneId,bool enable)171 int32_t AudioPolicyManager::EnableSystemVolumeProxy(int32_t zoneId, bool enable)
172 {
173 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
174 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
175
176 return gsp->EnableSystemVolumeProxy(zoneId, enable);
177 }
178
GetAudioInterruptForZone(int32_t zoneId)179 std::list<std::pair<AudioInterrupt, AudioFocuState>> AudioPolicyManager::GetAudioInterruptForZone(int32_t zoneId)
180 {
181 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
182 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, {}, "audio policy manager proxy is NULL.");
183
184 std::vector<std::map<AudioInterrupt, int32_t>> retList;
185 gsp->GetAudioInterruptForZone(zoneId, retList);
186 auto focusInfoList = FromIpcInterrupts(retList);
187 return focusInfoList;
188 }
189
GetAudioInterruptForZone(int32_t zoneId,const std::string & deviceTag)190 std::list<std::pair<AudioInterrupt, AudioFocuState>> AudioPolicyManager::GetAudioInterruptForZone(
191 int32_t zoneId, const std::string &deviceTag)
192 {
193 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
194 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, {}, "audio policy manager proxy is NULL.");
195
196 std::vector<std::map<AudioInterrupt, int32_t>> retList;
197 gsp->GetAudioInterruptForZone(zoneId, deviceTag, retList);
198 auto focusInfoList = FromIpcInterrupts(retList);
199 return focusInfoList;
200 }
201
EnableAudioZoneInterruptReport(int32_t zoneId,const std::string & deviceTag,bool enable)202 int32_t AudioPolicyManager::EnableAudioZoneInterruptReport(int32_t zoneId, const std::string &deviceTag, bool enable)
203 {
204 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
205 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
206
207 return gsp->EnableAudioZoneInterruptReport(zoneId, deviceTag, enable);
208 }
209
InjectInterruptToAudioZone(int32_t zoneId,const std::list<std::pair<AudioInterrupt,AudioFocuState>> & interrupts)210 int32_t AudioPolicyManager::InjectInterruptToAudioZone(int32_t zoneId,
211 const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts)
212 {
213 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
214 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
215
216 auto ipcInterrupts = ToIpcInterrupts(interrupts);
217 return gsp->InjectInterruptToAudioZone(zoneId, ipcInterrupts);
218 }
219
InjectInterruptToAudioZone(int32_t zoneId,const std::string & deviceTag,const std::list<std::pair<AudioInterrupt,AudioFocuState>> & interrupts)220 int32_t AudioPolicyManager::InjectInterruptToAudioZone(int32_t zoneId, const std::string &deviceTag,
221 const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts)
222 {
223 const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
224 CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
225
226 auto ipcInterrupts = ToIpcInterrupts(interrupts);
227 return gsp->InjectInterruptToAudioZone(zoneId, deviceTag, ipcInterrupts);
228 }
229 } // namespace AudioStandard
230 } // namespace OHOS
231