• 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 #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