• 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_base.h"
19 #include "audio_policy_proxy.h"
20 #include "audio_server_death_recipient.h"
21 #include "iservice_registry.h"
22 #include "audio_log.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 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
32 
GetAudioPolicyManagerProxy()33 inline const sptr<IAudioPolicy> GetAudioPolicyManagerProxy()
34 {
35     AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Start to get audio manager service proxy.");
36     lock_guard<mutex> lock(g_apProxyMutex);
37 
38     if (g_apProxy == nullptr) {
39         auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
40         if (samgr == nullptr) {
41             AUDIO_ERR_LOG("GetAudioPolicyManagerProxy samgr init failed.");
42             return nullptr;
43         }
44 
45         sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
46         if (object == nullptr) {
47             AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Object is NULL.");
48             return nullptr;
49         }
50 
51         g_apProxy = iface_cast<IAudioPolicy>(object);
52         if (g_apProxy == nullptr) {
53             AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Init g_apProxy is NULL.");
54             return nullptr;
55         }
56 
57         AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Init g_apProxy is assigned.");
58         pid_t pid = 0;
59         sptr<AudioServerDeathRecipient> deathRecipient_ = new(std::nothrow) AudioServerDeathRecipient(pid);
60         if (deathRecipient_ != nullptr) {
61             deathRecipient_->SetNotifyCb(std::bind(&AudioPolicyManager::AudioPolicyServerDied,
62                 std::placeholders::_1));
63             AUDIO_INFO_LOG("Register audio policy server death recipient");
64             bool result = object->AddDeathRecipient(deathRecipient_);
65             if (!result) {
66                 AUDIO_ERR_LOG("failed to add deathRecipient");
67             }
68         }
69     }
70 
71     const sptr<IAudioPolicy> gsp = g_apProxy;
72     return gsp;
73 }
74 
AudioPolicyServerDied(pid_t pid)75 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
76 {
77     lock_guard<mutex> lock(g_apProxyMutex);
78     if (g_apProxy == nullptr) {
79         AUDIO_ERR_LOG("Audio policy server has already died!");
80         return;
81     }
82     AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
83     std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
84     for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
85         cb = it->second.lock();
86         if (cb != nullptr) {
87             cb->OnAudioPolicyServiceDied();
88             rendererCBMap_.erase(getpid());
89         }
90     }
91     g_apProxy = nullptr;
92 }
93 
GetMaxVolumeLevel(AudioVolumeType volumeType)94 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
95 {
96     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
97     if (gsp == nullptr) {
98         AUDIO_ERR_LOG("GetMaxVolumeLevel: audio policy manager proxy is NULL.");
99         return -1;
100     }
101 
102     return gsp->GetMaxVolumeLevel(volumeType);
103 }
104 
GetMinVolumeLevel(AudioVolumeType volumeType)105 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
106 {
107     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
108     if (gsp == nullptr) {
109         AUDIO_ERR_LOG("GetMinVolumeLevel: audio policy manager proxy is NULL.");
110         return -1;
111     }
112 
113     return gsp->GetMinVolumeLevel(volumeType);
114 }
115 
SetSystemVolumeLevel(AudioStreamType streamType,int32_t volumeLevel,API_VERSION api_v)116 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioStreamType streamType, int32_t volumeLevel, API_VERSION api_v)
117 {
118     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
119     if (gsp == nullptr) {
120         AUDIO_ERR_LOG("SetSystemVolumeLevel: audio policy manager proxy is NULL.");
121         return -1;
122     }
123 
124     return gsp->SetSystemVolumeLevel(streamType, volumeLevel, api_v);
125 }
126 
SetRingerMode(AudioRingerMode ringMode,API_VERSION api_v)127 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode, API_VERSION api_v)
128 {
129     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
130     if (gsp == nullptr) {
131         AUDIO_ERR_LOG("SetRingerMode: audio policy manager proxy is NULL.");
132         return -1;
133     }
134     return gsp->SetRingerMode(ringMode, api_v);
135 }
136 
GetRingerMode()137 AudioRingerMode AudioPolicyManager::GetRingerMode()
138 {
139     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
140     if (gsp == nullptr) {
141         AUDIO_ERR_LOG("GetRingerMode: audio policy manager proxy is NULL.");
142         return RINGER_MODE_NORMAL;
143     }
144     return gsp->GetRingerMode();
145 }
146 
SetAudioScene(AudioScene scene)147 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
148 {
149     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
150     if (gsp == nullptr) {
151         AUDIO_ERR_LOG("SetAudioScene: audio policy manager proxy is NULL.");
152         return -1;
153     }
154     return gsp->SetAudioScene(scene);
155 }
156 
SetMicrophoneMute(bool isMute)157 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
158 {
159     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
160     if (gsp == nullptr) {
161         AUDIO_ERR_LOG("SetMicrophoneMute: audio policy manager proxy is NULL.");
162         return -1;
163     }
164     return gsp->SetMicrophoneMute(isMute);
165 }
166 
SetMicrophoneMuteAudioConfig(bool isMute)167 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
168 {
169     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
170     if (gsp == nullptr) {
171         AUDIO_ERR_LOG("SetMicrophoneMuteAudioConfig: audio policy manager proxy is NULL.");
172         return -1;
173     }
174     return gsp->SetMicrophoneMuteAudioConfig(isMute);
175 }
176 
IsMicrophoneMute(API_VERSION api_v)177 bool AudioPolicyManager::IsMicrophoneMute(API_VERSION api_v)
178 {
179     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
180     if (gsp == nullptr) {
181         AUDIO_ERR_LOG("IsMicrophoneMute: audio policy manager proxy is NULL.");
182         return -1;
183     }
184     return gsp->IsMicrophoneMute(api_v);
185 }
186 
GetAudioScene()187 AudioScene AudioPolicyManager::GetAudioScene()
188 {
189     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
190     if (gsp == nullptr) {
191         AUDIO_ERR_LOG("GetAudioScene: audio policy manager proxy is NULL.");
192         return AUDIO_SCENE_DEFAULT;
193     }
194     return gsp->GetAudioScene();
195 }
196 
GetSystemVolumeLevel(AudioStreamType streamType)197 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioStreamType streamType)
198 {
199     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
200     if (gsp == nullptr) {
201         AUDIO_ERR_LOG("GetSystemVolumeLevel: audio policy manager proxy is NULL.");
202         return -1;
203     }
204     return gsp->GetSystemVolumeLevel(streamType);
205 }
206 
SetStreamMute(AudioStreamType streamType,bool mute,API_VERSION api_v)207 int32_t AudioPolicyManager::SetStreamMute(AudioStreamType streamType, bool mute, API_VERSION api_v)
208 {
209     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
210     if (gsp == nullptr) {
211         AUDIO_ERR_LOG("SetStreamMute: audio policy manager proxy is NULL.");
212         return -1;
213     }
214     return gsp->SetStreamMute(streamType, mute, api_v);
215 }
216 
GetStreamMute(AudioStreamType streamType)217 bool AudioPolicyManager::GetStreamMute(AudioStreamType streamType)
218 {
219     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
220     if (gsp == nullptr) {
221         AUDIO_ERR_LOG("GetStreamMute: audio policy manager proxy is NULL.");
222         return false;
223     }
224     return gsp->GetStreamMute(streamType);
225 }
226 
SetLowPowerVolume(int32_t streamId,float volume)227 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
228 {
229     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
230     if (gsp == nullptr) {
231         AUDIO_ERR_LOG("SetLowPowerVolume: audio policy manager proxy is NULL.");
232         return -1;
233     }
234     return gsp->SetLowPowerVolume(streamId, volume);
235 }
236 
GetLowPowerVolume(int32_t streamId)237 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
238 {
239     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
240     if (gsp == nullptr) {
241         AUDIO_ERR_LOG("GetLowPowerVolume: audio policy manager proxy is NULL.");
242         return -1;
243     }
244     return gsp->GetLowPowerVolume(streamId);
245 }
246 
GetSingleStreamVolume(int32_t streamId)247 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
248 {
249     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
250     if (gsp == nullptr) {
251         AUDIO_ERR_LOG("GetSingleStreamVolume: audio policy manager proxy is NULL.");
252         return -1;
253     }
254     return gsp->GetSingleStreamVolume(streamId);
255 }
256 
IsStreamActive(AudioStreamType streamType)257 bool AudioPolicyManager::IsStreamActive(AudioStreamType streamType)
258 {
259     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
260     if (gsp == nullptr) {
261         AUDIO_ERR_LOG("IsStreamActive: audio policy manager proxy is NULL.");
262         return false;
263     }
264     return gsp->IsStreamActive(streamType);
265 }
266 
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)267 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
268     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
269 {
270     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
271     if (gsp == nullptr) {
272         AUDIO_ERR_LOG("SelectOutputDevice: audio policy manager proxy is NULL.");
273         return -1;
274     }
275     return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
276 }
277 
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)278 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
279 {
280     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
281     if (gsp == nullptr) {
282         AUDIO_ERR_LOG("GetSelectedDeviceInfo: audio policy manager proxy is NULL.");
283         return "";
284     }
285     return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
286 }
287 
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)288 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
289     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
290 {
291     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
292     if (gsp == nullptr) {
293         AUDIO_ERR_LOG("SelectInputDevice: audio policy manager proxy is NULL.");
294         return -1;
295     }
296     return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
297 }
298 
GetDevices(DeviceFlag deviceFlag)299 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
300 {
301     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
302     if (gsp == nullptr) {
303         AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
304         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
305         return deviceInfo;
306     }
307     return gsp->GetDevices(deviceFlag);
308 }
309 
SetWakeUpAudioCapturer(InternalAudioCapturerOptions options)310 int32_t AudioPolicyManager::SetWakeUpAudioCapturer(InternalAudioCapturerOptions options)
311 {
312     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
313     if (gsp == nullptr) {
314         AUDIO_ERR_LOG("SetWakeUpAudioCapturer: audio policy manager proxy is NULL.");
315         return -1;
316     }
317     return gsp->SetWakeUpAudioCapturer(options);
318 }
319 
CloseWakeUpAudioCapturer()320 int32_t AudioPolicyManager::CloseWakeUpAudioCapturer()
321 {
322     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
323     if (gsp == nullptr) {
324         AUDIO_ERR_LOG("CloseWakeUpAudioCapturer: audio policy manager proxy is NULL.");
325         return -1;
326     }
327     return gsp->CloseWakeUpAudioCapturer();
328 }
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)329 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
330     AudioRendererInfo &rendererInfo)
331 {
332     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
333     if (gsp == nullptr) {
334         AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
335         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
336         return deviceInfo;
337     }
338     return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
339 }
340 
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)341 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
342     AudioCapturerInfo &captureInfo)
343 {
344     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
345     if (gsp == nullptr) {
346         AUDIO_ERR_LOG("GetPreferredInputDeviceDescriptors: audio policy manager proxy is NULL.");
347         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
348         return deviceInfo;
349     }
350     return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
351 }
352 
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList)353 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList)
354 {
355     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
356     if (gsp == nullptr) {
357         AUDIO_ERR_LOG("GetAudioFocusInfoList: audio policy manager proxy is NULL.");
358         return -1;
359     }
360     return gsp->GetAudioFocusInfoList(focusInfoList);
361 }
362 
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)363 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
364     const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
365 {
366     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
367     if (gsp == nullptr) {
368         AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: audio policy manager proxy is NULL.");
369         return ERROR;
370     }
371     if (callback == nullptr) {
372         AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: callback is nullptr");
373         return ERR_INVALID_PARAM;
374     }
375 
376     std::unique_lock<std::mutex> lock(listenerStubMutex_);
377     sptr<AudioPolicyManagerListenerStub> focusListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
378     if (focusListenerStub == nullptr) {
379         AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: object null");
380         return ERROR;
381     }
382     focusListenerStub->SetFocusInfoChangeCallback(callback);
383 
384     sptr<IRemoteObject> object = focusListenerStub->AsObject();
385     if (object == nullptr) {
386         AUDIO_ERR_LOG("RegisterFocusInfoChangeCallback: focusListenerStub->AsObject is nullptr.");
387         return ERROR;
388     }
389     lock.unlock();
390 
391     return gsp->RegisterFocusInfoChangeCallback(clientId, object);
392 }
393 
UnregisterFocusInfoChangeCallback(const int32_t clientId)394 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
395 {
396     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
397     if (gsp == nullptr) {
398         AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
399         return -1;
400     }
401 
402     return gsp->UnregisterFocusInfoChangeCallback(clientId);
403 }
404 
405 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()406 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
407 {
408     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
409     if (gsp == nullptr) {
410         AUDIO_ERR_LOG("GetSupportedTones: audio policy manager proxy is NULL.");
411         std::vector<int> lSupportedToneList = {};
412         return lSupportedToneList;
413     }
414     return gsp->GetSupportedTones();
415 }
416 
GetToneConfig(int32_t ltonetype)417 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
418 {
419     AUDIO_DEBUG_LOG("AudioPolicyManager GetToneConfig,");
420 
421     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
422     if (gsp == nullptr) {
423         AUDIO_ERR_LOG("GetToneConfig: audio policy manager proxy is NULL.");
424         return nullptr;
425     }
426     return gsp->GetToneConfig(ltonetype);
427 }
428 #endif
429 
SetDeviceActive(InternalDeviceType deviceType,bool active)430 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
431 {
432     AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
433     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
434     if (gsp == nullptr) {
435         AUDIO_ERR_LOG("SetDeviceActive: audio policy manager proxy is NULL.");
436         return -1;
437     }
438     return gsp->SetDeviceActive(deviceType, active);
439 }
440 
IsDeviceActive(InternalDeviceType deviceType)441 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
442 {
443     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
444     if (gsp == nullptr) {
445         AUDIO_ERR_LOG("IsDeviceActive: audio policy manager proxy is NULL.");
446         return false;
447     }
448     return gsp->IsDeviceActive(deviceType);
449 }
450 
GetActiveOutputDevice()451 DeviceType AudioPolicyManager::GetActiveOutputDevice()
452 {
453     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
454     if (gsp == nullptr) {
455         AUDIO_ERR_LOG("GetActiveOutputDevice: audio policy manager proxy is NULL.");
456         return DEVICE_TYPE_INVALID;
457     }
458     return gsp->GetActiveOutputDevice();
459 }
460 
GetActiveInputDevice()461 DeviceType AudioPolicyManager::GetActiveInputDevice()
462 {
463     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
464     if (gsp == nullptr) {
465         AUDIO_ERR_LOG("GetActiveInputDevice: audio policy manager proxy is NULL.");
466         return DEVICE_TYPE_INVALID;
467     }
468     return gsp->GetActiveInputDevice();
469 }
470 
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)471 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
472     const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
473 {
474     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
475     if (gsp == nullptr) {
476         AUDIO_ERR_LOG("SetRingerModeCallback: audio policy manager proxy is NULL.");
477         return ERR_INVALID_PARAM;
478     }
479 
480     if (callback == nullptr) {
481         AUDIO_ERR_LOG("SetRingerModeCallback: callback is nullptr");
482         return ERR_INVALID_PARAM;
483     }
484     std::lock_guard<std::mutex> lockSet(ringerModelistenerStubMutex_);
485     ringerModelistenerStub_ = new(std::nothrow) AudioRingerModeUpdateListenerStub();
486     if (ringerModelistenerStub_ == nullptr) {
487         AUDIO_ERR_LOG("SetRingerModeCallback: object null");
488         return ERROR;
489     }
490     ringerModelistenerStub_->SetCallback(callback);
491 
492     sptr<IRemoteObject> object = ringerModelistenerStub_->AsObject();
493     if (object == nullptr) {
494         AUDIO_ERR_LOG("SetRingerModeCallback: listenerStub->AsObject is nullptr..");
495         return ERROR;
496     }
497 
498     return gsp->SetRingerModeCallback(clientId, object, api_v);
499 }
500 
UnsetRingerModeCallback(const int32_t clientId)501 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
502 {
503     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
504     if (gsp == nullptr) {
505         AUDIO_ERR_LOG("UnsetRingerModeCallback: audio policy manager proxy is NULL.");
506         return -1;
507     }
508     return gsp->UnsetRingerModeCallback(clientId);
509 }
510 
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)511 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
512     const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
513 {
514     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
515     if (gsp == nullptr) {
516         AUDIO_ERR_LOG("SetDeviceChangeCallback: audio policy manager proxy is NULL.");
517         return -1;
518     }
519     if (callback == nullptr) {
520         AUDIO_ERR_LOG("SetDeviceChangeCallback: callback is nullptr");
521         return ERR_INVALID_PARAM;
522     }
523 
524     auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
525     if (deviceChangeCbStub == nullptr) {
526         AUDIO_ERR_LOG("SetDeviceChangeCallback: object null");
527         return ERROR;
528     }
529 
530     deviceChangeCbStub->SetDeviceChangeCallback(callback);
531 
532     sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
533     if (object == nullptr) {
534         AUDIO_ERR_LOG("SetDeviceChangeCallback: listenerStub->AsObject is nullptr..");
535         delete deviceChangeCbStub;
536         return ERROR;
537     }
538 
539     return gsp->SetDeviceChangeCallback(clientId, flag, object);
540 }
541 
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag)542 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag)
543 {
544     AUDIO_INFO_LOG("Entered %{public}s", __func__);
545     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
546     if (gsp == nullptr) {
547         AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
548         return -1;
549     }
550     return gsp->UnsetDeviceChangeCallback(clientId, flag);
551 }
552 
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)553 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
554     const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
555 {
556     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
557     if (gsp == nullptr) {
558         AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: audio policy manager proxy is NULL.");
559         return -1;
560     }
561     if (callback == nullptr) {
562         AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: callback is nullptr");
563         return ERR_INVALID_PARAM;
564     }
565 
566     auto activeOutputDeviceChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
567     if (activeOutputDeviceChangeCbStub == nullptr) {
568         AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: object null");
569         return ERROR;
570     }
571 
572     activeOutputDeviceChangeCbStub->SetPreferredOutputDeviceChangeCallback(callback);
573 
574     sptr<IRemoteObject> object = activeOutputDeviceChangeCbStub->AsObject();
575     if (object == nullptr) {
576         AUDIO_ERR_LOG("SetPreferredOutputDeviceChangeCallback: activeOutputDeviceChangeCbStub->AsObject is nullptr..");
577         delete activeOutputDeviceChangeCbStub;
578         return ERROR;
579     }
580 
581     return gsp->SetPreferredOutputDeviceChangeCallback(clientId, object);
582 }
583 
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)584 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
585     const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
586 {
587     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
588     if (gsp == nullptr) {
589         AUDIO_ERR_LOG("AudioPreferredInputDeviceChangeCallback: audio policy manager proxy is NULL.");
590         return -1;
591     }
592 
593     auto activeInputDeviceChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
594     if (activeInputDeviceChangeCbStub == nullptr) {
595         AUDIO_ERR_LOG("AudioPreferredInputDeviceChangeCallback: object null");
596         return ERROR;
597     }
598 
599     activeInputDeviceChangeCbStub->SetPreferredInputDeviceChangeCallback(callback);
600 
601     sptr<IRemoteObject> object = activeInputDeviceChangeCbStub->AsObject();
602     if (object == nullptr) {
603         AUDIO_ERR_LOG("AudioPreferredInputDeviceChangeCallback: activeInputDeviceChangeCbStub->AsObject is nullptr.");
604         delete activeInputDeviceChangeCbStub;
605         return ERROR;
606     }
607 
608     return gsp->SetPreferredInputDeviceChangeCallback(object);
609 }
610 
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)611 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
612 {
613     AUDIO_INFO_LOG("Entered %{public}s", __func__);
614     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
615     if (gsp == nullptr) {
616         AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
617         return -1;
618     }
619     return gsp->UnsetPreferredOutputDeviceChangeCallback(clientId);
620 }
621 
UnsetPreferredInputDeviceChangeCallback()622 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
623 {
624     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
625     if (gsp == nullptr) {
626         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
627         return -1;
628     }
629     return gsp->UnsetPreferredInputDeviceChangeCallback();
630 }
631 
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)632 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
633     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
634 {
635     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
636     if (gsp == nullptr) {
637         AUDIO_ERR_LOG("SetMicStateChangeCallback: audio policy manager proxy is NULL.");
638         return ERROR;
639     }
640     if (callback == nullptr) {
641         AUDIO_ERR_LOG("SetMicStateChangeCallback: callback is nullptr");
642         return ERR_INVALID_PARAM;
643     }
644 
645     auto micStateChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
646     if (micStateChangeCbStub == nullptr) {
647         AUDIO_ERR_LOG("SetMicStateChangeCallback: object null");
648         return ERROR;
649     }
650 
651     micStateChangeCbStub->SetMicStateChangeCallback(callback);
652 
653     sptr<IRemoteObject> object = micStateChangeCbStub->AsObject();
654     if (object == nullptr) {
655         AUDIO_ERR_LOG("SetMicStateChangeCallback: listenerStub->AsObject is nullptr..");
656         return ERROR;
657     }
658     return gsp->SetMicStateChangeCallback(clientId, object);
659 }
660 
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback)661 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
662     const std::shared_ptr<AudioInterruptCallback> &callback)
663 {
664     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
665     if (gsp == nullptr) {
666         AUDIO_ERR_LOG("SetAudioInterruptCallback: audio policy manager proxy is NULL.");
667         return ERROR;
668     }
669     if (callback == nullptr) {
670         AUDIO_ERR_LOG("SetAudioInterruptCallback: callback is nullptr");
671         return ERR_INVALID_PARAM;
672     }
673 
674     // Need to lock member variable listenerStub_ as SetAudioInterruptCallback
675     // can be called from different threads in multi renderer usage
676     std::unique_lock<std::mutex> lock(listenerStubMutex_);
677     listenerStub_ = new(std::nothrow) AudioPolicyManagerListenerStub();
678     if (listenerStub_ == nullptr) {
679         AUDIO_ERR_LOG("SetAudioInterruptCallback: object null");
680         return ERROR;
681     }
682     listenerStub_->SetInterruptCallback(callback);
683 
684     sptr<IRemoteObject> object = listenerStub_->AsObject();
685     if (object == nullptr) {
686         AUDIO_ERR_LOG("SetAudioInterruptCallback: listenerStub->AsObject is nullptr..");
687         return ERROR;
688     }
689     lock.unlock(); // unlock once it is converted into IRemoteObject
690 
691     return gsp->SetAudioInterruptCallback(sessionID, object);
692 }
693 
UnsetAudioInterruptCallback(const uint32_t sessionID)694 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID)
695 {
696     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
697     if (gsp == nullptr) {
698         AUDIO_ERR_LOG("UnsetAudioInterruptCallback: audio policy manager proxy is NULL.");
699         return -1;
700     }
701     return gsp->UnsetAudioInterruptCallback(sessionID);
702 }
703 
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt)704 int32_t AudioPolicyManager::ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
705 {
706     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
707     if (gsp == nullptr) {
708         AUDIO_ERR_LOG("ActivateAudioInterrupt: audio policy manager proxy is NULL.");
709         return -1;
710     }
711     return gsp->ActivateAudioInterrupt(audioInterrupt);
712 }
713 
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt)714 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
715 {
716     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
717     if (gsp == nullptr) {
718         AUDIO_ERR_LOG("DeactivateAudioInterrupt: audio policy manager proxy is NULL.");
719         return -1;
720     }
721     return gsp->DeactivateAudioInterrupt(audioInterrupt);
722 }
723 
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)724 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
725     const std::shared_ptr<AudioInterruptCallback> &callback)
726 {
727     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
728     if (gsp == nullptr) {
729         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
730         return ERROR;
731     }
732     if (callback == nullptr) {
733         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: callback is nullptr");
734         return ERR_INVALID_PARAM;
735     }
736 
737     std::unique_lock<std::mutex> lock(listenerStubMutex_);
738     sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
739     if (interruptListenerStub == nullptr) {
740         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: object null");
741         return ERROR;
742     }
743     interruptListenerStub->SetInterruptCallback(callback);
744 
745     sptr<IRemoteObject> object = interruptListenerStub->AsObject();
746     if (object == nullptr) {
747         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: onInterruptListenerStub->AsObject is nullptr.");
748         return ERROR;
749     }
750     lock.unlock();
751 
752     return gsp->SetAudioManagerInterruptCallback(clientId, object);
753 }
754 
UnsetAudioManagerInterruptCallback(const int32_t clientId)755 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
756 {
757     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
758     if (gsp == nullptr) {
759         AUDIO_ERR_LOG("UnsetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
760         return -1;
761     }
762     return gsp->UnsetAudioManagerInterruptCallback(clientId);
763 }
764 
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)765 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
766 {
767     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
768     if (gsp == nullptr) {
769         AUDIO_ERR_LOG("RequestAudioFocus: audio policy manager proxy is NULL.");
770         return -1;
771     }
772     return gsp->RequestAudioFocus(clientId, audioInterrupt);
773 }
774 
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)775 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
776 {
777     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
778     if (gsp == nullptr) {
779         AUDIO_ERR_LOG("AbandonAudioFocus: audio policy manager proxy is NULL.");
780         return -1;
781     }
782     return gsp->AbandonAudioFocus(clientId, audioInterrupt);
783 }
784 
GetStreamInFocus()785 AudioStreamType AudioPolicyManager::GetStreamInFocus()
786 {
787     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
788     if (gsp == nullptr) {
789         AUDIO_ERR_LOG("GetStreamInFocus: audio policy manager proxy is NULL.");
790         return STREAM_DEFAULT;
791     }
792     return gsp->GetStreamInFocus();
793 }
794 
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt)795 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt)
796 {
797     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
798     if (gsp == nullptr) {
799         AUDIO_ERR_LOG("GetSessionInfoInFocus: audio policy manager proxy is NULL.");
800         return -1;
801     }
802     return gsp->GetSessionInfoInFocus(audioInterrupt);
803 }
804 
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)805 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
806     const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
807 {
808     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
809     if (gsp == nullptr) {
810         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
811         return ERROR;
812     }
813 
814     if (callback == nullptr) {
815         AUDIO_ERR_LOG("SetVolumeKeyEventCallback volume back is nullptr");
816         return ERR_INVALID_PARAM;
817     }
818 
819     std::lock_guard<std::mutex> lock(volumeCallbackMutex_);
820     volumeKeyEventListenerStub_ = new(std::nothrow) AudioVolumeKeyEventCallbackStub();
821     if (volumeKeyEventListenerStub_ == nullptr) {
822         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: object null");
823         return ERROR;
824     }
825     volumeKeyEventListenerStub_->SetOnVolumeKeyEventCallback(callback);
826 
827     sptr<IRemoteObject> object = volumeKeyEventListenerStub_->AsObject();
828     if (object == nullptr) {
829         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: volumeKeyEventListenerStub_->AsObject is nullptr.");
830         return ERROR;
831     }
832     return gsp->SetVolumeKeyEventCallback(clientPid, object, api_v);
833 }
834 
UnsetVolumeKeyEventCallback(const int32_t clientPid)835 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(const int32_t clientPid)
836 {
837     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
838     if (gsp == nullptr) {
839         AUDIO_ERR_LOG("UnsetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
840         return -1;
841     }
842     return gsp->UnsetVolumeKeyEventCallback(clientPid);
843 }
844 
RegisterAudioRendererEventListener(const int32_t clientPid,const std::shared_ptr<AudioRendererStateChangeCallback> & callback)845 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(const int32_t clientPid,
846     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
847 {
848     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
849     if (gsp == nullptr) {
850         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: audio policy manager proxy is NULL.");
851         return ERROR;
852     }
853 
854     AUDIO_DEBUG_LOG("RegisterAudioRendererEventListener");
855     if (callback == nullptr) {
856         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: RendererEvent Listener callback is nullptr");
857         return ERR_INVALID_PARAM;
858     }
859 
860     std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
861     rendererStateChangelistenerStub_ = new(std::nothrow) AudioRendererStateChangeListenerStub();
862     if (rendererStateChangelistenerStub_ == nullptr) {
863         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: object null");
864         return ERROR;
865     }
866 
867     rendererStateChangelistenerStub_->SetCallback(callback);
868 
869     sptr<IRemoteObject> object = rendererStateChangelistenerStub_->AsObject();
870     if (object == nullptr) {
871         AUDIO_ERR_LOG("RegisterAudioRendererEventListener:RenderStateChangeListener IPC object creation failed");
872         return ERROR;
873     }
874     lock.unlock();
875 
876     return gsp->RegisterAudioRendererEventListener(clientPid, object);
877 }
878 
UnregisterAudioRendererEventListener(const int32_t clientPid)879 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(const int32_t clientPid)
880 {
881     AUDIO_DEBUG_LOG("UnregisterAudioRendererEventListener");
882     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
883     if (gsp == nullptr) {
884         AUDIO_ERR_LOG("UnregisterAudioRendererEventListener: audio policy manager proxy is NULL.");
885         return ERROR;
886     }
887 
888     return gsp->UnregisterAudioRendererEventListener(clientPid);
889 }
890 
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)891 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
892     const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
893 {
894     AUDIO_DEBUG_LOG("RegisterAudioCapturerEventListener");
895     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
896     if (gsp == nullptr) {
897         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
898         return ERROR;
899     }
900 
901     if (callback == nullptr) {
902         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: Capturer Event Listener callback is nullptr");
903         return ERR_INVALID_PARAM;
904     }
905 
906     std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
907     capturerStateChangelistenerStub_ = new(std::nothrow) AudioCapturerStateChangeListenerStub();
908     if (capturerStateChangelistenerStub_ == nullptr) {
909         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: object null");
910         return ERROR;
911     }
912 
913     capturerStateChangelistenerStub_->SetCallback(callback);
914 
915     sptr<IRemoteObject> object = capturerStateChangelistenerStub_->AsObject();
916     if (object == nullptr) {
917         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: CapturerStateChangeListener IPC object creation failed");
918         return ERROR;
919     }
920     lock.unlock();
921 
922     return gsp->RegisterAudioCapturerEventListener(clientPid, object);
923 }
924 
UnregisterAudioCapturerEventListener(const int32_t clientPid)925 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
926 {
927     AUDIO_DEBUG_LOG("UnregisterAudioCapturerEventListener");
928     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
929     if (gsp == nullptr) {
930         AUDIO_ERR_LOG("UnregisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
931         return ERROR;
932     }
933     return gsp->UnregisterAudioCapturerEventListener(clientPid);
934 }
935 
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)936 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
937     const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
938 {
939     AUDIO_DEBUG_LOG("RegisterTracker");
940     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
941     if (gsp == nullptr) {
942         AUDIO_ERR_LOG("RegisterTracker: audio policy manager proxy is NULL.");
943         return ERROR;
944     }
945 
946     std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
947     clientTrackerCbStub_ = new(std::nothrow) AudioClientTrackerCallbackStub();
948     if (clientTrackerCbStub_ == nullptr) {
949         AUDIO_ERR_LOG("clientTrackerCbStub: memory allocation failed");
950         return ERROR;
951     }
952 
953     clientTrackerCbStub_->SetClientTrackerCallback(clientTrackerObj);
954 
955     sptr<IRemoteObject> object = clientTrackerCbStub_->AsObject();
956     if (object == nullptr) {
957         AUDIO_ERR_LOG("clientTrackerCbStub: IPC object creation failed");
958         return ERROR;
959     }
960     lock.unlock();
961 
962     return gsp->RegisterTracker(mode, streamChangeInfo, object);
963 }
964 
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)965 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
966 {
967     AUDIO_DEBUG_LOG("UpdateTracker");
968     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
969     if (gsp == nullptr) {
970         AUDIO_ERR_LOG("UpdateTracker: audio policy manager proxy is NULL.");
971         return ERROR;
972     }
973     return gsp->UpdateTracker(mode, streamChangeInfo);
974 }
975 
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid)976 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid)
977 {
978     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
979     if (gsp == nullptr) {
980         AUDIO_ERR_LOG("CheckRecordingCreate: audio policy manager proxy is NULL.");
981         return false;
982     }
983     return gsp->CheckRecordingCreate(appTokenId, appFullTokenId, appUid);
984 }
985 
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)986 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
987     AudioPermissionState state)
988 {
989     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
990     if (gsp == nullptr) {
991         AUDIO_ERR_LOG("CheckRecordingStateChange: audio policy manager proxy is NULL.");
992         return false;
993     }
994     return gsp->CheckRecordingStateChange(appTokenId, appFullTokenId, appUid, state);
995 }
996 
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)997 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
998 {
999     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1000     if (gsp == nullptr) {
1001         AUDIO_ERR_LOG("ReconfigureAudioChannel: audio policy manager proxy is NULL.");
1002         return -1;
1003     }
1004     return gsp->ReconfigureAudioChannel(count, deviceType);
1005 }
1006 
GetAudioLatencyFromXml()1007 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
1008 {
1009     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1010     if (gsp == nullptr) {
1011         AUDIO_ERR_LOG("GetAudioLatencyFromXml: audio policy manager proxy is NULL.");
1012         return -1;
1013     }
1014     return gsp->GetAudioLatencyFromXml();
1015 }
1016 
GetSinkLatencyFromXml()1017 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
1018 {
1019     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1020     if (gsp == nullptr) {
1021         AUDIO_ERR_LOG("GetSinkLatencyFromXml: audio policy manager proxy is NULL.");
1022         return 0;
1023     }
1024     return gsp->GetSinkLatencyFromXml();
1025 }
1026 
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1027 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1028     vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1029 {
1030     AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1031     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1032     if (gsp == nullptr) {
1033         AUDIO_ERR_LOG("GetCurrentRendererChangeInfos: audio policy manager proxy is NULL.");
1034         return -1;
1035     }
1036     return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1037 }
1038 
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1039 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1040     vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1041 {
1042     AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1043     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1044     if (gsp == nullptr) {
1045         AUDIO_ERR_LOG("GetCurrentCapturerChangeInfos: audio policy manager proxy is NULL.");
1046         return ERROR;
1047     }
1048     return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1049 }
1050 
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,AudioStreamType audioStreamType)1051 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1052     StreamSetState streamSetState, AudioStreamType audioStreamType)
1053 {
1054     AUDIO_DEBUG_LOG("UpdateStreamState");
1055     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1056     if (gsp == nullptr) {
1057         AUDIO_ERR_LOG("UpdateStreamState: audio policy manager proxy is NULL.");
1058         return ERROR;
1059     }
1060     return  gsp->UpdateStreamState(clientUid, streamSetState, audioStreamType);
1061 }
1062 
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1063 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1064 {
1065     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1066     if (gsp == nullptr) {
1067         AUDIO_ERR_LOG("GetVolumeGroupInfos failed, g_apProxy is nullptr.");
1068         return ERROR;
1069     }
1070     return gsp->GetVolumeGroupInfos(networkId, infos);
1071 }
1072 
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1073 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1074 {
1075     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1076     if (gsp == nullptr) {
1077         AUDIO_ERR_LOG("GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1078         return ERROR;
1079     }
1080     return gsp->GetNetworkIdByGroupId(groupId, networkId);
1081 }
1082 
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)1083 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
1084 {
1085     AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
1086     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1087     if (gsp == nullptr) {
1088         AUDIO_ERR_LOG("IsAudioRendererLowLatencySupported: audio policy manager proxy is NULL.");
1089         return -1;
1090     }
1091     return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
1092 }
1093 
SetSystemSoundUri(const std::string & key,const std::string & uri)1094 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1095 {
1096     AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1097     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1098     if (gsp == nullptr) {
1099         AUDIO_ERR_LOG("SetSystemSoundUri: audio policy manager proxy is NULL.");
1100         return ERROR;
1101     }
1102 
1103     return gsp->SetSystemSoundUri(key, uri);
1104 }
1105 
GetSystemSoundUri(const std::string & key)1106 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1107 {
1108     AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1109     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1110     if (gsp == nullptr) {
1111         AUDIO_ERR_LOG("GetSystemSoundUri: audio policy manager proxy is NULL.");
1112         return "";
1113     }
1114 
1115     return gsp->GetSystemSoundUri(key);
1116 }
1117 
GetMinStreamVolume()1118 float AudioPolicyManager::GetMinStreamVolume()
1119 {
1120     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1121     if (gsp == nullptr) {
1122         AUDIO_ERR_LOG("GetMinStreamVolume: audio policy manager proxy is NULL.");
1123         return ERROR;
1124     }
1125     return gsp->GetMinStreamVolume();
1126 }
1127 
GetMaxStreamVolume()1128 float AudioPolicyManager::GetMaxStreamVolume()
1129 {
1130     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1131     if (gsp == nullptr) {
1132         AUDIO_ERR_LOG("GetMaxStreamVolume: audio policy manager proxy is NULL.");
1133         return ERROR;
1134     }
1135     return gsp->GetMaxStreamVolume();
1136 }
1137 
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1138 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1139     const std::weak_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1140 {
1141     lock_guard<mutex> lock(g_apProxyMutex);
1142     rendererCBMap_[clientPid] = callback;
1143     return SUCCESS;
1144 }
1145 
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1146 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1147 {
1148     AUDIO_DEBUG_LOG("UnregisterAudioPolicyServerDiedCb client pid: %{public}d", clientPid);
1149     for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
1150         rendererCBMap_.erase(getpid());
1151     }
1152     return SUCCESS;
1153 }
1154 
GetMaxRendererInstances()1155 int32_t AudioPolicyManager::GetMaxRendererInstances()
1156 {
1157     AUDIO_DEBUG_LOG("GetMaxRendererInstances");
1158     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1159     if (gsp == nullptr) {
1160         AUDIO_ERR_LOG("GetMaxRendererInstances: audio policy manager proxy is NULL.");
1161         return ERROR;
1162     }
1163 
1164     return gsp->GetMaxRendererInstances();
1165 }
1166 
IsVolumeUnadjustable()1167 bool AudioPolicyManager::IsVolumeUnadjustable()
1168 {
1169     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1170     if (gsp == nullptr) {
1171         AUDIO_ERR_LOG("IsStreamActive: audio policy manager proxy is NULL.");
1172         return false;
1173     }
1174     return gsp->IsVolumeUnadjustable();
1175 }
1176 
AdjustVolumeByStep(VolumeAdjustType adjustType)1177 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1178 {
1179     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1180     if (gsp == nullptr) {
1181         AUDIO_ERR_LOG("AdjustVolumeByStep: audio policy manager proxy is NULL.");
1182         return ERROR;
1183     }
1184     return gsp->AdjustVolumeByStep(adjustType);
1185 }
1186 
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1187 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1188 {
1189     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1190     if (gsp == nullptr) {
1191         AUDIO_ERR_LOG("AdjustSystemVolumeByStep: audio policy manager proxy is NULL.");
1192         return ERROR;
1193     }
1194     return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1195 }
1196 
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1197 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1198 {
1199     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1200     if (gsp == nullptr) {
1201         AUDIO_ERR_LOG("GetSystemVolumeInDb: audio policy manager proxy is NULL.");
1202         return ERROR;
1203     }
1204     return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1205 }
1206 
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1207 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1208 {
1209     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1210     if (gsp == nullptr) {
1211         AUDIO_ERR_LOG("QueryEffectSceneMode: audio policy manager proxy is NULL.");
1212         return -1;
1213     }
1214     int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1215     return error;
1216 }
1217 
SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig & config,uint32_t appTokenId)1218 int32_t AudioPolicyManager::SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config,
1219     uint32_t appTokenId)
1220 {
1221     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1222     if (gsp == nullptr) {
1223         AUDIO_ERR_LOG("SetPlaybackCapturerFilterInfos: audio policy manager proxy is NULL.");
1224         return ERROR;
1225     }
1226 
1227     return gsp->SetPlaybackCapturerFilterInfos(config, appTokenId);
1228 }
1229 } // namespace AudioStandard
1230 } // namespace OHOS
1231