• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef LOG_TAG
16 #define LOG_TAG "AudioPolicyManager"
17 #endif
18 
19 #include "audio_policy_manager.h"
20 #include "audio_errors.h"
21 #include "audio_server_death_recipient.h"
22 #include "audio_policy_log.h"
23 #include "audio_utils.h"
24 #include "iservice_registry.h"
25 #include "system_ability_definition.h"
26 
27 namespace OHOS {
28 namespace AudioStandard {
29 using namespace std;
30 using namespace std::chrono_literals;
31 
32 static sptr<IAudioPolicy> g_apProxy = nullptr;
33 mutex g_apProxyMutex;
34 constexpr int64_t SLEEP_TIME = 1;
35 constexpr int32_t RETRY_TIMES = 10;
36 const unsigned int TIME_OUT_SECONDS = 10;
37 constexpr auto SLEEP_TIMES_RETYT_FAILED = 1min;
38 std::mutex g_cBMapMutex;
39 std::mutex g_cBDiedMapMutex;
40 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
41 std::vector<std::weak_ptr<AudioStreamPolicyServiceDiedCallback>> AudioPolicyManager::audioStreamCBMap_;
42 
RegisterDeathRecipientInner(sptr<IRemoteObject> object)43 inline bool RegisterDeathRecipientInner(sptr<IRemoteObject> object)
44 {
45     pid_t pid = 0;
46     sptr<AudioServerDeathRecipient> deathRecipient = new(std::nothrow) AudioServerDeathRecipient(pid);
47     CHECK_AND_RETURN_RET_LOG(deathRecipient != nullptr, false, "deathRecipient is null");
48     deathRecipient->SetNotifyCb(
49         [] (pid_t pid) { AudioPolicyManager::AudioPolicyServerDied(pid); });
50     AUDIO_DEBUG_LOG("Register audio policy server death recipient");
51     CHECK_AND_RETURN_RET_LOG(object->AddDeathRecipient(deathRecipient), false, "AddDeathRecipient failed");
52     return true;
53 }
54 
GetAudioPolicyProxyFromSamgr()55 inline sptr<IAudioPolicy> GetAudioPolicyProxyFromSamgr()
56 {
57     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
58     CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
59     sptr<IRemoteObject> object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
60     CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
61     sptr<IAudioPolicy> apProxy = iface_cast<IAudioPolicy>(object);
62     CHECK_AND_RETURN_RET_LOG(apProxy != nullptr, nullptr, "Init apProxy is NULL.");
63     return apProxy;
64 }
65 
GetAudioPolicyManagerProxy()66 inline const sptr<IAudioPolicy> GetAudioPolicyManagerProxy()
67 {
68     AUDIO_DEBUG_LOG("In");
69     lock_guard<mutex> lock(g_apProxyMutex);
70 
71     if (g_apProxy != nullptr) {
72         return g_apProxy;
73     }
74 
75     sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
76     CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
77 
78     AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
79 
80     if (RegisterDeathRecipientInner(gsp->AsObject())) {
81         g_apProxy = gsp;
82     }
83 
84     return gsp;
85 }
86 
RecoverAndGetAudioPolicyManagerProxy()87 inline const sptr<IAudioPolicy> RecoverAndGetAudioPolicyManagerProxy()
88 {
89     AUDIO_DEBUG_LOG("In");
90     lock_guard<mutex> lock(g_apProxyMutex);
91     g_apProxy = nullptr;
92 
93     sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
94     CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
95 
96     AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
97     CHECK_AND_RETURN_RET_LOG(RegisterDeathRecipientInner(gsp->AsObject()), nullptr, "RegisterDeathRecipient failed");
98 
99     g_apProxy = gsp;
100     return gsp;
101 }
102 
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)103 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
104 {
105     AudioXCollie audioXCollie("AudioPolicyManager::RegisterPolicyCallbackClientFunc", TIME_OUT_SECONDS);
106     std::unique_lock<std::mutex> lock(registerCallbackMutex_);
107     if (audioPolicyClientStubCB_ == nullptr) {
108         audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
109     }
110     sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
111     if (object == nullptr) {
112         AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
113         lock.unlock();
114         return ERROR;
115     }
116     lock.unlock();
117 
118     int32_t ret = gsp->RegisterPolicyCallbackClient(object);
119     if (ret == SUCCESS) {
120         isAudioPolicyClientRegisted_ = true;
121     }
122     return ret;
123 }
124 
RecoverAudioPolicyCallbackClient()125 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
126 {
127     std::unique_lock<std::mutex> lock(registerCallbackMutex_);
128     if (audioPolicyClientStubCB_ == nullptr) {
129         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
130         return;
131     }
132     lock.unlock();
133 
134     int32_t retry = RETRY_TIMES;
135     sptr<IAudioPolicy> gsp = nullptr;
136     while (retry--) {
137         // Sleep and wait for 1 second;
138         sleep(SLEEP_TIME);
139         gsp = RecoverAndGetAudioPolicyManagerProxy();
140         if (gsp != nullptr) {
141             AUDIO_INFO_LOG("Reconnect audio policy service success!");
142             break;
143         }
144         if (retry == 0) {
145             AUDIO_WARNING_LOG("Reconnect audio policy service %{public}d times, sleep ", RETRY_TIMES);
146             std::this_thread::sleep_for(SLEEP_TIMES_RETYT_FAILED);
147             retry = RETRY_TIMES;
148         }
149     }
150 
151     CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
152 
153     sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
154     if (object == nullptr) {
155         AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
156         return;
157     }
158 
159     gsp->RegisterPolicyCallbackClient(object);
160     if (audioPolicyClientStubCB_->HasMicStateChangeCallback()) {
161         AUDIO_INFO_LOG("RecoverAudioPolicyCallbackClient has micStateChangeCallback");
162         gsp->SetClientCallbacksEnable(CALLBACK_MICMUTE_STATE_CHANGE, true);
163     }
164 
165     for (auto enumIndex : CALLBACK_ENUMS) {
166         auto &[mutex, isEnable] = callbackChangeInfos_[enumIndex];
167         std::lock_guard<std::mutex> lock(mutex);
168         if (isEnable) {
169             gsp->SetClientCallbacksEnable(enumIndex, true);
170         }
171     }
172 }
173 
AudioPolicyServerDied(pid_t pid)174 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid)
175 {
176     {
177         std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
178         AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
179         std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
180         for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
181             cb = it->second.lock();
182             if (cb != nullptr) {
183                 cb->OnAudioPolicyServiceDied();
184             }
185         }
186     }
187     {
188         std::lock_guard<std::mutex> lock(g_apProxyMutex);
189         g_apProxy = nullptr;
190     }
191     GetInstance().RecoverAudioPolicyCallbackClient();
192 
193     {
194         std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
195         if (audioStreamCBMap_.size() != 0) {
196             for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end();) {
197                 auto cb = (*it).lock();
198                 if (cb == nullptr) {
199                     it = audioStreamCBMap_.erase(it);
200                     continue;
201                 }
202                 cb->OnAudioPolicyServiceDied();
203                 ++it;
204             }
205         }
206     }
207 }
208 
GetMaxVolumeLevel(AudioVolumeType volumeType)209 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType)
210 {
211     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
212     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
213 
214     return gsp->GetMaxVolumeLevel(volumeType);
215 }
216 
GetMinVolumeLevel(AudioVolumeType volumeType)217 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType)
218 {
219     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
220     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
221 
222     return gsp->GetMinVolumeLevel(volumeType);
223 }
224 
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag)225 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, bool isLegacy,
226     int32_t volumeFlag)
227 {
228     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
229     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
230 
231     if (isLegacy) {
232         return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
233     }
234     return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag);
235 }
236 
SetRingerModeLegacy(AudioRingerMode ringMode)237 int32_t AudioPolicyManager::SetRingerModeLegacy(AudioRingerMode ringMode)
238 {
239     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
240     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
241     return gsp->SetRingerModeLegacy(ringMode);
242 }
243 
SetRingerMode(AudioRingerMode ringMode)244 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
245 {
246     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
247     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
248     return gsp->SetRingerMode(ringMode);
249 }
250 
GetRingerMode()251 AudioRingerMode AudioPolicyManager::GetRingerMode()
252 {
253     AudioXCollie audioXCollie("AudioPolicyManager::GetRingerMode", TIME_OUT_SECONDS);
254     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
255     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
256     return gsp->GetRingerMode();
257 }
258 
SetAudioScene(AudioScene scene)259 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
260 {
261     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
262     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
263     return gsp->SetAudioScene(scene);
264 }
265 
SetMicrophoneMute(bool isMute)266 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
267 {
268     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
269     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
270     return gsp->SetMicrophoneMute(isMute);
271 }
272 
SetMicrophoneMuteAudioConfig(bool isMute)273 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
274 {
275     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
276     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
277     return gsp->SetMicrophoneMuteAudioConfig(isMute);
278 }
279 
SetMicrophoneMutePersistent(const bool isMute,const PolicyType type)280 int32_t AudioPolicyManager::SetMicrophoneMutePersistent(const bool isMute, const PolicyType type)
281 {
282     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
283     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
284     return gsp->SetMicrophoneMutePersistent(isMute, type);
285 }
286 
GetPersistentMicMuteState()287 bool AudioPolicyManager::GetPersistentMicMuteState()
288 {
289     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
290     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
291     return gsp->GetPersistentMicMuteState();
292 }
293 
IsMicrophoneMuteLegacy()294 bool AudioPolicyManager::IsMicrophoneMuteLegacy()
295 {
296     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
297     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
298     if (!isAudioPolicyClientRegisted_) {
299         RegisterPolicyCallbackClientFunc(gsp);
300     }
301 
302     return gsp->IsMicrophoneMuteLegacy();
303 }
304 
IsMicrophoneMute()305 bool AudioPolicyManager::IsMicrophoneMute()
306 {
307     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
308     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
309     if (!isAudioPolicyClientRegisted_) {
310         RegisterPolicyCallbackClientFunc(gsp);
311     }
312 
313     return gsp->IsMicrophoneMute();
314 }
315 
GetAudioScene()316 AudioScene AudioPolicyManager::GetAudioScene()
317 {
318     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
319     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
320     return gsp->GetAudioScene();
321 }
322 
GetSystemActiveVolumeType(const int32_t clientUid)323 AudioStreamType AudioPolicyManager::GetSystemActiveVolumeType(const int32_t clientUid)
324 {
325     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
326     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
327     return gsp->GetSystemActiveVolumeType(clientUid);
328 }
329 
GetSystemVolumeLevel(AudioVolumeType volumeType)330 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType)
331 {
332     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
333     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
334     return gsp->GetSystemVolumeLevel(volumeType);
335 }
336 
SetStreamMute(AudioVolumeType volumeType,bool mute,bool isLegacy)337 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, bool isLegacy)
338 {
339     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
340     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
341     if (isLegacy) {
342         return gsp->SetStreamMuteLegacy(volumeType, mute);
343     }
344     return gsp->SetStreamMute(volumeType, mute);
345 }
346 
GetStreamMute(AudioVolumeType volumeType)347 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
348 {
349     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
350     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
351     return gsp->GetStreamMute(volumeType);
352 }
353 
SetLowPowerVolume(int32_t streamId,float volume)354 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
355 {
356     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
357     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
358     return gsp->SetLowPowerVolume(streamId, volume);
359 }
360 
GetLowPowerVolume(int32_t streamId)361 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
362 {
363     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
364     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
365     return gsp->GetLowPowerVolume(streamId);
366 }
367 
GetSingleStreamVolume(int32_t streamId)368 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
369 {
370     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
371     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
372     return gsp->GetSingleStreamVolume(streamId);
373 }
374 
IsStreamActive(AudioVolumeType volumeType)375 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
376 {
377     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
378     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
379     return gsp->IsStreamActive(volumeType);
380 }
381 
SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)382 int32_t AudioPolicyManager::SelectOutputDevice(sptr<AudioRendererFilter> audioRendererFilter,
383     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
384 {
385     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
386     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
387     return gsp->SelectOutputDevice(audioRendererFilter, audioDeviceDescriptors);
388 }
389 
GetSelectedDeviceInfo(int32_t uid,int32_t pid,AudioStreamType streamType)390 std::string AudioPolicyManager::GetSelectedDeviceInfo(int32_t uid, int32_t pid, AudioStreamType streamType)
391 {
392     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
393     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
394     return gsp->GetSelectedDeviceInfo(uid, pid, streamType);
395 }
396 
SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)397 int32_t AudioPolicyManager::SelectInputDevice(sptr<AudioCapturerFilter> audioCapturerFilter,
398     std::vector<sptr<AudioDeviceDescriptor>> audioDeviceDescriptors)
399 {
400     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
401     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
402     return gsp->SelectInputDevice(audioCapturerFilter, audioDeviceDescriptors);
403 }
404 
GetDevices(DeviceFlag deviceFlag)405 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevices(DeviceFlag deviceFlag)
406 {
407     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
408     if (gsp == nullptr) {
409         AUDIO_ERR_LOG("GetDevices: audio policy manager proxy is NULL.");
410         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
411         return deviceInfo;
412     }
413     return gsp->GetDevices(deviceFlag);
414 }
415 
GetDevicesInner(DeviceFlag deviceFlag)416 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetDevicesInner(DeviceFlag deviceFlag)
417 {
418     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
419     if (gsp == nullptr) {
420         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
421         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
422         return deviceInfo;
423     }
424     return gsp->GetDevicesInner(deviceFlag);
425 }
426 
GetPreferredOutputDeviceDescriptors(AudioRendererInfo & rendererInfo)427 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredOutputDeviceDescriptors(
428     AudioRendererInfo &rendererInfo)
429 {
430     AudioXCollie audioXCollie("AudioPolicyManager::GetPreferredOutputDeviceDescriptors", TIME_OUT_SECONDS);
431     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
432     if (gsp == nullptr) {
433         AUDIO_ERR_LOG("GetPreferredOutputDeviceDescriptors: audio policy manager proxy is NULL.");
434         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
435         return deviceInfo;
436     }
437     return gsp->GetPreferredOutputDeviceDescriptors(rendererInfo);
438 }
439 
GetPreferredInputDeviceDescriptors(AudioCapturerInfo & captureInfo)440 std::vector<sptr<AudioDeviceDescriptor>> AudioPolicyManager::GetPreferredInputDeviceDescriptors(
441     AudioCapturerInfo &captureInfo)
442 {
443     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
444     if (gsp == nullptr) {
445         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
446         std::vector<sptr<AudioDeviceDescriptor>> deviceInfo;
447         return deviceInfo;
448     }
449     return gsp->GetPreferredInputDeviceDescriptors(captureInfo);
450 }
451 
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)452 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
453     const int32_t zoneID)
454 {
455     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
456     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
457     return gsp->GetAudioFocusInfoList(focusInfoList, zoneID);
458 }
459 
SetClientCallbacksEnable(const CallbackChange & callbackchange,const bool & enable)460 int32_t AudioPolicyManager::SetClientCallbacksEnable(const CallbackChange &callbackchange, const bool &enable)
461 {
462     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
463     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
464     return gsp->SetClientCallbacksEnable(callbackchange, enable);
465 }
466 
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)467 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
468     const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
469 {
470     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
471     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
472         "RegisterFocusInfoChangeCallback: callback is nullptr");
473 
474     if (!isAudioPolicyClientRegisted_) {
475         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
476         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
477         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
478         if (ret != SUCCESS) {
479             return ret;
480         }
481     }
482 
483     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
484     audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
485     size_t callbackSize = audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize();
486     if (callbackSize == 1) {
487         callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = true;
488         SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, true);
489     }
490 
491     return SUCCESS;
492 }
493 
UnregisterFocusInfoChangeCallback(const int32_t clientId)494 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
495 {
496     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
497     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
498     if (audioPolicyClientStubCB_ != nullptr) {
499         audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
500         if (audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize() == 0) {
501             callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = false;
502             SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, false);
503         }
504     }
505     return SUCCESS;
506 }
507 
508 #ifdef FEATURE_DTMF_TONE
GetSupportedTones()509 std::vector<int32_t> AudioPolicyManager::GetSupportedTones()
510 {
511     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
512     if (gsp == nullptr) {
513         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
514         std::vector<int> lSupportedToneList = {};
515         return lSupportedToneList;
516     }
517     return gsp->GetSupportedTones();
518 }
519 
GetToneConfig(int32_t ltonetype)520 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype)
521 {
522     AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
523 
524     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
525     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
526     return gsp->GetToneConfig(ltonetype);
527 }
528 #endif
529 
SetDeviceActive(InternalDeviceType deviceType,bool active)530 int32_t AudioPolicyManager::SetDeviceActive(InternalDeviceType deviceType, bool active)
531 {
532     AUDIO_INFO_LOG("SetDeviceActive deviceType: %{public}d, active: %{public}d", deviceType, active);
533     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
534     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
535     return gsp->SetDeviceActive(deviceType, active);
536 }
537 
IsDeviceActive(InternalDeviceType deviceType)538 bool AudioPolicyManager::IsDeviceActive(InternalDeviceType deviceType)
539 {
540     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
541     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
542     return gsp->IsDeviceActive(deviceType);
543 }
544 
GetActiveOutputDevice()545 DeviceType AudioPolicyManager::GetActiveOutputDevice()
546 {
547     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
548     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
549     return gsp->GetActiveOutputDevice();
550 }
551 
GetActiveInputDevice()552 DeviceType AudioPolicyManager::GetActiveInputDevice()
553 {
554     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
555     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DEVICE_TYPE_INVALID, "audio policy manager proxy is NULL.");
556     return gsp->GetActiveInputDevice();
557 }
558 
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)559 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
560     const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
561 {
562     AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
563     if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
564         AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
565         return ERR_PERMISSION_DENIED;
566     }
567 
568     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
569 
570     if (!isAudioPolicyClientRegisted_) {
571         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
572         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
573         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
574         if (ret != SUCCESS) {
575             return ret;
576         }
577     }
578     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
579     if (audioPolicyClientStubCB_ != nullptr) {
580         audioPolicyClientStubCB_->AddRingerModeCallback(callback);
581         size_t callbackSize = audioPolicyClientStubCB_->GetRingerModeCallbackSize();
582         if (callbackSize == 1) {
583             callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = true;
584             SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, true);
585         }
586     }
587     return SUCCESS;
588 }
589 
UnsetRingerModeCallback(const int32_t clientId)590 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
591 {
592     AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
593     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
594     if (audioPolicyClientStubCB_ != nullptr) {
595         audioPolicyClientStubCB_->RemoveRingerModeCallback();
596         if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
597             callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
598             SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
599         }
600     }
601     return SUCCESS;
602 }
603 
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)604 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
605     const std::shared_ptr<AudioRingerModeCallback> &callback)
606 {
607     AUDIO_DEBUG_LOG("Remove one ringer mode callback");
608     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
609     if (audioPolicyClientStubCB_ != nullptr) {
610         audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
611         if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
612             callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
613             SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
614         }
615     }
616     return SUCCESS;
617 }
618 
SetDeviceChangeCallback(const int32_t clientId,const DeviceFlag flag,const std::shared_ptr<AudioManagerDeviceChangeCallback> & callback)619 int32_t AudioPolicyManager::SetDeviceChangeCallback(const int32_t clientId, const DeviceFlag flag,
620     const std::shared_ptr<AudioManagerDeviceChangeCallback> &callback)
621 {
622     AUDIO_DEBUG_LOG("AudioPolicyManager::SetDeviceChangeCallback");
623     bool hasSystemPermission = PermissionUtil::VerifySystemPermission();
624     switch (flag) {
625         case NONE_DEVICES_FLAG:
626         case DISTRIBUTED_OUTPUT_DEVICES_FLAG:
627         case DISTRIBUTED_INPUT_DEVICES_FLAG:
628         case ALL_DISTRIBUTED_DEVICES_FLAG:
629         case ALL_L_D_DEVICES_FLAG:
630             if (!hasSystemPermission) {
631                 AUDIO_ERR_LOG("SetDeviceChangeCallback: No system permission");
632                 return ERR_PERMISSION_DENIED;
633             }
634             break;
635         default:
636             break;
637     }
638 
639     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "SetDeviceChangeCallback: callback is nullptr");
640 
641     if (!isAudioPolicyClientRegisted_) {
642         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
643         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
644         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
645         if (ret != SUCCESS) {
646             return ret;
647         }
648     }
649 
650     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].mutex);
651     if (audioPolicyClientStubCB_ != nullptr) {
652         audioPolicyClientStubCB_->AddDeviceChangeCallback(flag, callback);
653         size_t callbackSize = audioPolicyClientStubCB_->GetDeviceChangeCallbackSize();
654         if (callbackSize == 1) {
655             callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].isEnable = true;
656             SetClientCallbacksEnable(CALLBACK_SET_DEVICE_CHANGE, true);
657         }
658     }
659     return SUCCESS;
660 }
661 
SetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)662 int32_t AudioPolicyManager::SetMicrophoneBlockedCallback(const int32_t clientId,
663     const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
664 {
665     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
666     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
667     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
668         "SetMicrophoneBlockedCallback: callback is nullptr");
669     if (!isAudioPolicyClientRegisted_) {
670         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
671         if (ret != SUCCESS) {
672             return ret;
673         }
674     }
675     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
676     if (audioPolicyClientStubCB_ != nullptr) {
677         audioPolicyClientStubCB_->AddMicrophoneBlockedCallback(clientId, callback);
678         size_t callbackSize = audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize();
679         if (callbackSize == 1) {
680             callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = true;
681             SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, true);
682         }
683     }
684     return SUCCESS;
685 }
686 
UnsetDeviceChangeCallback(const int32_t clientId,DeviceFlag flag,std::shared_ptr<AudioManagerDeviceChangeCallback> & cb)687 int32_t AudioPolicyManager::UnsetDeviceChangeCallback(const int32_t clientId, DeviceFlag flag,
688     std::shared_ptr<AudioManagerDeviceChangeCallback> &cb)
689 {
690     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetDeviceChangeCallback");
691     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].mutex);
692     if (audioPolicyClientStubCB_ != nullptr) {
693         audioPolicyClientStubCB_->RemoveDeviceChangeCallback(flag, cb);
694         if (audioPolicyClientStubCB_->GetDeviceChangeCallbackSize() == 0) {
695             callbackChangeInfos_[CALLBACK_SET_DEVICE_CHANGE].isEnable = false;
696             SetClientCallbacksEnable(CALLBACK_SET_DEVICE_CHANGE, false);
697         }
698     }
699     return SUCCESS;
700 }
701 
SetPreferredOutputDeviceChangeCallback(const int32_t clientId,const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> & callback)702 int32_t AudioPolicyManager::SetPreferredOutputDeviceChangeCallback(const int32_t clientId,
703     const std::shared_ptr<AudioPreferredOutputDeviceChangeCallback> &callback)
704 {
705     AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredOutputDeviceChangeCallback");
706     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
707 
708     if (!isAudioPolicyClientRegisted_) {
709         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
710         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
711         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
712         if (ret != SUCCESS) {
713             return ret;
714         }
715     }
716 
717     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].mutex);
718     if (audioPolicyClientStubCB_ != nullptr) {
719         audioPolicyClientStubCB_->AddPreferredOutputDeviceChangeCallback(callback);
720         size_t callbackSize = audioPolicyClientStubCB_->GetPreferredOutputDeviceChangeCallbackSize();
721         if (callbackSize == 1) {
722             callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].isEnable = true;
723             SetClientCallbacksEnable(CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE, true);
724         }
725     }
726     return SUCCESS;
727 }
728 
SetPreferredInputDeviceChangeCallback(const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> & callback)729 int32_t AudioPolicyManager::SetPreferredInputDeviceChangeCallback(
730     const std::shared_ptr<AudioPreferredInputDeviceChangeCallback> &callback)
731 {
732     AUDIO_DEBUG_LOG("AudioPolicyManager::SetPreferredInputDeviceChangeCallback");
733     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
734 
735     if (!isAudioPolicyClientRegisted_) {
736         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
737         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
738         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
739         if (ret != SUCCESS) {
740             return ret;
741         }
742     }
743 
744     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].mutex);
745     if (audioPolicyClientStubCB_ != nullptr) {
746         audioPolicyClientStubCB_->AddPreferredInputDeviceChangeCallback(callback);
747         size_t callbackSize = audioPolicyClientStubCB_->GetPreferredInputDeviceChangeCallbackSize();
748         if (callbackSize == 1) {
749             callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].isEnable = true;
750             SetClientCallbacksEnable(CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE, true);
751         }
752     }
753     return SUCCESS;
754 }
755 
UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)756 int32_t AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback(const int32_t clientId)
757 {
758     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredOutputDeviceChangeCallback");
759     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].mutex);
760     if (audioPolicyClientStubCB_ != nullptr) {
761         audioPolicyClientStubCB_->RemovePreferredOutputDeviceChangeCallback();
762         if (audioPolicyClientStubCB_->GetPreferredOutputDeviceChangeCallbackSize() == 0) {
763             callbackChangeInfos_[CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE].isEnable = false;
764             SetClientCallbacksEnable(CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE, false);
765         }
766     }
767     return SUCCESS;
768 }
769 
UnsetPreferredInputDeviceChangeCallback()770 int32_t AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback()
771 {
772     AUDIO_DEBUG_LOG("AudioPolicyManager::UnsetPreferredInputDeviceChangeCallback");
773     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].mutex);
774     if (audioPolicyClientStubCB_ != nullptr) {
775         audioPolicyClientStubCB_->RemovePreferredInputDeviceChangeCallback();
776         if (audioPolicyClientStubCB_->GetPreferredInputDeviceChangeCallbackSize() == 0) {
777             callbackChangeInfos_[CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE].isEnable = false;
778             SetClientCallbacksEnable(CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE, false);
779         }
780     }
781     return SUCCESS;
782 }
783 
UnsetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)784 int32_t AudioPolicyManager::UnsetMicrophoneBlockedCallback(const int32_t clientId,
785     const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
786 {
787     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
788     if (audioPolicyClientStubCB_ != nullptr) {
789         audioPolicyClientStubCB_->RemoveMicrophoneBlockedCallback(clientId, callback);
790         if (audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize() == 0) {
791             callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = false;
792             SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, false);
793         }
794     }
795     return SUCCESS;
796 }
797 
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)798 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
799     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
800 {
801     AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
802     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
803 
804     if (!isAudioPolicyClientRegisted_) {
805         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
806         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
807         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
808         if (ret != SUCCESS) {
809             return ret;
810         }
811     }
812 
813     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
814     if (audioPolicyClientStubCB_ != nullptr) {
815         audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
816         size_t callbackSize = audioPolicyClientStubCB_->GetMicStateChangeCallbackSize();
817         if (callbackSize == 1) {
818             callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = true;
819             SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, true);
820         }
821     }
822     return SUCCESS;
823 }
824 
UnsetMicStateChangeCallback(const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)825 int32_t AudioPolicyManager::UnsetMicStateChangeCallback(
826     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
827 {
828     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
829     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
830     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
831     CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERR_INVALID_OPERATION,
832         "audioPolicyClientStubCB is nullptr");
833     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
834     if (audioPolicyClientStubCB_ != nullptr) {
835         audioPolicyClientStubCB_->RemoveMicStateChangeCallback();
836         if (audioPolicyClientStubCB_->GetMicStateChangeCallbackSize() == 0) {
837             callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = false;
838             SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, false);
839         }
840     }
841     return SUCCESS;
842 }
843 
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,uint32_t clientUid,const int32_t zoneID)844 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
845     const std::shared_ptr<AudioInterruptCallback> &callback, uint32_t clientUid, const int32_t zoneID)
846 {
847     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
848     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
849     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
850 
851     sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
852     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
853     listener->SetInterruptCallback(callback);
854 
855     sptr<IRemoteObject> object = listener->AsObject();
856     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
857 
858     return gsp->SetAudioInterruptCallback(sessionID, object, clientUid, zoneID);
859 }
860 
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)861 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
862 {
863     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
864     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
865     return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
866 }
867 
SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> & callback)868 int32_t AudioPolicyManager::SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> &callback)
869 {
870     AUDIO_ERR_LOG("In");
871     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
872     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
873     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
874 
875     sptr<AudioPolicyManagerListenerStub> listener = new(std::nothrow) AudioPolicyManagerListenerStub();
876     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
877     listener->SetQueryClientTypeCallback(callback);
878 
879     sptr<IRemoteObject> object = listener->AsObject();
880     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
881 
882     return gsp->SetQueryClientTypeCallback(object);
883 }
884 
ActivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID,const bool isUpdatedAudioStrategy)885 int32_t AudioPolicyManager::ActivateAudioInterrupt(
886     const AudioInterrupt &audioInterrupt, const int32_t zoneID, const bool isUpdatedAudioStrategy)
887 {
888     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
889     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
890     return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID, isUpdatedAudioStrategy);
891 }
892 
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)893 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
894 {
895     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
896     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
897     return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
898 }
899 
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)900 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
901     const std::shared_ptr<AudioInterruptCallback> &callback)
902 {
903     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
904     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
905     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
906 
907     std::unique_lock<std::mutex> lock(listenerStubMutex_);
908     sptr<AudioPolicyManagerListenerStub> interruptListenerStub = new(std::nothrow) AudioPolicyManagerListenerStub();
909     CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
910     interruptListenerStub->SetInterruptCallback(callback);
911 
912     sptr<IRemoteObject> object = interruptListenerStub->AsObject();
913     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
914     lock.unlock();
915 
916     return gsp->SetAudioManagerInterruptCallback(clientId, object);
917 }
918 
UnsetAudioManagerInterruptCallback(const int32_t clientId)919 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
920 {
921     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
922     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
923     return gsp->UnsetAudioManagerInterruptCallback(clientId);
924 }
925 
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)926 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
927 {
928     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
929     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
930     return gsp->RequestAudioFocus(clientId, audioInterrupt);
931 }
932 
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)933 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
934 {
935     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
936     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
937     return gsp->AbandonAudioFocus(clientId, audioInterrupt);
938 }
939 
GetStreamInFocus(const int32_t zoneID)940 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
941 {
942     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
943     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
944     return gsp->GetStreamInFocus(zoneID);
945 }
946 
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)947 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
948 {
949     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
950     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
951     return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
952 }
953 
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)954 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
955     const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
956 {
957     AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
958     if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
959         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
960         return ERR_PERMISSION_DENIED;
961     }
962     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
963 
964     if (!isAudioPolicyClientRegisted_) {
965         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
966         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
967         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
968         if (ret != SUCCESS) {
969             return ret;
970         }
971     }
972 
973     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
974     if (audioPolicyClientStubCB_ != nullptr) {
975         audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
976         size_t callbackSize = audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize();
977         if (callbackSize == 1) {
978             callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = true;
979             SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, true);
980         }
981     }
982     return SUCCESS;
983 }
984 
UnsetVolumeKeyEventCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)985 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(
986     const std::shared_ptr<VolumeKeyEventCallback> &callback)
987 {
988     AUDIO_DEBUG_LOG("UnsetVolumeKeyEventCallback");
989     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
990     if (audioPolicyClientStubCB_ != nullptr) {
991         audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback(callback);
992         if (audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize() == 0) {
993             callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = false;
994             SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, false);
995         }
996     }
997     return SUCCESS;
998 }
999 
RegisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1000 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(
1001     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1002 {
1003     AUDIO_DEBUG_LOG("in");
1004     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
1005 
1006     if (!isAudioPolicyClientRegisted_) {
1007         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1008         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1009         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1010         if (ret != SUCCESS) {
1011             return ret;
1012         }
1013     }
1014 
1015     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1016     audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
1017     size_t callbackSize = audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize();
1018     if (callbackSize == 1) {
1019         callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = true;
1020         SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, true);
1021     }
1022     isAudioRendererEventListenerRegistered = true;
1023     return SUCCESS;
1024 }
1025 
UnregisterAudioRendererEventListener(const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> & callbacks)1026 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1027     const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> &callbacks)
1028 {
1029     AUDIO_DEBUG_LOG("in");
1030     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1031     if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1032         audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callbacks);
1033         if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1034             callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1035             SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1036         }
1037         isAudioRendererEventListenerRegistered = false;
1038     }
1039     return SUCCESS;
1040 }
1041 
UnregisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1042 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1043     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1044 {
1045     AUDIO_DEBUG_LOG("in");
1046     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1047     if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1048         audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callback);
1049         if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1050             callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1051             SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1052         }
1053         isAudioRendererEventListenerRegistered = false;
1054     }
1055     return SUCCESS;
1056 }
1057 
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)1058 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
1059     const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
1060 {
1061     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
1062 
1063     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
1064 
1065     if (!isAudioPolicyClientRegisted_) {
1066         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1067         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1068         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1069         if (ret != SUCCESS) {
1070             return ret;
1071         }
1072     }
1073 
1074     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1075     audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
1076     size_t callbackSize = audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize();
1077     if (callbackSize == 1) {
1078         callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = true;
1079         SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, true);
1080     }
1081     isAudioCapturerEventListenerRegistered = true;
1082     return SUCCESS;
1083 }
1084 
UnregisterAudioCapturerEventListener(const int32_t clientPid)1085 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
1086 {
1087     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
1088     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1089     if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
1090         audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
1091         if (audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize() == 0) {
1092             callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = false;
1093             SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, false);
1094         }
1095         isAudioCapturerEventListenerRegistered = false;
1096     }
1097     return SUCCESS;
1098 }
1099 
RegisterDeviceChangeWithInfoCallback(const uint32_t sessionID,const std::weak_ptr<DeviceChangeWithInfoCallback> & callback)1100 int32_t AudioPolicyManager::RegisterDeviceChangeWithInfoCallback(
1101     const uint32_t sessionID, const std::weak_ptr<DeviceChangeWithInfoCallback> &callback)
1102 {
1103     AUDIO_DEBUG_LOG("In");
1104 
1105     if (callback.expired()) {
1106         AUDIO_ERR_LOG("callback is expired");
1107         return ERR_INVALID_PARAM;
1108     }
1109 
1110     if (!isAudioPolicyClientRegisted_) {
1111         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1112         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1113         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1114         if (ret != SUCCESS) {
1115             return ret;
1116         }
1117     }
1118 
1119     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].mutex);
1120     if (audioPolicyClientStubCB_ != nullptr) {
1121         audioPolicyClientStubCB_->AddDeviceChangeWithInfoCallback(sessionID, callback);
1122         size_t callbackSize = audioPolicyClientStubCB_->GetDeviceChangeWithInfoCallbackkSize();
1123         if (callbackSize == 1) {
1124             callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].isEnable = true;
1125             SetClientCallbacksEnable(CALLBACK_DEVICE_CHANGE_WITH_INFO, true);
1126         }
1127     }
1128     return SUCCESS;
1129 }
1130 
UnregisterDeviceChangeWithInfoCallback(const uint32_t sessionID)1131 int32_t AudioPolicyManager::UnregisterDeviceChangeWithInfoCallback(const uint32_t sessionID)
1132 {
1133     AUDIO_DEBUG_LOG("In");
1134     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].mutex);
1135     if (audioPolicyClientStubCB_ != nullptr) {
1136         audioPolicyClientStubCB_->RemoveDeviceChangeWithInfoCallback(sessionID);
1137         if (audioPolicyClientStubCB_->GetDeviceChangeWithInfoCallbackkSize() == 0) {
1138             callbackChangeInfos_[CALLBACK_DEVICE_CHANGE_WITH_INFO].isEnable = false;
1139             SetClientCallbacksEnable(CALLBACK_DEVICE_CHANGE_WITH_INFO, false);
1140         }
1141     }
1142     return SUCCESS;
1143 }
1144 
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)1145 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
1146     const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
1147 {
1148     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
1149     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1150     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1151 
1152     std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
1153     sptr<AudioClientTrackerCallbackStub> callback = new(std::nothrow) AudioClientTrackerCallbackStub();
1154     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
1155 
1156     callback->SetClientTrackerCallback(clientTrackerObj);
1157 
1158     sptr<IRemoteObject> object = callback->AsObject();
1159     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
1160     lock.unlock();
1161 
1162     return gsp->RegisterTracker(mode, streamChangeInfo, object);
1163 }
1164 
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)1165 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
1166 {
1167     AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
1168     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1169     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1170     return gsp->UpdateTracker(mode, streamChangeInfo);
1171 }
1172 
FetchOutputDeviceForTrack(AudioStreamChangeInfo & streamChangeInfo,const AudioStreamDeviceChangeReasonExt reason)1173 void AudioPolicyManager::FetchOutputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo,
1174     const AudioStreamDeviceChangeReasonExt reason)
1175 {
1176     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1177     if (gsp != nullptr) {
1178         gsp->FetchOutputDeviceForTrack(streamChangeInfo, reason);
1179     } else {
1180         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1181     }
1182 }
1183 
FetchInputDeviceForTrack(AudioStreamChangeInfo & streamChangeInfo)1184 void AudioPolicyManager::FetchInputDeviceForTrack(AudioStreamChangeInfo &streamChangeInfo)
1185 {
1186     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1187     if (gsp != nullptr) {
1188         gsp->FetchInputDeviceForTrack(streamChangeInfo);
1189     } else {
1190         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1191     }
1192 }
1193 
CheckRecordingCreate(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,SourceType sourceType)1194 bool AudioPolicyManager::CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
1195     SourceType sourceType)
1196 {
1197     AUDIO_ERR_LOG("Not supported operation");
1198     return false;
1199 }
1200 
CheckRecordingStateChange(uint32_t appTokenId,uint64_t appFullTokenId,int32_t appUid,AudioPermissionState state)1201 bool AudioPolicyManager::CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
1202     AudioPermissionState state)
1203 {
1204     AUDIO_ERR_LOG("Not supported operation");
1205     return false;
1206 }
1207 
ReconfigureAudioChannel(const uint32_t & count,DeviceType deviceType)1208 int32_t AudioPolicyManager::ReconfigureAudioChannel(const uint32_t &count, DeviceType deviceType)
1209 {
1210     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1211     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1212     return gsp->ReconfigureAudioChannel(count, deviceType);
1213 }
1214 
GetAudioLatencyFromXml()1215 int32_t AudioPolicyManager::GetAudioLatencyFromXml()
1216 {
1217     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1218     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1219     return gsp->GetAudioLatencyFromXml();
1220 }
1221 
GetSinkLatencyFromXml()1222 uint32_t AudioPolicyManager::GetSinkLatencyFromXml()
1223 {
1224     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1225     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
1226     return gsp->GetSinkLatencyFromXml();
1227 }
1228 
GetPreferredOutputStreamType(AudioRendererInfo & rendererInfo)1229 int32_t AudioPolicyManager::GetPreferredOutputStreamType(AudioRendererInfo &rendererInfo)
1230 {
1231     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1232     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1233     return gsp->GetPreferredOutputStreamType(rendererInfo);
1234 }
1235 
GetPreferredInputStreamType(AudioCapturerInfo & capturerInfo)1236 int32_t AudioPolicyManager::GetPreferredInputStreamType(AudioCapturerInfo &capturerInfo)
1237 {
1238     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1239     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1240     return gsp->GetPreferredInputStreamType(capturerInfo);
1241 }
1242 
GetCurrentRendererChangeInfos(vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1243 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1244     vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1245 {
1246     AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1247     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1248     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1249     return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1250 }
1251 
GetCurrentCapturerChangeInfos(vector<unique_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1252 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1253     vector<unique_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1254 {
1255     AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1256     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1257     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1258     return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1259 }
1260 
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,StreamUsage streamUsage)1261 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1262     StreamSetState streamSetState, StreamUsage streamUsage)
1263 {
1264     AUDIO_DEBUG_LOG("UpdateStreamState");
1265     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1266     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1267     return  gsp->UpdateStreamState(clientUid, streamSetState, streamUsage);
1268 }
1269 
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1270 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1271 {
1272     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1273     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1274     return gsp->GetVolumeGroupInfos(networkId, infos);
1275 }
1276 
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1277 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1278 {
1279     AudioXCollie audioXCollie("AudioPolicyManager::GetNetworkIdByGroupId", TIME_OUT_SECONDS);
1280     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1281     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1282     return gsp->GetNetworkIdByGroupId(groupId, networkId);
1283 }
1284 
IsAudioRendererLowLatencySupported(const AudioStreamInfo & audioStreamInfo)1285 bool AudioPolicyManager::IsAudioRendererLowLatencySupported(const AudioStreamInfo &audioStreamInfo)
1286 {
1287     AUDIO_DEBUG_LOG("IsAudioRendererLowLatencySupported");
1288     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1289     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1290     return gsp->IsAudioRendererLowLatencySupported(audioStreamInfo);
1291 }
1292 
SetSystemSoundUri(const std::string & key,const std::string & uri)1293 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1294 {
1295     AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1296     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1297     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1298 
1299     return gsp->SetSystemSoundUri(key, uri);
1300 }
1301 
GetSystemSoundUri(const std::string & key)1302 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1303 {
1304     AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1305     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1306     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
1307 
1308     return gsp->GetSystemSoundUri(key);
1309 }
1310 
GetMinStreamVolume()1311 float AudioPolicyManager::GetMinStreamVolume()
1312 {
1313     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1314     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1315     return gsp->GetMinStreamVolume();
1316 }
1317 
GetMaxStreamVolume()1318 float AudioPolicyManager::GetMaxStreamVolume()
1319 {
1320     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1321     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1322     return gsp->GetMaxStreamVolume();
1323 }
1324 
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1325 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1326     const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1327 {
1328     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1329     if (rendererCBMap_.count(clientPid)) {
1330         rendererCBMap_.erase(clientPid);
1331     }
1332     rendererCBMap_[clientPid] = callback;
1333     return SUCCESS;
1334 }
1335 
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1336 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1337 {
1338     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1339     AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
1340     rendererCBMap_.erase(getpid());
1341     return SUCCESS;
1342 }
1343 
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1344 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
1345     const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1346 {
1347     std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1348     AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
1349     audioStreamCBMap_.emplace_back(callback);
1350 
1351     return SUCCESS;
1352 }
1353 
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1354 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
1355     const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1356 {
1357     std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1358     AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
1359 
1360     audioStreamCBMap_.erase(std::remove_if(audioStreamCBMap_.begin(), audioStreamCBMap_.end(),
1361         [&callback] (const weak_ptr<AudioStreamPolicyServiceDiedCallback> &cb) {
1362             auto sharedCb = cb.lock();
1363             if (sharedCb == callback || sharedCb == nullptr) {
1364                 return true;
1365             }
1366             return false;
1367         }), audioStreamCBMap_.end());
1368 
1369     return SUCCESS;
1370 }
1371 
CheckMaxRendererInstances()1372 int32_t AudioPolicyManager::CheckMaxRendererInstances()
1373 {
1374     AUDIO_DEBUG_LOG("AudioPolicyManager::CheckMaxRendererInstances");
1375     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1376     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1377 
1378     return gsp->CheckMaxRendererInstances();
1379 }
1380 
IsVolumeUnadjustable()1381 bool AudioPolicyManager::IsVolumeUnadjustable()
1382 {
1383     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1384     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1385     return gsp->IsVolumeUnadjustable();
1386 }
1387 
AdjustVolumeByStep(VolumeAdjustType adjustType)1388 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
1389 {
1390     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1391     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1392     return gsp->AdjustVolumeByStep(adjustType);
1393 }
1394 
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1395 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1396 {
1397     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1398     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1399     return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1400 }
1401 
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1402 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1403 {
1404     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1405     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1406     return gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType);
1407 }
1408 
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1409 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1410 {
1411     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1412     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1413     int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1414     return error;
1415 }
1416 
SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig & config,uint32_t appTokenId)1417 int32_t AudioPolicyManager::SetPlaybackCapturerFilterInfos(const AudioPlaybackCaptureConfig &config,
1418     uint32_t appTokenId)
1419 {
1420     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1421     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1422 
1423     return gsp->SetPlaybackCapturerFilterInfos(config, appTokenId);
1424 }
1425 
SetCaptureSilentState(bool state)1426 int32_t AudioPolicyManager::SetCaptureSilentState(bool state)
1427 {
1428     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1429     if (gsp == nullptr) {
1430         AUDIO_ERR_LOG("SetCaptureSilentState: audio policy manager proxy is NULL");
1431         return ERROR;
1432     }
1433 
1434     return gsp->SetCaptureSilentState(state);
1435 }
1436 
GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> & desc)1437 int32_t AudioPolicyManager::GetHardwareOutputSamplingRate(const sptr<AudioDeviceDescriptor> &desc)
1438 {
1439     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1440     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1441     return gsp->GetHardwareOutputSamplingRate(desc);
1442 }
1443 
GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)1444 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)
1445 {
1446     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1447     if (gsp == nullptr) {
1448         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1449         std::vector<sptr<MicrophoneDescriptor>> descs;
1450         return descs;
1451     }
1452     return gsp->GetAudioCapturerMicrophoneDescriptors(sessionID);
1453 }
1454 
GetAvailableMicrophones()1455 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAvailableMicrophones()
1456 {
1457     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1458     if (gsp == nullptr) {
1459         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1460         std::vector<sptr<MicrophoneDescriptor>> descs;
1461         return descs;
1462     }
1463     return gsp->GetAvailableMicrophones();
1464 }
1465 
SetDeviceAbsVolumeSupported(const std::string & macAddress,const bool support)1466 int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support)
1467 {
1468     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1469     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1470     return gsp->SetDeviceAbsVolumeSupported(macAddress, support);
1471 }
1472 
IsAbsVolumeScene()1473 bool AudioPolicyManager::IsAbsVolumeScene()
1474 {
1475     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1476     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1477     return gsp->IsAbsVolumeScene();
1478 }
1479 
IsVgsVolumeSupported()1480 bool AudioPolicyManager::IsVgsVolumeSupported()
1481 {
1482     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1483     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1484     return gsp->IsVgsVolumeSupported();
1485 }
1486 
SetA2dpDeviceVolume(const std::string & macAddress,const int32_t volume,const bool updateUi)1487 int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume,
1488     const bool updateUi)
1489 {
1490     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1491     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1492     return gsp->SetA2dpDeviceVolume(macAddress, volume, updateUi);
1493 }
1494 
GetAvailableDevices(AudioDeviceUsage usage)1495 std::vector<std::unique_ptr<AudioDeviceDescriptor>> AudioPolicyManager::GetAvailableDevices(AudioDeviceUsage usage)
1496 {
1497     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1498     if (gsp == nullptr) {
1499         AUDIO_ERR_LOG("GetAvailableMicrophones: audio policy manager proxy is NULL.");
1500         std::vector<unique_ptr<AudioDeviceDescriptor>> descs;
1501         return descs;
1502     }
1503     return gsp->GetAvailableDevices(usage);
1504 }
1505 
SetAvailableDeviceChangeCallback(const int32_t clientId,const AudioDeviceUsage usage,const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback> & callback)1506 int32_t AudioPolicyManager::SetAvailableDeviceChangeCallback(const int32_t clientId, const AudioDeviceUsage usage,
1507     const std::shared_ptr<AudioManagerAvailableDeviceChangeCallback>& callback)
1508 {
1509     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1510     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1511     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1512 
1513     auto deviceChangeCbStub = new(std::nothrow) AudioPolicyManagerListenerStub();
1514     CHECK_AND_RETURN_RET_LOG(deviceChangeCbStub != nullptr, ERROR, "object null");
1515 
1516     deviceChangeCbStub->SetAvailableDeviceChangeCallback(callback);
1517 
1518     sptr<IRemoteObject> object = deviceChangeCbStub->AsObject();
1519     if (object == nullptr) {
1520         AUDIO_ERR_LOG("listenerStub->AsObject is nullptr..");
1521         delete deviceChangeCbStub;
1522         return ERROR;
1523     }
1524 
1525     return gsp->SetAvailableDeviceChangeCallback(clientId, usage, object);
1526 }
1527 
UnsetAvailableDeviceChangeCallback(const int32_t clientId,AudioDeviceUsage usage)1528 int32_t AudioPolicyManager::UnsetAvailableDeviceChangeCallback(const int32_t clientId, AudioDeviceUsage usage)
1529 {
1530     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1531     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1532     return gsp->UnsetAvailableDeviceChangeCallback(clientId, usage);
1533 }
1534 
ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor,CastType type)1535 int32_t AudioPolicyManager::ConfigDistributedRoutingRole(sptr<AudioDeviceDescriptor> descriptor, CastType type)
1536 {
1537     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1538     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1539     return gsp->ConfigDistributedRoutingRole(descriptor, type);
1540 }
1541 
SetDistributedRoutingRoleCallback(const std::shared_ptr<AudioDistributedRoutingRoleCallback> & callback)1542 int32_t AudioPolicyManager::SetDistributedRoutingRoleCallback(
1543     const std::shared_ptr<AudioDistributedRoutingRoleCallback> &callback)
1544 {
1545     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1546     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1547     if (callback == nullptr) {
1548         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: callback is nullptr");
1549         return ERR_INVALID_PARAM;
1550     }
1551 
1552     std::unique_lock<std::mutex> lock(listenerStubMutex_);
1553     auto activeDistributedRoutingRoleCb = new(std::nothrow) AudioRoutingManagerListenerStub();
1554     if (activeDistributedRoutingRoleCb == nullptr) {
1555         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: object is nullptr");
1556         return ERROR;
1557     }
1558     activeDistributedRoutingRoleCb->SetDistributedRoutingRoleCallback(callback);
1559     sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
1560     if (object == nullptr) {
1561         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: listenerStub is nullptr.");
1562         delete activeDistributedRoutingRoleCb;
1563         return ERROR;
1564     }
1565     return gsp->SetDistributedRoutingRoleCallback(object);
1566 }
1567 
UnsetDistributedRoutingRoleCallback()1568 int32_t AudioPolicyManager::UnsetDistributedRoutingRoleCallback()
1569 {
1570     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1571     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1572     return gsp->UnsetDistributedRoutingRoleCallback();
1573 }
1574 
IsSpatializationEnabled()1575 bool AudioPolicyManager::IsSpatializationEnabled()
1576 {
1577     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1578     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1579     return gsp->IsSpatializationEnabled();
1580 }
1581 
IsSpatializationEnabled(const std::string address)1582 bool AudioPolicyManager::IsSpatializationEnabled(const std::string address)
1583 {
1584     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1585     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1586     return gsp->IsSpatializationEnabled(address);
1587 }
1588 
SetSpatializationEnabled(const bool enable)1589 int32_t AudioPolicyManager::SetSpatializationEnabled(const bool enable)
1590 {
1591     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1592     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1593     return gsp->SetSpatializationEnabled(enable);
1594 }
1595 
SetSpatializationEnabled(const sptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1596 int32_t AudioPolicyManager::SetSpatializationEnabled(const sptr<AudioDeviceDescriptor> &selectedAudioDevice,
1597     const bool enable)
1598 {
1599     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1600     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1601     return gsp->SetSpatializationEnabled(selectedAudioDevice, enable);
1602 }
1603 
IsHeadTrackingEnabled()1604 bool AudioPolicyManager::IsHeadTrackingEnabled()
1605 {
1606     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1607     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1608     return gsp->IsHeadTrackingEnabled();
1609 }
1610 
IsHeadTrackingEnabled(const std::string address)1611 bool AudioPolicyManager::IsHeadTrackingEnabled(const std::string address)
1612 {
1613     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1614     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1615     return gsp->IsHeadTrackingEnabled(address);
1616 }
1617 
SetHeadTrackingEnabled(const bool enable)1618 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const bool enable)
1619 {
1620     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1621     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1622     return gsp->SetHeadTrackingEnabled(enable);
1623 }
1624 
SetHeadTrackingEnabled(const sptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1625 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const sptr<AudioDeviceDescriptor> &selectedAudioDevice,
1626     const bool enable)
1627 {
1628     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1629     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1630     return gsp->SetHeadTrackingEnabled(selectedAudioDevice, enable);
1631 }
1632 
RegisterSpatializationEnabledEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeCallback> & callback)1633 int32_t AudioPolicyManager::RegisterSpatializationEnabledEventListener(
1634     const std::shared_ptr<AudioSpatializationEnabledChangeCallback> &callback)
1635 {
1636     AUDIO_DEBUG_LOG("Start to register");
1637     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1638 
1639     if (!isAudioPolicyClientRegisted_) {
1640         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1641         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1642         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1643         if (ret != SUCCESS) {
1644             return ret;
1645         }
1646     }
1647 
1648     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
1649     if (audioPolicyClientStubCB_ != nullptr) {
1650         audioPolicyClientStubCB_->AddSpatializationEnabledChangeCallback(callback);
1651         size_t callbackSize = audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize();
1652         if (callbackSize == 1) {
1653             callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = true;
1654             SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, true);
1655         }
1656     }
1657     return SUCCESS;
1658 }
1659 
RegisterHeadTrackingEnabledEventListener(const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> & callback)1660 int32_t AudioPolicyManager::RegisterHeadTrackingEnabledEventListener(
1661     const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> &callback)
1662 {
1663     AUDIO_DEBUG_LOG("Start to register");
1664     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1665 
1666     if (!isAudioPolicyClientRegisted_) {
1667         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1668         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1669         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1670         if (ret != SUCCESS) {
1671             return ret;
1672         }
1673     }
1674 
1675     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
1676     if (audioPolicyClientStubCB_ != nullptr) {
1677         audioPolicyClientStubCB_->AddHeadTrackingEnabledChangeCallback(callback);
1678         size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize();
1679         if (callbackSize == 1) {
1680             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = true;
1681             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, true);
1682         }
1683     }
1684     return SUCCESS;
1685 }
1686 
UnregisterSpatializationEnabledEventListener()1687 int32_t AudioPolicyManager::UnregisterSpatializationEnabledEventListener()
1688 {
1689     AUDIO_DEBUG_LOG("Start to unregister");
1690     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
1691     if (audioPolicyClientStubCB_ != nullptr) {
1692         audioPolicyClientStubCB_->RemoveSpatializationEnabledChangeCallback();
1693         if (audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize() == 0) {
1694             callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = false;
1695             SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, false);
1696         }
1697     }
1698     return SUCCESS;
1699 }
1700 
UnregisterHeadTrackingEnabledEventListener()1701 int32_t AudioPolicyManager::UnregisterHeadTrackingEnabledEventListener()
1702 {
1703     AUDIO_DEBUG_LOG("Start to unregister");
1704     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
1705     if (audioPolicyClientStubCB_ != nullptr) {
1706         audioPolicyClientStubCB_->RemoveHeadTrackingEnabledChangeCallback();
1707         if (audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize() == 0) {
1708             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = false;
1709             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, false);
1710         }
1711     }
1712     return SUCCESS;
1713 }
1714 
GetSpatializationState(const StreamUsage streamUsage)1715 AudioSpatializationState AudioPolicyManager::GetSpatializationState(const StreamUsage streamUsage)
1716 {
1717     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1718     if (gsp == nullptr) {
1719         AUDIO_ERR_LOG("GetSpatializationState: audio policy manager proxy is NULL.");
1720         AudioSpatializationState spatializationState = {false, false};
1721         return spatializationState;
1722     }
1723     return gsp->GetSpatializationState(streamUsage);
1724 }
1725 
IsSpatializationSupported()1726 bool AudioPolicyManager::IsSpatializationSupported()
1727 {
1728     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1729     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1730     return gsp->IsSpatializationSupported();
1731 }
1732 
IsSpatializationSupportedForDevice(const std::string address)1733 bool AudioPolicyManager::IsSpatializationSupportedForDevice(const std::string address)
1734 {
1735     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1736     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1737     return gsp->IsSpatializationSupportedForDevice(address);
1738 }
1739 
IsHeadTrackingSupported()1740 bool AudioPolicyManager::IsHeadTrackingSupported()
1741 {
1742     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1743     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1744     return gsp->IsHeadTrackingSupported();
1745 }
1746 
IsHeadTrackingSupportedForDevice(const std::string address)1747 bool AudioPolicyManager::IsHeadTrackingSupportedForDevice(const std::string address)
1748 {
1749     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1750     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1751     return gsp->IsHeadTrackingSupportedForDevice(address);
1752 }
1753 
UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)1754 int32_t AudioPolicyManager::UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)
1755 {
1756     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1757     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1758     return gsp->UpdateSpatialDeviceState(audioSpatialDeviceState);
1759 }
1760 
RegisterSpatializationStateEventListener(const uint32_t sessionID,const StreamUsage streamUsage,const std::shared_ptr<AudioSpatializationStateChangeCallback> & callback)1761 int32_t AudioPolicyManager::RegisterSpatializationStateEventListener(const uint32_t sessionID,
1762     const StreamUsage streamUsage, const std::shared_ptr<AudioSpatializationStateChangeCallback> &callback)
1763 {
1764     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1765     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1766 
1767     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization state callback is nullptr");
1768 
1769     sptr<AudioSpatializationStateChangeListenerStub> spatializationStateChangeListenerStub =
1770         new(std::nothrow) AudioSpatializationStateChangeListenerStub();
1771     CHECK_AND_RETURN_RET_LOG(spatializationStateChangeListenerStub != nullptr, ERROR, "object null");
1772 
1773     spatializationStateChangeListenerStub->SetCallback(callback);
1774 
1775     sptr<IRemoteObject> object = spatializationStateChangeListenerStub->AsObject();
1776     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "IPC object creation failed");
1777 
1778     return gsp->RegisterSpatializationStateEventListener(sessionID, streamUsage, object);
1779 }
1780 
UnregisterSpatializationStateEventListener(const uint32_t sessionID)1781 int32_t AudioPolicyManager::UnregisterSpatializationStateEventListener(const uint32_t sessionID)
1782 {
1783     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1784     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1785 
1786     return gsp->UnregisterSpatializationStateEventListener(sessionID);
1787 }
1788 
CreateAudioInterruptZone(const std::set<int32_t> & pids,const int32_t zoneID)1789 int32_t AudioPolicyManager::CreateAudioInterruptZone(const std::set<int32_t> &pids, const int32_t zoneID)
1790 {
1791     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1792     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1793 
1794     return gsp->CreateAudioInterruptZone(pids, zoneID);
1795 }
1796 
AddAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)1797 int32_t AudioPolicyManager::AddAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
1798 {
1799     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1800     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1801 
1802     return gsp->AddAudioInterruptZonePids(pids, zoneID);
1803 }
1804 
RemoveAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)1805 int32_t AudioPolicyManager::RemoveAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
1806 {
1807     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1808     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1809 
1810     return gsp->RemoveAudioInterruptZonePids(pids, zoneID);
1811 }
1812 
ReleaseAudioInterruptZone(const int32_t zoneID)1813 int32_t AudioPolicyManager::ReleaseAudioInterruptZone(const int32_t zoneID)
1814 {
1815     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1816     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1817 
1818     return gsp->ReleaseAudioInterruptZone(zoneID);
1819 }
1820 
SetCallDeviceActive(InternalDeviceType deviceType,bool active,std::string address)1821 int32_t AudioPolicyManager::SetCallDeviceActive(InternalDeviceType deviceType, bool active, std::string address)
1822 {
1823     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1824     if (gsp == nullptr) {
1825         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1826         return -1;
1827     }
1828     return gsp->SetCallDeviceActive(deviceType, active, address);
1829 }
1830 
GetActiveBluetoothDevice()1831 std::unique_ptr<AudioDeviceDescriptor> AudioPolicyManager::GetActiveBluetoothDevice()
1832 {
1833     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1834     if (gsp == nullptr) {
1835         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1836         return make_unique<AudioDeviceDescriptor>();
1837     }
1838     return gsp->GetActiveBluetoothDevice();
1839 }
1840 
NotifyCapturerAdded(AudioCapturerInfo capturerInfo,AudioStreamInfo streamInfo,uint32_t sessionId)1841 int32_t AudioPolicyManager::NotifyCapturerAdded(AudioCapturerInfo capturerInfo, AudioStreamInfo streamInfo,
1842     uint32_t sessionId)
1843 {
1844     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1845     if (gsp == nullptr) {
1846         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1847         return -1;
1848     }
1849     return gsp->NotifyCapturerAdded(capturerInfo, streamInfo, sessionId);
1850 }
1851 
GetConverterConfig()1852 ConverterConfig AudioPolicyManager::GetConverterConfig()
1853 {
1854     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1855     if (gsp == nullptr) {
1856         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1857         return ConverterConfig();
1858     }
1859     return gsp->GetConverterConfig();
1860 }
1861 
IsHighResolutionExist()1862 bool AudioPolicyManager::IsHighResolutionExist()
1863 {
1864     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1865     if (gsp == nullptr) {
1866         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1867         return false;
1868     }
1869     bool gspIsHighResolutionExist = gsp->IsHighResolutionExist();
1870     return gspIsHighResolutionExist;
1871 }
1872 
SetHighResolutionExist(bool highResExist)1873 int32_t AudioPolicyManager::SetHighResolutionExist(bool highResExist)
1874 {
1875     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1876     if (gsp == nullptr) {
1877         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1878         return -1;
1879     }
1880     gsp->SetHighResolutionExist(highResExist);
1881     return SUCCESS;
1882 }
1883 
ActivateAudioSession(const AudioSessionStrategy & strategy)1884 int32_t AudioPolicyManager::ActivateAudioSession(const AudioSessionStrategy &strategy)
1885 {
1886     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1887     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1888     if (!isAudioPolicyClientRegisted_) {
1889         int32_t result = RegisterPolicyCallbackClientFunc(gsp);
1890         if (result != SUCCESS) {
1891             AUDIO_ERR_LOG("Failed to register policy callback clent");
1892             return result;
1893         }
1894     }
1895     return gsp->ActivateAudioSession(strategy);
1896 }
1897 
DeactivateAudioSession()1898 int32_t AudioPolicyManager::DeactivateAudioSession()
1899 {
1900     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1901     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1902     return gsp->DeactivateAudioSession();
1903 }
1904 
IsAudioSessionActivated()1905 bool AudioPolicyManager::IsAudioSessionActivated()
1906 {
1907     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1908     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1909     return gsp->IsAudioSessionActivated();
1910 }
1911 
SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)1912 int32_t AudioPolicyManager::SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
1913 {
1914     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1915     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1916     CHECK_AND_RETURN_RET_LOG(audioSessionCallback != nullptr, ERR_INVALID_PARAM, "audioSessionCallback is nullptr");
1917 
1918     int32_t result = SUCCESS;
1919     if (!isAudioPolicyClientRegisted_) {
1920         result = RegisterPolicyCallbackClientFunc(gsp);
1921         if (result != SUCCESS) {
1922             AUDIO_ERR_LOG("Failed to register policy callback clent");
1923             return result;
1924         }
1925     }
1926     if (audioPolicyClientStubCB_ == nullptr) {
1927         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
1928         return ERROR_ILLEGAL_STATE;
1929     }
1930 
1931     result = audioPolicyClientStubCB_->AddAudioSessionCallback(audioSessionCallback);
1932     if (result != SUCCESS) {
1933         AUDIO_ERR_LOG("Failed to add audio session callback.");
1934         return result;
1935     }
1936 
1937     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
1938     if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 1) {
1939         // Notify audio server that the client has registerd one listener.
1940         callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = true;
1941         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, true);
1942     }
1943     return result;
1944 }
1945 
UnsetAudioSessionCallback()1946 int32_t AudioPolicyManager::UnsetAudioSessionCallback()
1947 {
1948     if (audioPolicyClientStubCB_ == nullptr) {
1949         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
1950         return ERROR_ILLEGAL_STATE;
1951     }
1952 
1953     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback();
1954     if (result != SUCCESS) {
1955         AUDIO_ERR_LOG("Failed to remove all audio session callbacks.");
1956         return result;
1957     }
1958 
1959     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
1960     if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
1961         // Notify audio server that all of the client listeners have been unregisterd.
1962         callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
1963         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
1964     }
1965     return result;
1966 }
1967 
UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)1968 int32_t AudioPolicyManager::UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
1969 {
1970     if (audioPolicyClientStubCB_ == nullptr) {
1971         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
1972         return ERROR_ILLEGAL_STATE;
1973     }
1974     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback(audioSessionCallback);
1975     if (result != SUCCESS) {
1976         AUDIO_ERR_LOG("Failed to remove the audio session callback.");
1977         return result;
1978     }
1979 
1980     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
1981     if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
1982         // Notify audio server that all of the client listeners have been unregisterd.
1983         callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
1984         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
1985     }
1986     return result;
1987 }
1988 
GetSpatializationSceneType()1989 AudioSpatializationSceneType AudioPolicyManager::GetSpatializationSceneType()
1990 {
1991     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1992     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, SPATIALIZATION_SCENE_TYPE_DEFAULT, "audio policy manager proxy is NULL.");
1993     return gsp->GetSpatializationSceneType();
1994 }
1995 
SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)1996 int32_t AudioPolicyManager::SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)
1997 {
1998     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1999     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2000     return gsp->SetSpatializationSceneType(spatializationSceneType);
2001 }
2002 
GetMaxAmplitude(const int32_t deviceId)2003 float AudioPolicyManager::GetMaxAmplitude(const int32_t deviceId)
2004 {
2005     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2006     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2007     return gsp->GetMaxAmplitude(deviceId);
2008 }
2009 
DisableSafeMediaVolume()2010 int32_t AudioPolicyManager::DisableSafeMediaVolume()
2011 {
2012     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2013     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2014     return gsp->DisableSafeMediaVolume();
2015 }
2016 
IsHeadTrackingDataRequested(const std::string & macAddress)2017 bool AudioPolicyManager::IsHeadTrackingDataRequested(const std::string &macAddress)
2018 {
2019     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2020     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2021     return gsp->IsHeadTrackingDataRequested(macAddress);
2022 }
2023 
RegisterHeadTrackingDataRequestedEventListener(const std::string & macAddress,const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> & callback)2024 int32_t AudioPolicyManager::RegisterHeadTrackingDataRequestedEventListener(const std::string &macAddress,
2025     const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> &callback)
2026 {
2027     AUDIO_DEBUG_LOG("Start to register");
2028     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2029 
2030     if (!isAudioPolicyClientRegisted_) {
2031         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2032         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2033         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2034         if (ret != SUCCESS) {
2035             return ret;
2036         }
2037     }
2038 
2039     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2040     if (audioPolicyClientStubCB_ != nullptr) {
2041         audioPolicyClientStubCB_->AddHeadTrackingDataRequestedChangeCallback(macAddress, callback);
2042         size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize();
2043         if (callbackSize == 1) {
2044             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = true;
2045             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, true);
2046         }
2047     }
2048     return SUCCESS;
2049 }
2050 
UnregisterHeadTrackingDataRequestedEventListener(const std::string & macAddress)2051 int32_t AudioPolicyManager::UnregisterHeadTrackingDataRequestedEventListener(const std::string &macAddress)
2052 {
2053     AUDIO_DEBUG_LOG("Start to unregister");
2054     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2055     if (audioPolicyClientStubCB_ != nullptr) {
2056         audioPolicyClientStubCB_->RemoveHeadTrackingDataRequestedChangeCallback(macAddress);
2057         if (audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize() == 0) {
2058             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = false;
2059             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, false);
2060         }
2061     }
2062     return SUCCESS;
2063 }
SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> & callback)2064 int32_t AudioPolicyManager::SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> &callback)
2065 {
2066     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2067     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2068     if (callback == nullptr) {
2069         return ERR_INVALID_PARAM;
2070     };
2071 
2072     std::unique_lock<std::mutex> lock(listenerStubMutex_);
2073     auto activeDistributedRoutingRoleCb = new (std::nothrow) AudioRoutingManagerListenerStub();
2074     if (activeDistributedRoutingRoleCb == nullptr) {
2075         AUDIO_ERR_LOG("object is nullptr");
2076         return ERROR;
2077     }
2078     activeDistributedRoutingRoleCb->SetAudioDeviceRefinerCallback(callback);
2079     sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
2080     if (object == nullptr) {
2081         AUDIO_ERR_LOG("listenerStub is nullptr");
2082         delete activeDistributedRoutingRoleCb;
2083         return ERROR;
2084     }
2085 
2086     return gsp->SetAudioDeviceRefinerCallback(object);
2087 }
2088 
UnsetAudioDeviceRefinerCallback()2089 int32_t AudioPolicyManager::UnsetAudioDeviceRefinerCallback()
2090 {
2091     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2092     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2093     return gsp->UnsetAudioDeviceRefinerCallback();
2094 }
2095 
TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason)2096 int32_t AudioPolicyManager::TriggerFetchDevice(AudioStreamDeviceChangeReasonExt reason)
2097 {
2098     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2099     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2100     return gsp->TriggerFetchDevice(reason);
2101 }
2102 
GetInstance()2103 AudioPolicyManager& AudioPolicyManager::GetInstance()
2104 {
2105     static AudioPolicyManager policyManager;
2106     return policyManager;
2107 }
2108 
MoveToNewPipe(const uint32_t sessionId,const AudioPipeType pipeType)2109 int32_t AudioPolicyManager::MoveToNewPipe(const uint32_t sessionId, const AudioPipeType pipeType)
2110 {
2111     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2112     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2113     return gsp->MoveToNewPipe(sessionId, pipeType);
2114 }
SetAudioConcurrencyCallback(const uint32_t sessionID,const std::shared_ptr<AudioConcurrencyCallback> & callback)2115 int32_t AudioPolicyManager::SetAudioConcurrencyCallback(const uint32_t sessionID,
2116     const std::shared_ptr<AudioConcurrencyCallback> &callback)
2117 {
2118     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2119     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2120     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2121 
2122     sptr<AudioConcurrencyStateListenerStub> listener = new(std::nothrow) AudioConcurrencyStateListenerStub();
2123     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2124     listener->SetConcurrencyCallback(callback);
2125 
2126     sptr<IRemoteObject> object = listener->AsObject();
2127     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2128 
2129     return gsp->SetAudioConcurrencyCallback(sessionID, object);
2130 }
2131 
UnsetAudioConcurrencyCallback(const uint32_t sessionID)2132 int32_t AudioPolicyManager::UnsetAudioConcurrencyCallback(const uint32_t sessionID)
2133 {
2134     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2135     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2136     return gsp->UnsetAudioConcurrencyCallback(sessionID);
2137 }
2138 
ActivateAudioConcurrency(const AudioPipeType & pipeType)2139 int32_t AudioPolicyManager::ActivateAudioConcurrency(const AudioPipeType &pipeType)
2140 {
2141     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2142     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2143     return gsp->ActivateAudioConcurrency(pipeType);
2144 }
2145 
InjectInterruption(const std::string networkId,InterruptEvent & event)2146 int32_t AudioPolicyManager::InjectInterruption(const std::string networkId, InterruptEvent &event)
2147 {
2148     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2149     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2150     return gsp->InjectInterruption(networkId, event);
2151 }
2152 
SetDefaultOutputDevice(const DeviceType deviceType,const uint32_t sessionID,const StreamUsage streamUsage,bool isRunning)2153 int32_t AudioPolicyManager::SetDefaultOutputDevice(const DeviceType deviceType, const uint32_t sessionID,
2154     const StreamUsage streamUsage, bool isRunning)
2155 {
2156     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2157     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2158     return gsp->SetDefaultOutputDevice(deviceType, sessionID, streamUsage, isRunning);
2159 }
2160 
LoadSplitModule(const std::string & splitArgs,const std::string & networkId)2161 int32_t AudioPolicyManager::LoadSplitModule(const std::string &splitArgs, const std::string &networkId)
2162 {
2163     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2164     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2165     return gsp->LoadSplitModule(splitArgs, networkId);
2166 }
2167 
SetVoiceRingtoneMute(bool isMute)2168 int32_t AudioPolicyManager::SetVoiceRingtoneMute(bool isMute)
2169 {
2170     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2171     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2172     return gsp->SetVoiceRingtoneMute(isMute);
2173 }
2174 } // namespace AudioStandard
2175 } // namespace OHOS
2176