• 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 "iservice_registry.h"
21 #include "audio_log.h"
22 #include "system_ability_definition.h"
23 
24 namespace OHOS {
25 namespace AudioStandard {
26 using namespace std;
27 
28 static sptr<IAudioPolicy> g_apProxy = nullptr;
29 mutex g_apProxyMutex;
30 
GetAudioPolicyManagerProxy()31 const sptr<IAudioPolicy> AudioPolicyManager::GetAudioPolicyManagerProxy()
32 {
33     AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Start to get audio manager service proxy.");
34     lock_guard<mutex> lock(g_apProxyMutex);
35 
36     if (g_apProxy == nullptr) {
37         auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
38         if (samgr == nullptr) {
39             AUDIO_ERR_LOG("GetAudioPolicyManagerProxy samgr init failed.");
40             return nullptr;
41         }
42 
43         sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
44         if (object == nullptr) {
45             AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Object is NULL.");
46             return nullptr;
47         }
48 
49         g_apProxy = iface_cast<IAudioPolicy>(object);
50         if (g_apProxy == nullptr) {
51             AUDIO_ERR_LOG("GetAudioPolicyManagerProxy Init g_apProxy is NULL.");
52             return nullptr;
53         }
54 
55         AUDIO_DEBUG_LOG("GetAudioPolicyManagerProxy Init g_apProxy is assigned.");
56         RegisterAudioPolicyServerDeathRecipient();
57     }
58 
59     const sptr<IAudioPolicy> gsp = g_apProxy;
60     return gsp;
61 }
62 
RegisterAudioPolicyServerDeathRecipient()63 void AudioPolicyManager::RegisterAudioPolicyServerDeathRecipient()
64 {
65     AUDIO_INFO_LOG("Register audio policy server death recipient");
66     pid_t pid = 0;
67     sptr<AudioServerDeathRecipient> deathRecipient_ = new(std::nothrow) AudioServerDeathRecipient(pid);
68     if (deathRecipient_ != nullptr) {
69         auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
70         CHECK_AND_RETURN_LOG(samgr != nullptr, "Failed to obtain samgr");
71 
72         sptr<IRemoteObject> object = samgr->GetSystemAbility(OHOS::AUDIO_POLICY_SERVICE_ID);
73         CHECK_AND_RETURN_LOG(object != nullptr, "Policy service unavailable");
74 
75         deathRecipient_->SetNotifyCb(std::bind(&AudioPolicyManager::AudioPolicyServerDied, this,
76                                                std::placeholders::_1));
77         bool result = object->AddDeathRecipient(deathRecipient_);
78         if (!result) {
79             AUDIO_ERR_LOG("failed to add deathRecipient");
80         }
81     }
82 }
83 
AudioPolicyServerDied(pid_t pid)84 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
85 {
86     lock_guard<mutex> lock(g_apProxyMutex);
87     AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
88     g_apProxy = nullptr;
89 }
90 
SetStreamVolume(AudioStreamType streamType,float volume)91 int32_t AudioPolicyManager::SetStreamVolume(AudioStreamType streamType, float volume)
92 {
93     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
94     if (gsp == nullptr) {
95         AUDIO_ERR_LOG("SetStreamVolume: audio policy manager proxy is NULL.");
96         return -1;
97     }
98     return gsp->SetStreamVolume(streamType, volume);
99 }
100 
SetRingerMode(AudioRingerMode ringMode)101 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
102 {
103     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
104     if (gsp == nullptr) {
105         AUDIO_ERR_LOG("SetRingerMode: audio policy manager proxy is NULL.");
106         return -1;
107     }
108     return gsp->SetRingerMode(ringMode);
109 }
110 
GetRingerMode()111 AudioRingerMode AudioPolicyManager::GetRingerMode()
112 {
113     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
114     if (gsp == nullptr) {
115         AUDIO_ERR_LOG("GetRingerMode: audio policy manager proxy is NULL.");
116         return RINGER_MODE_NORMAL;
117     }
118     return gsp->GetRingerMode();
119 }
120 
SetAudioScene(AudioScene scene)121 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
122 {
123     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
124     if (gsp == nullptr) {
125         AUDIO_ERR_LOG("SetAudioScene: audio policy manager proxy is NULL.");
126         return -1;
127     }
128     return gsp->SetAudioScene(scene);
129 }
130 
SetMicrophoneMute(bool isMute)131 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
132 {
133     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
134     if (gsp == nullptr) {
135         AUDIO_ERR_LOG("SetMicrophoneMute: audio policy manager proxy is NULL.");
136         return -1;
137     }
138     return gsp->SetMicrophoneMute(isMute);
139 }
140 
SetMicrophoneMuteAudioConfig(bool isMute)141 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
142 {
143     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
144     if (gsp == nullptr) {
145         AUDIO_ERR_LOG("SetMicrophoneMuteAudioConfig: audio policy manager proxy is NULL.");
146         return -1;
147     }
148     return gsp->SetMicrophoneMuteAudioConfig(isMute);
149 }
150 
IsMicrophoneMute(API_VERSION api_v)151 bool AudioPolicyManager::IsMicrophoneMute(API_VERSION api_v)
152 {
153     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
154     if (gsp == nullptr) {
155         AUDIO_ERR_LOG("IsMicrophoneMute: audio policy manager proxy is NULL.");
156         return -1;
157     }
158     return gsp->IsMicrophoneMute(api_v);
159 }
160 
GetAudioScene()161 AudioScene AudioPolicyManager::GetAudioScene()
162 {
163     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
164     if (gsp == nullptr) {
165         AUDIO_ERR_LOG("GetAudioScene: audio policy manager proxy is NULL.");
166         return AUDIO_SCENE_DEFAULT;
167     }
168     return gsp->GetAudioScene();
169 }
170 
GetStreamVolume(AudioStreamType streamType)171 float AudioPolicyManager::GetStreamVolume(AudioStreamType streamType)
172 {
173     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
174     if (gsp == nullptr) {
175         AUDIO_ERR_LOG("GetStreamVolume: audio policy manager proxy is NULL.");
176         return -1;
177     }
178     return gsp->GetStreamVolume(streamType);
179 }
180 
SetStreamMute(AudioStreamType streamType,bool mute)181 int32_t AudioPolicyManager::SetStreamMute(AudioStreamType streamType, bool mute)
182 {
183     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
184     if (gsp == nullptr) {
185         AUDIO_ERR_LOG("SetStreamMute: audio policy manager proxy is NULL.");
186         return -1;
187     }
188     return gsp->SetStreamMute(streamType, mute);
189 }
190 
GetStreamMute(AudioStreamType streamType)191 bool AudioPolicyManager::GetStreamMute(AudioStreamType streamType)
192 {
193     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
194     if (gsp == nullptr) {
195         AUDIO_ERR_LOG("GetStreamMute: audio policy manager proxy is NULL.");
196         return false;
197     }
198     return gsp->GetStreamMute(streamType);
199 }
200 
SetLowPowerVolume(int32_t streamId,float volume)201 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
202 {
203     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
204     if (gsp == nullptr) {
205         AUDIO_ERR_LOG("SetLowPowerVolume: audio policy manager proxy is NULL.");
206         return -1;
207     }
208     return gsp->SetLowPowerVolume(streamId, volume);
209 }
210 
GetLowPowerVolume(int32_t streamId)211 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
212 {
213     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
214     if (gsp == nullptr) {
215         AUDIO_ERR_LOG("GetLowPowerVolume: audio policy manager proxy is NULL.");
216         return -1;
217     }
218     return gsp->GetLowPowerVolume(streamId);
219 }
220 
GetSingleStreamVolume(int32_t streamId)221 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
222 {
223     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
224     if (gsp == nullptr) {
225         AUDIO_ERR_LOG("GetSingleStreamVolume: audio policy manager proxy is NULL.");
226         return -1;
227     }
228     return gsp->GetSingleStreamVolume(streamId);
229 }
230 
IsStreamActive(AudioStreamType streamType)231 bool AudioPolicyManager::IsStreamActive(AudioStreamType streamType)
232 {
233     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
234     if (gsp == nullptr) {
235         AUDIO_ERR_LOG("IsStreamActive: audio policy manager proxy is NULL.");
236         return false;
237     }
238     return gsp->IsStreamActive(streamType);
239 }
240 
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)241 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
242     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
243 {
244     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
245     if (gsp == nullptr) {
246         AUDIO_ERR_LOG("SelectOutputDevice: audio policy manager proxy is NULL.");
247         return -1;
248     }
249     return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
250 }
251 
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)252 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
253 {
254     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
255     if (gsp == nullptr) {
256         AUDIO_ERR_LOG("GetSelectedDeviceInfo: audio policy manager proxy is NULL.");
257         return "";
258     }
259     return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
260 }
261 
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)262 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
263     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
264 {
265     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
266     if (gsp == nullptr) {
267         AUDIO_ERR_LOG("SelectInputDevice: audio policy manager proxy is NULL.");
268         return -1;
269     }
270     return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
271 }
272 
GetDevices(DeviceFlag deviceFlag)273 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
274 {
275     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
276     if (gsp == nullptr) {
277         AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
278         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
279         return deviceInfo;
280     }
281     return gsp->GetDevices(deviceFlag);
282 }
283 
GetActiveOutputDeviceDescriptors()284 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetActiveOutputDeviceDescriptors()
285 {
286     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
287     if (gsp == nullptr) {
288         AUDIO_ERR_LOG("GetActiveOutputDeviceDescriptors: audio policy manager proxy is NULL.");
289         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
290         return deviceInfo;
291     }
292     return gsp->GetActiveOutputDeviceDescriptors();
293 }
294 
GetSupportedTones()295 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
296 {
297     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
298     if (gsp == nullptr) {
299         AUDIO_ERR_LOG("GetSupportedTones: audio policy manager proxy is NULL.");
300         std::vector<int> lSupportedToneList = {};
301         return lSupportedToneList;
302     }
303     return gsp->GetSupportedTones();
304 }
305 
GetToneConfig(int32_t ltonetype)306 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
307 {
308     AUDIO_DEBUG_LOG("AudioPolicyManager GetToneConfig,");
309 
310     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
311     if (gsp == nullptr) {
312         AUDIO_ERR_LOG("GetToneConfig: audio policy manager proxy is NULL.");
313         return nullptr;
314     }
315     return gsp->GetToneConfig(ltonetype);
316 }
317 
SetDeviceActive(InternalDeviceType deviceType,bool active)318 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
319 {
320     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
321     if (gsp == nullptr) {
322         AUDIO_ERR_LOG("SetDeviceActive: audio policy manager proxy is NULL.");
323         return -1;
324     }
325     return gsp->SetDeviceActive(deviceType, active);
326 }
327 
IsDeviceActive(InternalDeviceType deviceType)328 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
329 {
330     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
331     if (gsp == nullptr) {
332         AUDIO_ERR_LOG("IsDeviceActive: audio policy manager proxy is NULL.");
333         return false;
334     }
335     return gsp->IsDeviceActive(deviceType);
336 }
337 
GetActiveOutputDevice()338 DeviceType AudioPolicyManager::GetActiveOutputDevice()
339 {
340     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
341     if (gsp == nullptr) {
342         AUDIO_ERR_LOG("GetActiveOutputDevice: audio policy manager proxy is NULL.");
343         return DEVICE_TYPE_INVALID;
344     }
345     return gsp->GetActiveOutputDevice();
346 }
347 
GetActiveInputDevice()348 DeviceType AudioPolicyManager::GetActiveInputDevice()
349 {
350     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
351     if (gsp == nullptr) {
352         AUDIO_ERR_LOG("GetActiveInputDevice: audio policy manager proxy is NULL.");
353         return DEVICE_TYPE_INVALID;
354     }
355     return gsp->GetActiveInputDevice();
356 }
357 
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)358 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
359                                                   const std::shared_ptr<AudioRingerModeCallback> &callback)
360 {
361     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
362     if (gsp == nullptr) {
363         AUDIO_ERR_LOG("SetRingerModeCallback: audio policy manager proxy is NULL.");
364         return ERR_INVALID_PARAM;
365     }
366 
367     if (callback == nullptr) {
368         AUDIO_ERR_LOG("SetRingerModeCallback: callback is nullptr");
369         return ERR_INVALID_PARAM;
370     }
371     std::lock_guard<std::mutex> lockSet(ringerModelistenerStubMutex_);
372     ringerModelistenerStub_ = new(std::nothrow) AudioRingerModeUpdateListenerStub();
373     if (ringerModelistenerStub_ == nullptr) {
374         AUDIO_ERR_LOG("SetRingerModeCallback: object null");
375         return ERROR;
376     }
377     ringerModelistenerStub_->SetCallback(callback);
378 
379     sptr<IRemoteObject> object = ringerModelistenerStub_->AsObject();
380     if (object == nullptr) {
381         AUDIO_ERR_LOG("SetRingerModeCallback: listenerStub->AsObject is nullptr..");
382         return ERROR;
383     }
384 
385     return gsp->SetRingerModeCallback(clientId, object);
386 }
387 
UnsetRingerModeCallback(const int32_t clientId)388 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
389 {
390     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
391     if (gsp == nullptr) {
392         AUDIO_ERR_LOG("UnsetRingerModeCallback: audio policy manager proxy is NULL.");
393         return -1;
394     }
395     return gsp->UnsetRingerModeCallback(clientId);
396 }
397 
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)398 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
399     const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
400 {
401     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
402     if (gsp == nullptr) {
403         AUDIO_ERR_LOG("SetDeviceChangeCallback: audio policy manager proxy is NULL.");
404         return -1;
405     }
406     AUDIO_INFO_LOG("Entered %{public}s", __func__);
407     if (callback == nullptr) {
408         AUDIO_ERR_LOG("SetDeviceChangeCallback: callback is nullptr");
409         return ERR_INVALID_PARAM;
410     }
411 
412     auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
413     if (deviceChangeCbStub == nullptr) {
414         AUDIO_ERR_LOG("SetDeviceChangeCallback: object null");
415         return ERROR;
416     }
417 
418     deviceChangeCbStub->SetDeviceChangeCallback(callback);
419 
420     sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
421     if (object == nullptr) {
422         AUDIO_ERR_LOG("SetDeviceChangeCallback: listenerStub->AsObject is nullptr..");
423         delete deviceChangeCbStub;
424         return ERROR;
425     }
426 
427     return gsp->SetDeviceChangeCallback(clientId, flag, object);
428 }
429 
UnsetDeviceChangeCallback(const int32_t clientId)430 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId)
431 {
432     AUDIO_INFO_LOG("Entered %{public}s", __func__);
433     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
434     if (gsp == nullptr) {
435         AUDIO_ERR_LOG("UnsetDeviceChangeCallback: audio policy manager proxy is NULL.");
436         return -1;
437     }
438     return gsp->UnsetDeviceChangeCallback(clientId);
439 }
440 
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)441 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
442     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
443 {
444     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
445     if (gsp == nullptr) {
446         AUDIO_ERR_LOG("SetMicStateChangeCallback: audio policy manager proxy is NULL.");
447         return ERROR;
448     }
449     if (callback == nullptr) {
450         AUDIO_ERR_LOG("SetMicStateChangeCallback: callback is nullptr");
451         return ERR_INVALID_PARAM;
452     }
453 
454     auto micStateChangeCbStub = new(std::nothrow) AudioRoutingManagerListenerStub();
455     if (micStateChangeCbStub == nullptr) {
456         AUDIO_ERR_LOG("SetMicStateChangeCallback: object null");
457         return ERROR;
458     }
459 
460     micStateChangeCbStub->SetMicStateChangeCallback(callback);
461 
462     sptr<IRemoteObject> object = micStateChangeCbStub->AsObject();
463     if (object == nullptr) {
464         AUDIO_ERR_LOG("SetMicStateChangeCallback: listenerStub->AsObject is nullptr..");
465         return ERROR;
466     }
467     return gsp->SetMicStateChangeCallback(clientId, object);
468 }
469 
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback)470 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
471                                                       const std::shared_ptr<AudioInterruptCallback> &callback)
472 {
473     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
474     if (gsp == nullptr) {
475         AUDIO_ERR_LOG("SetAudioInterruptCallback: audio policy manager proxy is NULL.");
476         return ERROR;
477     }
478     if (callback == nullptr) {
479         AUDIO_ERR_LOG("SetAudioInterruptCallback: callback is nullptr");
480         return ERR_INVALID_PARAM;
481     }
482 
483     // Need to lock member variable listenerStub_ as SetAudioInterruptCallback
484     // can be called from different threads in multi renderer usage
485     std::unique_lock<std::mutex> lock(listenerStubMutex_);
486     listenerStub_ = new(std::nothrow) AudioPolicyManagerListenerStub();
487     if (listenerStub_ == nullptr) {
488         AUDIO_ERR_LOG("SetAudioInterruptCallback: object null");
489         return ERROR;
490     }
491     listenerStub_->SetInterruptCallback(callback);
492 
493     sptr<IRemoteObject> object = listenerStub_->AsObject();
494     if (object == nullptr) {
495         AUDIO_ERR_LOG("SetAudioInterruptCallback: listenerStub->AsObject is nullptr..");
496         return ERROR;
497     }
498     lock.unlock(); // unlock once it is converted into IRemoteObject
499 
500     return gsp->SetAudioInterruptCallback(sessionID, object);
501 }
502 
UnsetAudioInterruptCallback(const uint32_t sessionID)503 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID)
504 {
505     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
506     if (gsp == nullptr) {
507         AUDIO_ERR_LOG("UnsetAudioInterruptCallback: audio policy manager proxy is NULL.");
508         return -1;
509     }
510     return gsp->UnsetAudioInterruptCallback(sessionID);
511 }
512 
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt)513 int32_t AudioPolicyManager::ActivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
514 {
515     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
516     if (gsp == nullptr) {
517         AUDIO_ERR_LOG("ActivateAudioInterrupt: audio policy manager proxy is NULL.");
518         return -1;
519     }
520     return gsp->ActivateAudioInterrupt(audioInterrupt);
521 }
522 
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt)523 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt)
524 {
525     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
526     if (gsp == nullptr) {
527         AUDIO_ERR_LOG("DeactivateAudioInterrupt: audio policy manager proxy is NULL.");
528         return -1;
529     }
530     return gsp->DeactivateAudioInterrupt(audioInterrupt);
531 }
532 
SetAudioManagerInterruptCallback(const uint32_t clientID,const std::shared_ptr<AudioInterruptCallback> & callback)533 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const uint32_t clientID,
534     const std::shared_ptr<AudioInterruptCallback> &callback)
535 {
536     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
537     if (gsp == nullptr) {
538         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
539         return ERROR;
540     }
541     if (callback == nullptr) {
542         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: callback is nullptr");
543         return ERR_INVALID_PARAM;
544     }
545 
546     std::unique_lock<std::mutex> lock(listenerStubMutex_);
547     sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
548     if (interruptListenerStub == nullptr) {
549         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: object null");
550         return ERROR;
551     }
552     interruptListenerStub->SetInterruptCallback(callback);
553 
554     sptr<IRemoteObject> object = interruptListenerStub->AsObject();
555     if (object == nullptr) {
556         AUDIO_ERR_LOG("SetAudioManagerInterruptCallback: onInterruptListenerStub->AsObject is nullptr.");
557         return ERROR;
558     }
559     lock.unlock();
560 
561     return gsp->SetAudioManagerInterruptCallback(clientID, object);
562 }
563 
UnsetAudioManagerInterruptCallback(const uint32_t clientID)564 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const uint32_t clientID)
565 {
566     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
567     if (gsp == nullptr) {
568         AUDIO_ERR_LOG("UnsetAudioManagerInterruptCallback: audio policy manager proxy is NULL.");
569         return -1;
570     }
571     return gsp->UnsetAudioManagerInterruptCallback(clientID);
572 }
573 
RequestAudioFocus(const uint32_t clientID,const AudioInterrupt & audioInterrupt)574 int32_t AudioPolicyManager::RequestAudioFocus(const uint32_t clientID, const AudioInterrupt &audioInterrupt)
575 {
576     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
577     if (gsp == nullptr) {
578         AUDIO_ERR_LOG("RequestAudioFocus: audio policy manager proxy is NULL.");
579         return -1;
580     }
581     return gsp->RequestAudioFocus(clientID, audioInterrupt);
582 }
583 
AbandonAudioFocus(const uint32_t clientID,const AudioInterrupt & audioInterrupt)584 int32_t AudioPolicyManager::AbandonAudioFocus(const uint32_t clientID, const AudioInterrupt &audioInterrupt)
585 {
586     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
587     if (gsp == nullptr) {
588         AUDIO_ERR_LOG("AbandonAudioFocus: audio policy manager proxy is NULL.");
589         return -1;
590     }
591     return gsp->AbandonAudioFocus(clientID, audioInterrupt);
592 }
593 
GetStreamInFocus()594 AudioStreamType AudioPolicyManager::GetStreamInFocus()
595 {
596     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
597     if (gsp == nullptr) {
598         AUDIO_ERR_LOG("GetStreamInFocus: audio policy manager proxy is NULL.");
599         return STREAM_DEFAULT;
600     }
601     return gsp->GetStreamInFocus();
602 }
603 
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt)604 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt)
605 {
606     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
607     if (gsp == nullptr) {
608         AUDIO_ERR_LOG("GetSessionInfoInFocus: audio policy manager proxy is NULL.");
609         return -1;
610     }
611     return gsp->GetSessionInfoInFocus(audioInterrupt);
612 }
613 
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback)614 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
615                                                       const std::shared_ptr<VolumeKeyEventCallback> &callback)
616 {
617     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
618     if (gsp == nullptr) {
619         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
620         return ERROR;
621     }
622 
623     if (callback == nullptr) {
624         AUDIO_ERR_LOG("SetVolumeKeyEventCallback volume back is nullptr");
625         return ERR_INVALID_PARAM;
626     }
627 
628     std::lock_guard<std::mutex> lock(volumeCallbackMutex_);
629     volumeKeyEventListenerStub_ = new(std::nothrow) AudioVolumeKeyEventCallbackStub();
630     if (volumeKeyEventListenerStub_ == nullptr) {
631         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: object null");
632         return ERROR;
633     }
634     volumeKeyEventListenerStub_->SetOnVolumeKeyEventCallback(callback);
635 
636     sptr<IRemoteObject> object = volumeKeyEventListenerStub_->AsObject();
637     if (object == nullptr) {
638         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: volumeKeyEventListenerStub_->AsObject is nullptr.");
639         return ERROR;
640     }
641     return gsp->SetVolumeKeyEventCallback(clientPid, object);
642 }
643 
UnsetVolumeKeyEventCallback(const int32_t clientPid)644 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(const int32_t clientPid)
645 {
646     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
647     if (gsp == nullptr) {
648         AUDIO_ERR_LOG("UnsetVolumeKeyEventCallback: audio policy manager proxy is NULL.");
649         return -1;
650     }
651     return gsp->UnsetVolumeKeyEventCallback(clientPid);
652 }
653 
RegisterAudioRendererEventListener(const int32_t clientUID,const std::shared_ptr<AudioRendererStateChangeCallback> & callback)654 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(const int32_t clientUID,
655     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
656 {
657     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
658     if (gsp == nullptr) {
659         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: audio policy manager proxy is NULL.");
660         return ERROR;
661     }
662 
663     AUDIO_INFO_LOG("AudioPolicyManager::RegisterAudioRendererEventListener");
664     if (callback == nullptr) {
665         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: RendererEvent Listener callback is nullptr");
666         return ERR_INVALID_PARAM;
667     }
668 
669     std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
670     rendererStateChangelistenerStub_ = new(std::nothrow) AudioRendererStateChangeListenerStub();
671     if (rendererStateChangelistenerStub_ == nullptr) {
672         AUDIO_ERR_LOG("RegisterAudioRendererEventListener: object null");
673         return ERROR;
674     }
675 
676     rendererStateChangelistenerStub_->SetCallback(callback);
677 
678     sptr<IRemoteObject> object = rendererStateChangelistenerStub_->AsObject();
679     if (object == nullptr) {
680         AUDIO_ERR_LOG("RegisterAudioRendererEventListener:RenderStateChangeListener IPC object creation failed");
681         return ERROR;
682     }
683     lock.unlock();
684 
685     return gsp->RegisterAudioRendererEventListener(clientUID, object);
686 }
687 
UnregisterAudioRendererEventListener(const int32_t clientUID)688 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(const int32_t clientUID)
689 {
690     AUDIO_INFO_LOG("AudioPolicyManager::UnregisterAudioRendererEventListener");
691     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
692     if (gsp == nullptr) {
693         AUDIO_ERR_LOG("UnregisterAudioRendererEventListener: audio policy manager proxy is NULL.");
694         return ERROR;
695     }
696     return gsp->UnregisterAudioRendererEventListener(clientUID);
697 }
698 
RegisterAudioCapturerEventListener(const int32_t clientUID,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)699 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientUID,
700     const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
701 {
702     AUDIO_INFO_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
703     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
704     if (gsp == nullptr) {
705         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
706         return ERROR;
707     }
708 
709     if (callback == nullptr) {
710         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: Capturer Event Listener callback is nullptr");
711         return ERR_INVALID_PARAM;
712     }
713 
714     std::unique_lock<std::mutex> lock(stateChangelistenerStubMutex_);
715     capturerStateChangelistenerStub_ = new(std::nothrow) AudioCapturerStateChangeListenerStub();
716     if (capturerStateChangelistenerStub_ == nullptr) {
717         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: object null");
718         return ERROR;
719     }
720 
721     capturerStateChangelistenerStub_->SetCallback(callback);
722 
723     sptr<IRemoteObject> object = capturerStateChangelistenerStub_->AsObject();
724     if (object == nullptr) {
725         AUDIO_ERR_LOG("RegisterAudioCapturerEventListener: CapturerStateChangeListener IPC object creation failed");
726         return ERROR;
727     }
728     lock.unlock();
729 
730     return gsp->RegisterAudioCapturerEventListener(clientUID, object);
731 }
732 
UnregisterAudioCapturerEventListener(const int32_t clientUID)733 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientUID)
734 {
735     AUDIO_INFO_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
736     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
737     if (gsp == nullptr) {
738         AUDIO_ERR_LOG("UnregisterAudioCapturerEventListener: audio policy manager proxy is NULL.");
739         return ERROR;
740     }
741     return gsp->UnregisterAudioCapturerEventListener(clientUID);
742 }
743 
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)744 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
745     const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
746 {
747     AUDIO_INFO_LOG("AudioPolicyManager::RegisterTracker");
748     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
749     if (gsp == nullptr) {
750         AUDIO_ERR_LOG("RegisterTracker: audio policy manager proxy is NULL.");
751         return ERROR;
752     }
753 
754     std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
755     clientTrackerCbStub_ = new(std::nothrow) AudioClientTrackerCallbackStub();
756     if (clientTrackerCbStub_ == nullptr) {
757         AUDIO_ERR_LOG("clientTrackerCbStub: memory allocation failed");
758         return ERROR;
759     }
760 
761     clientTrackerCbStub_->SetClientTrackerCallback(clientTrackerObj);
762 
763     sptr<IRemoteObject> object = clientTrackerCbStub_->AsObject();
764     if (object == nullptr) {
765         AUDIO_ERR_LOG("clientTrackerCbStub: IPC object creation failed");
766         return ERROR;
767     }
768     lock.unlock();
769 
770     return gsp->RegisterTracker(mode, streamChangeInfo, object);
771 }
772 
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)773 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
774 {
775     AUDIO_INFO_LOG("AudioPolicyManager::UpdateTracker");
776     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
777     if (gsp == nullptr) {
778         AUDIO_ERR_LOG("UpdateTracker: audio policy manager proxy is NULL.");
779         return ERROR;
780     }
781     return gsp->UpdateTracker(mode, streamChangeInfo);
782 }
783 
VerifyClientPermission(const std::string & permissionName,uint32_t appTokenId,int32_t appUid,bool privacyFlag,AudioPermissionState state)784 bool AudioPolicyManager::VerifyClientPermission(const std::string &permissionName,
785     uint32_t appTokenId, int32_t appUid, bool privacyFlag, AudioPermissionState state)
786 {
787     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
788     if (gsp == nullptr) {
789         AUDIO_ERR_LOG("VerifyClientPermission: audio policy manager proxy is NULL.");
790         return false;
791     }
792     return gsp->VerifyClientPermission(permissionName, appTokenId, appUid, privacyFlag, state);
793 }
794 
getUsingPemissionFromPrivacy(const std::string & permissionName,uint32_t appTokenId,AudioPermissionState state)795 bool AudioPolicyManager::getUsingPemissionFromPrivacy(const std::string &permissionName, uint32_t appTokenId,
796     AudioPermissionState state)
797 {
798     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
799     if (gsp == nullptr) {
800         AUDIO_ERR_LOG("getUsingPemissionFromPrivacy: audio policy manager proxy is NULL.");
801         return false;
802     }
803     return gsp->getUsingPemissionFromPrivacy(permissionName, appTokenId, state);
804 }
805 
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)806 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
807 {
808     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
809     if (gsp == nullptr) {
810         AUDIO_ERR_LOG("ReconfigureAudioChannel: audio policy manager proxy is NULL.");
811         return -1;
812     }
813     return gsp->ReconfigureAudioChannel(count, deviceType);
814 }
815 
GetAudioLatencyFromXml()816 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
817 {
818     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
819     if (gsp == nullptr) {
820         AUDIO_ERR_LOG("GetAudioLatencyFromXml: audio policy manager proxy is NULL.");
821         return -1;
822     }
823     return gsp->GetAudioLatencyFromXml();
824 }
825 
GetSinkLatencyFromXml()826 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
827 {
828     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
829     if (gsp == nullptr) {
830         AUDIO_ERR_LOG("GetSinkLatencyFromXml: audio policy manager proxy is NULL.");
831         return 0;
832     }
833     return gsp->GetSinkLatencyFromXml();
834 }
835 
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)836 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
837     vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
838 {
839     AUDIO_DEBUG_LOG("AudioPolicyManager::GetCurrentRendererChangeInfos");
840     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
841     if (gsp == nullptr) {
842         AUDIO_ERR_LOG("GetCurrentRendererChangeInfos: audio policy manager proxy is NULL.");
843         return -1;
844     }
845     return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
846 }
847 
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)848 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
849     vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
850 {
851     AUDIO_DEBUG_LOG("AudioPolicyManager::GetCurrentCapturerChangeInfos");
852     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
853     if (gsp == nullptr) {
854         AUDIO_ERR_LOG("GetCurrentCapturerChangeInfos: audio policy manager proxy is NULL.");
855         return ERROR;
856     }
857     return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
858 }
859 
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,AudioStreamType audioStreamType)860 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
861     StreamSetState streamSetState, AudioStreamType audioStreamType)
862 {
863     AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateStreamState");
864     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
865     if (gsp == nullptr) {
866         AUDIO_ERR_LOG("UpdateStreamState: audio policy manager proxy is NULL.");
867         return ERROR;
868     }
869     return  gsp->UpdateStreamState(clientUid, streamSetState, audioStreamType);
870 }
871 
GetVolumeGroupInfos()872 std::vector<sptr<VolumeGroupInfo>> AudioPolicyManager::GetVolumeGroupInfos()
873 {
874     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
875     if (gsp == nullptr) {
876         AUDIO_ERR_LOG("GetVolumeGroupInfos failed, g_apProxy is nullptr.");
877         std::vector<sptr<VolumeGroupInfo>> volumeGroupInfos = {};
878         return volumeGroupInfos;
879     }
880     return gsp->GetVolumeGroupInfos();
881 }
882 
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)883 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
884 {
885     AUDIO_DEBUG_LOG("AudioPolicyManager::IsAudioRendererLowLatencySupported");
886     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
887     if (gsp == nullptr) {
888         AUDIO_ERR_LOG("IsAudioRendererLowLatencySupported: audio policy manager proxy is NULL.");
889         return -1;
890     }
891     return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
892 }
893 } // namespace AudioStandard
894 } // namespace OHOS
895