• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 "audio_policy_manager.h"
17 #include "audio_errors.h"
18 #include "audio_policy_proxy.h"
19 #include "audio_server_death_recipient.h"
20 #include "audio_log.h"
21 #include "audio_utils.h"
22 #include "iservice_registry.h"
23 #include "system_ability_definition.h"
24 
25 namespace OHOS {
26 namespace AudioStandard {
27 using namespace std;
28 
29 static sptr<IAudioPolicy> g_apProxy = nullptr;
30 mutex g_apProxyMutex;
31 constexpr int64_t SLEEP_TIME = 1;
32 constexpr int32_t RETRY_TIMES = 3;
33 std::mutex g_cBMapMutex;
34 std::mutex g_cBDiedMapMutex;
35 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
36 sptr<AudioPolicyClientStubImpl> AudioPolicyManager::audioStaticPolicyClientStubCB_;
37 std::vector<std::shared_ptr<AudioStreamPolicyServiceDiedCallback>> AudioPolicyManager::audioStreamCBMap_;
38 
GetAudioPolicyManagerProxy()39 inline const sptr<IAudioPolicy> GetAudioPolicyManagerProxy()
40 {
41     AUDIO_DEBUG_LOG("Start to get audio manager service proxy.");
42     lock_guard<mutex> lock(g_apProxyMutex);
43 
44     if (g_apProxy == nullptr) {
45         auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
46         CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
47 
48         sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
49         CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
50 
51         g_apProxy = iface_cast<IAudioPolicy>(object);
52         CHECK_AND_RETURN_RET_LOG(g_apProxy != nullptr, nullptr, "Init g_apProxy is NULL.");
53 
54         AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
55         pid_t pid = 0;
56         sptr<AudioServerDeathRecipient> deathRecipient_ = new(std::nothrow) AudioServerDeathRecipient(pid);
57         if (deathRecipient_ != nullptr) {
58             deathRecipient_->SetNotifyCb(std::bind(&AudioPolicyManager::AudioPolicyServerDied,
59                 std::placeholders::_1));
60             AUDIO_DEBUG_LOG("Register audio policy server death recipient");
61             bool result = object->AddDeathRecipient(deathRecipient_);
62             if (!result) {
63                 AUDIO_ERR_LOG("failed to add deathRecipient");
64             }
65         }
66     }
67 
68     const sptr<IAudioPolicy> gsp = g_apProxy;
69     return gsp;
70 }
71 
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)72 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
73 {
74     std::unique_lock<std::mutex> lock(registerCallbackMutex_);
75     audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
76     audioStaticPolicyClientStubCB_ = audioPolicyClientStubCB_;
77     sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
78     if (object == nullptr) {
79         AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
80         lock.unlock();
81         return ERROR;
82     }
83     lock.unlock();
84 
85     return gsp->RegisterPolicyCallbackClient(object);
86 }
87 
RecoverAudioPolicyCallbackClient()88 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
89 {
90     if (audioStaticPolicyClientStubCB_ == nullptr) {
91         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
92         return;
93     }
94 
95     int32_t retry = RETRY_TIMES;
96     sptr<IAudioPolicy> gsp = nullptr;
97     while (retry--) {
98         // Sleep and wait for 1 second;
99         sleep(SLEEP_TIME);
100         gsp = GetAudioPolicyManagerProxy();
101         if (gsp != nullptr) {
102             AUDIO_INFO_LOG("Reconnect audio policy service success!");
103             break;
104         }
105     }
106 
107     CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
108 
109     sptr<IRemoteObject> object = audioStaticPolicyClientStubCB_->AsObject();
110     if (object == nullptr) {
111         AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
112         return;
113     }
114 
115     gsp->RegisterPolicyCallbackClient(object);
116 }
117 
AudioPolicyServerDied(pid_t pid)118 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
119 {
120     if (g_apProxy == nullptr) {
121         AUDIO_ERR_LOG("Audio policy server has already died!");
122         return;
123     }
124     {
125         std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
126         AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
127         std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
128         for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
129             cb = it->second.lock();
130             if (cb != nullptr) {
131                 cb->OnAudioPolicyServiceDied();
132             }
133         }
134     }
135     {
136         std::lock_guard<std::mutex> lock(g_apProxyMutex);
137         g_apProxy = nullptr;
138     }
139     RecoverAudioPolicyCallbackClient();
140 
141     {
142         std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
143         if (audioStreamCBMap_.size() != 0) {
144             for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end(); ++it) {
145                 if (*it != nullptr) {
146                     (*it)->OnAudioPolicyServiceDied();
147                 }
148             }
149         }
150     }
151 }
152 
GetMaxVolumeLevel(AudioVolumeType volumeType)153 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
154 {
155     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
156     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
157 
158     return gsp->GetMaxVolumeLevel(volumeType);
159 }
160 
GetMinVolumeLevel(AudioVolumeType volumeType)161 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
162 {
163     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
164     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
165 
166     return gsp->GetMinVolumeLevel(volumeType);
167 }
168 
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,API_VERSION api_v)169 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, API_VERSION api_v)
170 {
171     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
172     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
173 
174     return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, api_v);
175 }
176 
SetRingerMode(AudioRingerMode ringMode,API_VERSION api_v)177 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode, API_VERSION api_v)
178 {
179     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
180     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
181     return gsp->SetRingerMode(ringMode, api_v);
182 }
183 
GetRingerMode()184 AudioRingerMode AudioPolicyManager::GetRingerMode()
185 {
186     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
187     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
188     return gsp->GetRingerMode();
189 }
190 
SetAudioScene(AudioScene scene)191 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
192 {
193     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
194     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
195     return gsp->SetAudioScene(scene);
196 }
197 
SetMicrophoneMute(bool isMute)198 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
199 {
200     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
201     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
202     return gsp->SetMicrophoneMute(isMute);
203 }
204 
SetMicrophoneMuteAudioConfig(bool isMute)205 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
206 {
207     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
208     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
209     return gsp->SetMicrophoneMuteAudioConfig(isMute);
210 }
211 
IsMicrophoneMute(API_VERSION api_v)212 bool AudioPolicyManager::IsMicrophoneMute(API_VERSION api_v)
213 {
214     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
215     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
216     return gsp->IsMicrophoneMute(api_v);
217 }
218 
GetAudioScene()219 AudioScene AudioPolicyManager::GetAudioScene()
220 {
221     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
222     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
223     return gsp->GetAudioScene();
224 }
225 
GetSystemVolumeLevel(AudioVolumeType volumeType)226 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType)
227 {
228     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
229     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
230     return gsp->GetSystemVolumeLevel(volumeType);
231 }
232 
SetStreamMute(AudioVolumeType volumeType,bool mute,API_VERSION api_v)233 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, API_VERSION api_v)
234 {
235     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
236     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
237     return gsp->SetStreamMute(volumeType, mute, api_v);
238 }
239 
GetStreamMute(AudioVolumeType volumeType)240 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
241 {
242     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
243     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
244     return gsp->GetStreamMute(volumeType);
245 }
246 
SetLowPowerVolume(int32_t streamId,float volume)247 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
248 {
249     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
250     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
251     return gsp->SetLowPowerVolume(streamId, volume);
252 }
253 
GetLowPowerVolume(int32_t streamId)254 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
255 {
256     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
257     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
258     return gsp->GetLowPowerVolume(streamId);
259 }
260 
GetSingleStreamVolume(int32_t streamId)261 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
262 {
263     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
264     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
265     return gsp->GetSingleStreamVolume(streamId);
266 }
267 
IsStreamActive(AudioVolumeType volumeType)268 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
269 {
270     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
271     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
272     return gsp->IsStreamActive(volumeType);
273 }
274 
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)275 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
276     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
277 {
278     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
279     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
280     return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
281 }
282 
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)283 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
284 {
285     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
286     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
287     return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
288 }
289 
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)290 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
291     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
292 {
293     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
294     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
295     return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
296 }
297 
GetDevices(DeviceFlag deviceFlag)298 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
299 {
300     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
301     if (gsp == nullptr) {
302         AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
303         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
304         return deviceInfo;
305     }
306     return gsp->GetDevices(deviceFlag);
307 }
308 
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)309 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
310     AudioRendererInfo &rendererInfo)
311 {
312     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
313     if (gsp == nullptr) {
314         AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
315         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
316         return deviceInfo;
317     }
318     return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
319 }
320 
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)321 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
322     AudioCapturerInfo &captureInfo)
323 {
324     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
325     if (gsp == nullptr) {
326         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
327         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
328         return deviceInfo;
329     }
330     return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
331 }
332 
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)333 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
334     const int32_t zoneID)
335 {
336     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
337     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
338     return gsp->GetAudioFocusInfoList(focusInfoList, zoneID);
339 }
340 
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)341 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
342     const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
343 {
344     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
345     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
346     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
347     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
348         "RegisterFocusInfoChangeCallback: callback is nullptr");
349 
350     if (audioPolicyClientStubCB_ == nullptr) {
351         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
352         if (ret != SUCCESS) {
353             return ret;
354         }
355     }
356 
357     audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
358     return SUCCESS;
359 }
360 
UnregisterFocusInfoChangeCallback(const int32_t clientId)361 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
362 {
363     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
364     if (audioPolicyClientStubCB_ != nullptr) {
365         audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
366     }
367     return SUCCESS;
368 }
369 
370 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()371 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
372 {
373     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
374     if (gsp == nullptr) {
375         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
376         std::vector<int> lSupportedToneList = {};
377         return lSupportedToneList;
378     }
379     return gsp->GetSupportedTones();
380 }
381 
GetToneConfig(int32_t ltonetype)382 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
383 {
384     AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
385 
386     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
387     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
388     return gsp->GetToneConfig(ltonetype);
389 }
390 #endif
391 
SetDeviceActive(InternalDeviceType deviceType,bool active)392 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
393 {
394     AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
395     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
396     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
397     return gsp->SetDeviceActive(deviceType, active);
398 }
399 
IsDeviceActive(InternalDeviceType deviceType)400 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
401 {
402     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
403     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
404     return gsp->IsDeviceActive(deviceType);
405 }
406 
GetActiveOutputDevice()407 DeviceType AudioPolicyManager::GetActiveOutputDevice()
408 {
409     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
410     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
411     return gsp->GetActiveOutputDevice();
412 }
413 
GetActiveInputDevice()414 DeviceType AudioPolicyManager::GetActiveInputDevice()
415 {
416     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
417     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
418     return gsp->GetActiveInputDevice();
419 }
420 
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)421 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
422     const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
423 {
424     AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
425     if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
426         AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
427         return ERR_PERMISSION_DENIED;
428     }
429 
430     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
431     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
432     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
433 
434     if (audioPolicyClientStubCB_ == nullptr) {
435         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
436         if (ret != SUCCESS) {
437             return ret;
438         }
439     }
440     audioPolicyClientStubCB_->AddRingerModeCallback(callback);
441     return SUCCESS;
442 }
443 
UnsetRingerModeCallback(const int32_t clientId)444 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
445 {
446     AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
447     if (audioPolicyClientStubCB_ != nullptr) {
448         audioPolicyClientStubCB_->RemoveRingerModeCallback();
449     }
450     return SUCCESS;
451 }
452 
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)453 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
454     const std::shared_ptr<AudioRingerModeCallback> &callback)
455 {
456     AUDIO_DEBUG_LOG("Remove one ringer mode callback");
457     if (audioPolicyClientStubCB_ != nullptr) {
458         audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
459     }
460     return SUCCESS;
461 }
462 
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)463 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
464     const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
465 {
466     AUDIO_DEBUG_LOG("AudioPolicyManager::SetDeviceChangeCallback");
467     bool hasSystemPermission = PermissionUtil::VerifySystemPermission();
468     switch (flag) {
469         case NONE_DEVICES_FLAG:
470         case DISTRIBUTED_OUTPUT_DEVICES_FLAG:
471         case DISTRIBUTED_INPUT_DEVICES_FLAG:
472         case ALL_DISTRIBUTED_DEVICES_FLAG:
473         case ALL_L_D_DEVICES_FLAG:
474             if (!hasSystemPermission) {
475                 AUDIO_ERR_LOG("SetDeviceChangeCallback: No system permission");
476                 return ERR_PERMISSION_DENIED;
477             }
478             break;
479         default:
480             break;
481     }
482 
483     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
484     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
485     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "SetDeviceChangeCallback: callback is nullptr");
486 
487     if (audioPolicyClientStubCB_ == nullptr) {
488         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
489         if (ret != SUCCESS) {
490             return ret;
491         }
492     }
493 
494     audioPolicyClientStubCB_->AddDeviceChangeCallback(flag, callback);
495     return SUCCESS;
496 }
497 
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag)498 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag)
499 {
500     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetDeviceChangeCallback");
501     if (audioPolicyClientStubCB_ != nullptr) {
502         audioPolicyClientStubCB_->RemoveDeviceChangeCallback();
503     }
504     return SUCCESS;
505 }
506 
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)507 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
508     const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
509 {
510     AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredOutputDeviceChangeCallback");
511     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
512     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
513     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
514 
515     if (audioPolicyClientStubCB_ == nullptr) {
516         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
517         if (ret != SUCCESS) {
518             return ret;
519         }
520     }
521 
522     audioPolicyClientStubCB_->AddPreferredOutputDeviceChangeCallback(callback);
523     return SUCCESS;
524 }
525 
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)526 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
527     const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
528 {
529     AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredInputDeviceChangeCallback");
530     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
531     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
532     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
533 
534     if (audioPolicyClientStubCB_ == nullptr) {
535         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
536         if (ret != SUCCESS) {
537             return ret;
538         }
539     }
540 
541     audioPolicyClientStubCB_->AddPreferredInputDeviceChangeCallback(callback);
542     return SUCCESS;
543 }
544 
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)545 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
546 {
547     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback");
548     if (audioPolicyClientStubCB_ != nullptr) {
549         audioPolicyClientStubCB_->RemovePreferredOutputDeviceChangeCallback();
550     }
551     return SUCCESS;
552 }
553 
UnsetPreferredInputDeviceChangeCallback()554 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
555 {
556     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback");
557     if (audioPolicyClientStubCB_ != nullptr) {
558         audioPolicyClientStubCB_->RemovePreferredInputDeviceChangeCallback();
559     }
560     return SUCCESS;
561 }
562 
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)563 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
564     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
565 {
566     AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
567     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
568     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
569     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
570 
571     if (audioPolicyClientStubCB_ == nullptr) {
572         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
573         if (ret != SUCCESS) {
574             return ret;
575         }
576     }
577 
578     audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
579     return SUCCESS;
580 }
581 
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,const int32_t zoneID)582 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
583     const std::shared_ptr<AudioInterruptCallback> &callback, const int32_t zoneID)
584 {
585     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
586     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
587     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
588 
589     sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
590     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
591     listener->SetInterruptCallback(callback);
592 
593     sptr<IRemoteObject> object = listener->AsObject();
594     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
595 
596     return gsp->SetAudioInterruptCallback(sessionID, object, zoneID);
597 }
598 
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)599 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
600 {
601     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
602     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
603     return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
604 }
605 
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)606 int32_t AudioPolicyManager::ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
607 {
608     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
609     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
610     return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID);
611 }
612 
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)613 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
614 {
615     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
616     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
617     return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
618 }
619 
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)620 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
621     const std::shared_ptr<AudioInterruptCallback> &callback)
622 {
623     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
624     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
625     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
626 
627     std::unique_lock<std::mutex> lock(listenerStubMutex_);
628     sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
629     CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
630     interruptListenerStub->SetInterruptCallback(callback);
631 
632     sptr<IRemoteObject> object = interruptListenerStub->AsObject();
633     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
634     lock.unlock();
635 
636     return gsp->SetAudioManagerInterruptCallback(clientId, object);
637 }
638 
UnsetAudioManagerInterruptCallback(const int32_t clientId)639 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
640 {
641     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
642     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
643     return gsp->UnsetAudioManagerInterruptCallback(clientId);
644 }
645 
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)646 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
647 {
648     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
649     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
650     return gsp->RequestAudioFocus(clientId, audioInterrupt);
651 }
652 
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)653 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
654 {
655     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
656     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
657     return gsp->AbandonAudioFocus(clientId, audioInterrupt);
658 }
659 
GetStreamInFocus(const int32_t zoneID)660 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
661 {
662     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
663     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
664     return gsp->GetStreamInFocus(zoneID);
665 }
666 
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)667 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
668 {
669     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
670     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
671     return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
672 }
673 
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)674 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
675     const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
676 {
677     AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
678     if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
679         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
680         return ERR_PERMISSION_DENIED;
681     }
682     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
683     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
684 
685     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
686 
687     if (audioPolicyClientStubCB_ == nullptr) {
688         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
689         if (ret != SUCCESS) {
690             return ret;
691         }
692     }
693 
694     audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
695     return SUCCESS;
696 }
697 
UnsetVolumeKeyEventCallback(const int32_t clientPid)698 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(const int32_t clientPid)
699 {
700     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetVolumeKeyEventCallback");
701     if (audioPolicyClientStubCB_ != nullptr) {
702         audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback();
703     }
704     return SUCCESS;
705 }
706 
RegisterAudioRendererEventListener(const int32_t clientPid,const std::shared_ptr<AudioRendererStateChangeCallback> & callback)707 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(const int32_t clientPid,
708     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
709 {
710     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioRendererEventListener");
711     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
712     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
713     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
714 
715     if (audioPolicyClientStubCB_ == nullptr) {
716         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
717         if (ret != SUCCESS) {
718             return ret;
719         }
720     }
721 
722     audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
723     isAudioRendererEventListenerRegistered = true;
724     return SUCCESS;
725 }
726 
UnregisterAudioRendererEventListener(const int32_t clientPid)727 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(const int32_t clientPid)
728 {
729     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioRendererEventListener");
730     if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
731         audioPolicyClientStubCB_->RemoveRendererStateChangeCallback();
732         isAudioRendererEventListenerRegistered = false;
733     }
734     return SUCCESS;
735 }
736 
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)737 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
738     const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
739 {
740     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
741     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
742     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
743 
744     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
745 
746     if (audioPolicyClientStubCB_ == nullptr) {
747         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
748         if (ret != SUCCESS) {
749             return ret;
750         }
751     }
752 
753     audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
754     isAudioCapturerEventListenerRegistered = true;
755     return SUCCESS;
756 }
757 
UnregisterAudioCapturerEventListener(const int32_t clientPid)758 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
759 {
760     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
761     if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
762         audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
763         isAudioCapturerEventListenerRegistered = false;
764     }
765     return SUCCESS;
766 }
767 
RegisterOutputDeviceChangeWithInfoCallback(const uint32_t sessionID,const std::shared_ptr<OutputDeviceChangeWithInfoCallback> & callback)768 int32_t AudioPolicyManager::RegisterOutputDeviceChangeWithInfoCallback(
769     const uint32_t sessionID, const std::shared_ptr<OutputDeviceChangeWithInfoCallback> &callback)
770 {
771     AUDIO_DEBUG_LOG("Entered %{public}s", __func__);
772     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
773     if (gsp == nullptr) {
774         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: audio policy manager proxy is NULL.");
775         return ERROR;
776     }
777 
778     if (callback == nullptr) {
779         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: RendererEvent Listener callback is nullptr");
780         return ERR_INVALID_PARAM;
781     }
782 
783     if (audioPolicyClientStubCB_ == nullptr) {
784         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
785         if (ret != SUCCESS) {
786             return ret;
787         }
788     }
789 
790     audioPolicyClientStubCB_->AddOutputDeviceChangeWithInfoCallback(sessionID, callback);
791     return SUCCESS;
792 }
793 
UnregisterOutputDeviceChangeWithInfoCallback(const uint32_t sessionID)794 int32_t AudioPolicyManager::UnregisterOutputDeviceChangeWithInfoCallback(const uint32_t sessionID)
795 {
796     AUDIO_DEBUG_LOG("Entered %{public}s", __func__);
797     if (audioPolicyClientStubCB_ != nullptr) {
798         audioPolicyClientStubCB_->RemoveOutputDeviceChangeWithInfoCallback(sessionID);
799     }
800     return SUCCESS;
801 }
802 
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)803 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
804     const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
805 {
806     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
807     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
808     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
809 
810     std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
811     sptr<AudioClientTrackerCallbackStub> callback = new(std::nothrow) AudioClientTrackerCallbackStub();
812     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
813 
814     callback->SetClientTrackerCallback(clientTrackerObj);
815 
816     sptr<IRemoteObject> object = callback->AsObject();
817     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
818     lock.unlock();
819 
820     return gsp->RegisterTracker(mode, streamChangeInfo, object);
821 }
822 
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)823 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
824 {
825     AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
826     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
827     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
828     return gsp->UpdateTracker(mode, streamChangeInfo);
829 }
830 
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,SourceType sourceType)831 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
832     SourceType sourceType)
833 {
834     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
835     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
836     return gsp->CheckRecordingCreate(appTokenId, appFullTokenId, appUid, sourceType);
837 }
838 
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)839 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
840     AudioPermissionState state)
841 {
842     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
843     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
844     return gsp->CheckRecordingStateChange(appTokenId, appFullTokenId, appUid, state);
845 }
846 
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)847 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
848 {
849     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
850     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
851     return gsp->ReconfigureAudioChannel(count, deviceType);
852 }
853 
GetAudioLatencyFromXml()854 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
855 {
856     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
857     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
858     return gsp->GetAudioLatencyFromXml();
859 }
860 
GetSinkLatencyFromXml()861 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
862 {
863     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
864     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
865     return gsp->GetSinkLatencyFromXml();
866 }
867 
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)868 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
869     vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
870 {
871     AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
872     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
873     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
874     return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
875 }
876 
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)877 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
878     vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
879 {
880     AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
881     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
882     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
883     return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
884 }
885 
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,AudioStreamType audioStreamType)886 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
887     StreamSetState streamSetState, AudioStreamType audioStreamType)
888 {
889     AUDIO_DEBUG_LOG("UpdateStreamState");
890     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
891     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
892     return  gsp->UpdateStreamState(clientUid, streamSetState, audioStreamType);
893 }
894 
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)895 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
896 {
897     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
898     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
899     return gsp->GetVolumeGroupInfos(networkId, infos);
900 }
901 
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)902 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
903 {
904     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
905     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
906     return gsp->GetNetworkIdByGroupId(groupId, networkId);
907 }
908 
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)909 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
910 {
911     AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
912     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
913     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
914     return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
915 }
916 
SetSystemSoundUri(const std::string & key,const std::string & uri)917 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
918 {
919     AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
920     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
921     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
922 
923     return gsp->SetSystemSoundUri(key, uri);
924 }
925 
GetSystemSoundUri(const std::string & key)926 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
927 {
928     AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
929     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
930     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
931 
932     return gsp->GetSystemSoundUri(key);
933 }
934 
GetMinStreamVolume()935 float AudioPolicyManager::GetMinStreamVolume()
936 {
937     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
938     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
939     return gsp->GetMinStreamVolume();
940 }
941 
GetMaxStreamVolume()942 float AudioPolicyManager::GetMaxStreamVolume()
943 {
944     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
945     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
946     return gsp->GetMaxStreamVolume();
947 }
948 
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> & callback)949 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
950     const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
951 {
952     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
953     rendererCBMap_[clientPid] = callback;
954     return SUCCESS;
955 }
956 
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)957 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
958 {
959     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
960     AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
961     for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
962         rendererCBMap_.erase(getpid());
963     }
964     return SUCCESS;
965 }
966 
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)967 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
968     const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
969 {
970     std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
971     AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
972     auto iter = find(audioStreamCBMap_.begin(), audioStreamCBMap_.end(), callback);
973     if (iter == audioStreamCBMap_.end()) {
974         audioStreamCBMap_.emplace_back(callback);
975     }
976 
977     return SUCCESS;
978 }
979 
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)980 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
981     const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
982 {
983     std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
984     AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
985     auto iter = find(audioStreamCBMap_.begin(), audioStreamCBMap_.end(), callback);
986     if (iter != audioStreamCBMap_.end()) {
987         audioStreamCBMap_.erase(iter);
988     }
989 
990     return SUCCESS;
991 }
992 
GetMaxRendererInstances()993 int32_t AudioPolicyManager::GetMaxRendererInstances()
994 {
995     AUDIO_DEBUG_LOG("AudioPolicyManager::GetMaxRendererInstances");
996     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
997     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
998 
999     return gsp->GetMaxRendererInstances();
1000 }
1001 
IsVolumeUnadjustable()1002 bool AudioPolicyManager::IsVolumeUnadjustable()
1003 {
1004     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1005     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1006     return gsp->IsVolumeUnadjustable();
1007 }
1008 
AdjustVolumeByStep(VolumeAdjustType adjustType)1009 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1010 {
1011     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1012     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1013     return gsp->AdjustVolumeByStep(adjustType);
1014 }
1015 
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1016 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1017 {
1018     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1019     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1020     return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1021 }
1022 
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1023 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1024 {
1025     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1026     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1027     return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1028 }
1029 
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1030 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1031 {
1032     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1033     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1034     int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1035     return error;
1036 }
1037 
SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig & config,uint32_t appTokenId)1038 int32_t AudioPolicyManager::SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config,
1039     uint32_t appTokenId)
1040 {
1041     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1042     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1043 
1044     return gsp->SetPlaybackCapturerFilterInfos(config, appTokenId);
1045 }
1046 
SetCaptureSilentState(bool state)1047 int32_t AudioPolicyManager::SetCaptureSilentState(bool state)
1048 {
1049     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1050     if (gsp == nullptr) {
1051         AUDIO_ERR_LOG("SetCaptureSilentState: audio policy manager proxy is NULL");
1052         return ERROR;
1053     }
1054 
1055     return gsp->SetCaptureSilentState(state);
1056 }
1057 
GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> & desc)1058 int32_t AudioPolicyManager::GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> &desc)
1059 {
1060     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1061     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1062     return gsp->GetHardwareOutputSamplingRate(desc);
1063 }
1064 
GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)1065 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)
1066 {
1067     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1068     if (gsp == nullptr) {
1069         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1070         std::vector<sptr<MicrophoneDescriptor>> descs;
1071         return descs;
1072     }
1073     return gsp->GetAudioCapturerMicrophoneDescriptors(sessionID);
1074 }
1075 
GetAvailableMicrophones()1076 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAvailableMicrophones()
1077 {
1078     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1079     if (gsp == nullptr) {
1080         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1081         std::vector<sptr<MicrophoneDescriptor>> descs;
1082         return descs;
1083     }
1084     return gsp->GetAvailableMicrophones();
1085 }
1086 
SetDeviceAbsVolumeSupported(const std::string & macAddress,const bool support)1087 int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support)
1088 {
1089     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1090     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1091     return gsp->SetDeviceAbsVolumeSupported(macAddress, support);
1092 }
1093 
IsAbsVolumeScene()1094 bool AudioPolicyManager::IsAbsVolumeScene()
1095 {
1096     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1097     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1098     return gsp->IsAbsVolumeScene();
1099 }
1100 
SetA2dpDeviceVolume(const std::string & macAddress,const int32_t volume,const bool updateUi)1101 int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume,
1102     const bool updateUi)
1103 {
1104     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1105     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1106     return gsp->SetA2dpDeviceVolume(macAddress, volume, updateUi);
1107 }
1108 
GetAvailableDevices(AudioDeviceUsage usage)1109 std::vector<std::unique_ptr<AudioDeviceDescriptor>> AudioPolicyManager::GetAvailableDevices(AudioDeviceUsage usage)
1110 {
1111     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1112     if (gsp == nullptr) {
1113         AUDIO_ERR_LOG("GetAvailableMicrophones: audio policy manager proxy is NULL.");
1114         std::vector<unique_ptr<AudioDeviceDescriptor>> descs;
1115         return descs;
1116     }
1117     return gsp->GetAvailableDevices(usage);
1118 }
1119 
SetAvailableDeviceChangeCallback(const int32_t clientId,const AudioDeviceUsage usage,const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback> & callback)1120 int32_t AudioPolicyManager::SetAvailableDeviceChangeCallback(const int32_t clientId, const AudioDeviceUsage usage,
1121     const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback>& callback)
1122 {
1123     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1124     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1125     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1126 
1127     auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
1128     CHECK_AND_RETURN_RET_LOG(deviceChangeCbStub != nullptr, ERROR, "object null");
1129 
1130     deviceChangeCbStub->SetAvailableDeviceChangeCallback(callback);
1131 
1132     sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
1133     if (object == nullptr) {
1134         AUDIO_ERR_LOG("listenerStub->AsObject is nullptr..");
1135         delete deviceChangeCbStub;
1136         return ERROR;
1137     }
1138 
1139     return gsp->SetAvailableDeviceChangeCallback(clientId, usage, object);
1140 }
1141 
UnsetAvailableDeviceChangeCallback(const int32_t clientId,AudioDeviceUsage usage)1142 int32_t AudioPolicyManager::UnsetAvailableDeviceChangeCallback(const int32_t clientId, AudioDeviceUsage usage)
1143 {
1144     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1145     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1146     return gsp->UnsetAvailableDeviceChangeCallback(clientId, usage);
1147 }
1148 
ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor,CastType type)1149 int32_t AudioPolicyManager::ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor, CastType type)
1150 {
1151     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1152     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1153     return gsp->ConfigDistributedRoutingRole(descriptor, type);
1154 }
1155 
SetDistributedRoutingRoleCallback(const std::shared_ptr<AudioDistributedRoutingRoleCallback> & callback)1156 int32_t AudioPolicyManager::SetDistributedRoutingRoleCallback(
1157     const std::shared_ptr<AudioDistributedRoutingRoleCallback> &callback)
1158 {
1159     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1160     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1161     if (callback == nullptr) {
1162         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: callback is nullptr");
1163         return ERR_INVALID_PARAM;
1164     }
1165 
1166     std::unique_lock<std::mutex> lock(listenerStubMutex_);
1167     auto activeDistributedRoutingRoleCb = new(std::nothrow) AudioRoutingManagerListenerStub();
1168     if (activeDistributedRoutingRoleCb == nullptr) {
1169         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: object is nullptr");
1170         return ERROR;
1171     }
1172     activeDistributedRoutingRoleCb->SetDistributedRoutingRoleCallback(callback);
1173     sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
1174     if (object == nullptr) {
1175         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: listenerStub is nullptr.");
1176         delete activeDistributedRoutingRoleCb;
1177         return ERROR;
1178     }
1179     return gsp->SetDistributedRoutingRoleCallback(object);
1180 }
1181 
UnsetDistributedRoutingRoleCallback()1182 int32_t AudioPolicyManager::UnsetDistributedRoutingRoleCallback()
1183 {
1184     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1185     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1186     return gsp->UnsetDistributedRoutingRoleCallback();
1187 }
1188 
IsSpatializationEnabled()1189 bool AudioPolicyManager::IsSpatializationEnabled()
1190 {
1191     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1192     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1193     return gsp->IsSpatializationEnabled();
1194 }
1195 
SetSpatializationEnabled(const bool enable)1196 int32_t AudioPolicyManager::SetSpatializationEnabled(const bool enable)
1197 {
1198     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1199     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1200     return gsp->SetSpatializationEnabled(enable);
1201 }
1202 
IsHeadTrackingEnabled()1203 bool AudioPolicyManager::IsHeadTrackingEnabled()
1204 {
1205     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1206     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1207     return gsp->IsHeadTrackingEnabled();
1208 }
1209 
SetHeadTrackingEnabled(const bool enable)1210 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const bool enable)
1211 {
1212     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1213     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1214     return gsp->SetHeadTrackingEnabled(enable);
1215 }
1216 
RegisterSpatializationEnabledEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeCallback> & callback)1217 int32_t AudioPolicyManager::RegisterSpatializationEnabledEventListener(
1218     const std::shared_ptr<AudioSpatializationEnabledChangeCallback> &callback)
1219 {
1220     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1221     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1222 
1223     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization Enabled callback is nullptr");
1224 
1225     sptr<AudioSpatializationEnabledChangeListenerStub> spatializationEnabledChangeListenerStub =
1226         new(std::nothrow) AudioSpatializationEnabledChangeListenerStub();
1227     if (spatializationEnabledChangeListenerStub == nullptr) {
1228         AUDIO_ERR_LOG("RegisterSpatializationEnabledEventListener: object null");
1229         return ERROR;
1230     }
1231 
1232     spatializationEnabledChangeListenerStub->SetCallback(callback);
1233 
1234     sptr<IRemoteObject> object = spatializationEnabledChangeListenerStub->AsObject();
1235     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR,
1236         "SpatializationEnabledChangeListener IPC object creation failed");
1237 
1238     return gsp->RegisterSpatializationEnabledEventListener(object);
1239 }
1240 
RegisterHeadTrackingEnabledEventListener(const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> & callback)1241 int32_t AudioPolicyManager::RegisterHeadTrackingEnabledEventListener(
1242     const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> &callback)
1243 {
1244     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1245     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1246 
1247     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Head Tracking Enabled callback is nullptr");
1248 
1249     sptr<AudioHeadTrackingEnabledChangeListenerStub> headTrackingEnabledChangeListenerStub =
1250         new(std::nothrow) AudioHeadTrackingEnabledChangeListenerStub();
1251     CHECK_AND_RETURN_RET_LOG(headTrackingEnabledChangeListenerStub != nullptr, ERROR, "object null");
1252 
1253     headTrackingEnabledChangeListenerStub->SetCallback(callback);
1254 
1255     sptr<IRemoteObject> object = headTrackingEnabledChangeListenerStub->AsObject();
1256     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR,
1257         "HeadTrackingEnabledChangeListener IPC object creation failed");
1258 
1259     return gsp->RegisterHeadTrackingEnabledEventListener(object);
1260 }
1261 
UnregisterSpatializationEnabledEventListener()1262 int32_t AudioPolicyManager::UnregisterSpatializationEnabledEventListener()
1263 {
1264     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1265     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1266     return gsp->UnregisterSpatializationEnabledEventListener();
1267 }
1268 
UnregisterHeadTrackingEnabledEventListener()1269 int32_t AudioPolicyManager::UnregisterHeadTrackingEnabledEventListener()
1270 {
1271     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1272     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1273     return gsp->UnregisterHeadTrackingEnabledEventListener();
1274 }
1275 
GetSpatializationState(const StreamUsage streamUsage)1276 AudioSpatializationState AudioPolicyManager::GetSpatializationState(const StreamUsage streamUsage)
1277 {
1278     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1279     if (gsp == nullptr) {
1280         AUDIO_ERR_LOG("GetSpatializationState: audio policy manager proxy is NULL.");
1281         AudioSpatializationState spatializationState = {false, false};
1282         return spatializationState;
1283     }
1284     return gsp->GetSpatializationState(streamUsage);
1285 }
1286 
IsSpatializationSupported()1287 bool AudioPolicyManager::IsSpatializationSupported()
1288 {
1289     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1290     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1291     return gsp->IsSpatializationSupported();
1292 }
1293 
IsSpatializationSupportedForDevice(const std::string address)1294 bool AudioPolicyManager::IsSpatializationSupportedForDevice(const std::string address)
1295 {
1296     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1297     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1298     return gsp->IsSpatializationSupportedForDevice(address);
1299 }
1300 
IsHeadTrackingSupported()1301 bool AudioPolicyManager::IsHeadTrackingSupported()
1302 {
1303     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1304     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1305     return gsp->IsHeadTrackingSupported();
1306 }
1307 
IsHeadTrackingSupportedForDevice(const std::string address)1308 bool AudioPolicyManager::IsHeadTrackingSupportedForDevice(const std::string address)
1309 {
1310     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1311     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1312     return gsp->IsHeadTrackingSupportedForDevice(address);
1313 }
1314 
UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)1315 int32_t AudioPolicyManager::UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)
1316 {
1317     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1318     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1319     return gsp->UpdateSpatialDeviceState(audioSpatialDeviceState);
1320 }
1321 
RegisterSpatializationStateEventListener(const uint32_t sessionID,const StreamUsage streamUsage,const std::shared_ptr<AudioSpatializationStateChangeCallback> & callback)1322 int32_t AudioPolicyManager::RegisterSpatializationStateEventListener(const uint32_t sessionID,
1323     const StreamUsage streamUsage, const std::shared_ptr<AudioSpatializationStateChangeCallback> &callback)
1324 {
1325     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1326     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1327 
1328     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization state callback is nullptr");
1329 
1330     sptr<AudioSpatializationStateChangeListenerStub> spatializationStateChangeListenerStub =
1331         new(std::nothrow) AudioSpatializationStateChangeListenerStub();
1332     CHECK_AND_RETURN_RET_LOG(spatializationStateChangeListenerStub != nullptr, ERROR, "object null");
1333 
1334     spatializationStateChangeListenerStub->SetCallback(callback);
1335 
1336     sptr<IRemoteObject> object = spatializationStateChangeListenerStub->AsObject();
1337     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "IPC object creation failed");
1338 
1339     return gsp->RegisterSpatializationStateEventListener(sessionID, streamUsage, object);
1340 }
1341 
UnregisterSpatializationStateEventListener(const uint32_t sessionID)1342 int32_t AudioPolicyManager::UnregisterSpatializationStateEventListener(const uint32_t sessionID)
1343 {
1344     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1345     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1346 
1347     return gsp->UnregisterSpatializationStateEventListener(sessionID);
1348 }
1349 
CreateAudioInterruptZone(const std::set<int32_t> pids,const int32_t zoneID)1350 int32_t AudioPolicyManager::CreateAudioInterruptZone(const std::set<int32_t> pids, const int32_t zoneID)
1351 {
1352     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1353     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1354 
1355     return gsp->CreateAudioInterruptZone(pids, zoneID);
1356 }
1357 
AddAudioInterruptZonePids(const std::set<int32_t> pids,const int32_t zoneID)1358 int32_t AudioPolicyManager::AddAudioInterruptZonePids(const std::set<int32_t> pids, const int32_t zoneID)
1359 {
1360     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1361     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1362 
1363     return gsp->AddAudioInterruptZonePids(pids, zoneID);
1364 }
1365 
RemoveAudioInterruptZonePids(const std::set<int32_t> pids,const int32_t zoneID)1366 int32_t AudioPolicyManager::RemoveAudioInterruptZonePids(const std::set<int32_t> pids, const int32_t zoneID)
1367 {
1368     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1369     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1370 
1371     return gsp->RemoveAudioInterruptZonePids(pids, zoneID);
1372 }
1373 
ReleaseAudioInterruptZone(const int32_t zoneID)1374 int32_t AudioPolicyManager::ReleaseAudioInterruptZone(const int32_t zoneID)
1375 {
1376     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1377     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1378 
1379     return gsp->ReleaseAudioInterruptZone(zoneID);
1380 }
1381 
SetCallDeviceActive(InternalDeviceType deviceType,bool active,std::string address)1382 int32_t AudioPolicyManager::SetCallDeviceActive(InternalDeviceType deviceType, bool active, std::string address)
1383 {
1384     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1385     if (gsp == nullptr) {
1386         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1387         return -1;
1388     }
1389     return gsp->SetCallDeviceActive(deviceType, active, address);
1390 }
1391 
GetActiveBluetoothDevice()1392 std::unique_ptr<AudioDeviceDescriptor> AudioPolicyManager::GetActiveBluetoothDevice()
1393 {
1394     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1395     if (gsp == nullptr) {
1396         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1397         return make_unique<AudioDeviceDescriptor>();
1398     }
1399     return gsp->GetActiveBluetoothDevice();
1400 }
1401 
NotifyCapturerAdded(AudioCapturerInfo capturerInfo,AudioStreamInfo streamInfo,uint32_t sessionId)1402 int32_t AudioPolicyManager::NotifyCapturerAdded(AudioCapturerInfo capturerInfo, AudioStreamInfo streamInfo,
1403     uint32_t sessionId)
1404 {
1405     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1406     if (gsp == nullptr) {
1407         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1408         return -1;
1409     }
1410     return gsp->NotifyCapturerAdded(capturerInfo, streamInfo, sessionId);
1411 }
1412 } // namespace AudioStandard
1413 } // namespace OHOS
1414