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