• 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 #include "audio_spatialization_state_change_listener.h"
31 
32 namespace OHOS {
33 namespace AudioStandard {
34 using namespace std;
35 using namespace std::chrono_literals;
36 
37 static sptr<IAudioPolicy> g_apProxy = nullptr;
38 mutex g_apProxyMutex;
39 constexpr int64_t SLEEP_TIME = 1;
40 constexpr int32_t RETRY_TIMES = 10;
41 const unsigned int TIME_OUT_SECONDS = 10;
42 constexpr auto SLEEP_TIMES_RETYT_FAILED = 1min;
43 std::mutex g_cBMapMutex;
44 std::mutex g_cBDiedMapMutex;
45 std::unordered_map<int32_t, std::weak_ptr<AudioRendererPolicyServiceDiedCallback>> AudioPolicyManager::rendererCBMap_;
46 std::weak_ptr<AudioCapturerPolicyServiceDiedCallback> AudioPolicyManager::capturerCB_;
47 std::vector<std::weak_ptr<AudioStreamPolicyServiceDiedCallback>> AudioPolicyManager::audioStreamCBMap_;
48 std::vector<AudioServerDiedCallBack> AudioPolicyManager::serverDiedCbks_;
49 std::mutex AudioPolicyManager::serverDiedCbkMutex_;
50 std::unordered_map<int32_t, sptr<AudioClientTrackerCallbackService>> AudioPolicyManager::clientTrackerStubMap_;
51 
52 std::weak_ptr<AudioSessionManagerPolicyServiceDiedCallback> AudioPolicyManager::audioSessionManagerCb_;
53 std::mutex AudioPolicyManager::serverDiedSessionManagerCbkMutex_;
54 
RegisterDeathRecipientInner(sptr<IRemoteObject> object)55 static bool RegisterDeathRecipientInner(sptr<IRemoteObject> object)
56 {
57     pid_t pid = 0;
58     pid_t uid = 0;
59     sptr<AudioServerDeathRecipient> deathRecipient = new(std::nothrow) AudioServerDeathRecipient(pid, uid);
60     CHECK_AND_RETURN_RET(deathRecipient != nullptr, false);
61     deathRecipient->SetNotifyCb(
62         [] (pid_t pid, pid_t uid) { AudioPolicyManager::AudioPolicyServerDied(pid, uid); });
63     AUDIO_DEBUG_LOG("Register audio policy server death recipient");
64     CHECK_AND_RETURN_RET_LOG(object->AddDeathRecipient(deathRecipient), false, "AddDeathRecipient failed");
65     return true;
66 }
67 
GetAudioPolicyProxyFromSamgr(bool block=true)68 static sptr<IAudioPolicy> GetAudioPolicyProxyFromSamgr(bool block = true)
69 {
70     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
71     CHECK_AND_RETURN_RET_LOG(samgr != nullptr, nullptr, "samgr init failed.");
72     sptr<IRemoteObject> object = nullptr;
73     if (!block) {
74         object = samgr->CheckSystemAbility(AUDIO_POLICY_SERVICE_ID);
75     } else {
76         object = samgr->GetSystemAbility(AUDIO_POLICY_SERVICE_ID);
77     }
78     CHECK_AND_RETURN_RET_LOG(object != nullptr, nullptr, "Object is NULL.");
79     sptr<IAudioPolicy> apProxy = iface_cast<IAudioPolicy>(object);
80     CHECK_AND_RETURN_RET_LOG(apProxy != nullptr, nullptr, "Init apProxy is NULL.");
81     return apProxy;
82 }
83 
84 // LCOV_EXCL_START
GetAudioPolicyManagerProxy(bool block)85 const sptr<IAudioPolicy> AudioPolicyManager::GetAudioPolicyManagerProxy(bool block)
86 {
87     AUDIO_DEBUG_LOG("In");
88     lock_guard<mutex> lock(g_apProxyMutex);
89 
90     if (g_apProxy != nullptr) {
91         return g_apProxy;
92     }
93 
94     sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr(block);
95     CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
96 
97     AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
98 
99     if (RegisterDeathRecipientInner(gsp->AsObject())) {
100         g_apProxy = gsp;
101     }
102 
103     return gsp;
104 }
105 
RecoverAndGetAudioPolicyManagerProxy()106 static const sptr<IAudioPolicy> RecoverAndGetAudioPolicyManagerProxy()
107 {
108     AUDIO_DEBUG_LOG("In");
109     lock_guard<mutex> lock(g_apProxyMutex);
110     if (g_apProxy != nullptr) {
111         sptr<IRemoteObject> object = g_apProxy->AsObject();
112         if (object != nullptr && !object->IsObjectDead()) {
113             AUDIO_INFO_LOG("direct return g_apProxy");
114             return g_apProxy;
115         }
116     }
117 
118     sptr<IAudioPolicy> gsp = GetAudioPolicyProxyFromSamgr();
119     CHECK_AND_RETURN_RET_LOG(gsp, nullptr, "gsp is null");
120 
121     AUDIO_DEBUG_LOG("Init g_apProxy is assigned.");
122     CHECK_AND_RETURN_RET_LOG(RegisterDeathRecipientInner(gsp->AsObject()), nullptr, "RegisterDeathRecipient failed");
123 
124     g_apProxy = gsp;
125     return gsp;
126 }
127 
RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> & gsp)128 int32_t AudioPolicyManager::RegisterPolicyCallbackClientFunc(const sptr<IAudioPolicy> &gsp)
129 {
130     AudioXCollie audioXCollie("AudioPolicyManager::RegisterPolicyCallbackClientFunc", TIME_OUT_SECONDS,
131          nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG);
132     std::unique_lock<std::mutex> lock(registerCallbackMutex_);
133     if (audioPolicyClientStubCB_ == nullptr) {
134         audioPolicyClientStubCB_ = new(std::nothrow) AudioPolicyClientStubImpl();
135         CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERROR, "audioPolicyClientStubCB_ is nullptr");
136     }
137     sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
138     if (object == nullptr) {
139         AUDIO_ERR_LOG("audioPolicyClientStubCB_->AsObject is nullptr");
140         lock.unlock();
141         return ERROR;
142     }
143     lock.unlock();
144 
145     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "AudioPolicy is nullptr");
146     int32_t ret = gsp->RegisterPolicyCallbackClient(object, 0);
147     if (ret == SUCCESS) {
148         isAudioPolicyClientRegisted_ = true;
149     }
150     return ret;
151 }
152 
RecoverAudioPolicyCallbackClient()153 void AudioPolicyManager::RecoverAudioPolicyCallbackClient()
154 {
155     std::unique_lock<std::mutex> lockRegisterCallbackMutex(registerCallbackMutex_);
156     if (audioPolicyClientStubCB_ == nullptr) {
157         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null.");
158         return;
159     }
160     lockRegisterCallbackMutex.unlock();
161 
162     int32_t retry = RETRY_TIMES;
163     sptr<IAudioPolicy> gsp = nullptr;
164     while (retry--) {
165         // Sleep and wait for 1 second;
166         sleep(SLEEP_TIME);
167         gsp = RecoverAndGetAudioPolicyManagerProxy();
168         if (gsp != nullptr) {
169             AUDIO_INFO_LOG("Reconnect audio policy service success!");
170             break;
171         }
172         if (retry == 0) {
173             AUDIO_WARNING_LOG("Reconnect audio policy service %{public}d times, sleep ", RETRY_TIMES);
174             std::this_thread::sleep_for(SLEEP_TIMES_RETYT_FAILED);
175             retry = RETRY_TIMES;
176         }
177     }
178 
179     CHECK_AND_RETURN_LOG(gsp != nullptr, "Reconnect audio policy service fail!");
180 
181     sptr<IRemoteObject> object = audioPolicyClientStubCB_->AsObject();
182     if (object == nullptr) {
183         AUDIO_ERR_LOG("RegisterPolicyCallbackClientFunc: audioPolicyClientStubCB_->AsObject is nullptr");
184         return;
185     }
186 
187     gsp->RegisterPolicyCallbackClient(object, 0);
188     if (audioPolicyClientStubCB_->HasMicStateChangeCallback()) {
189         AUDIO_INFO_LOG("RecoverAudioPolicyCallbackClient has micStateChangeCallback");
190         gsp->SetClientCallbacksEnable(CALLBACK_MICMUTE_STATE_CHANGE, true);
191     }
192 
193     for (auto enumIndex : CALLBACK_ENUMS) {
194         auto &[mutex, isEnable] = callbackChangeInfos_[enumIndex];
195         std::lock_guard<std::mutex> lock(mutex);
196         if (isEnable) {
197             SetCallbackStreamInfo(enumIndex);
198             gsp->SetClientCallbacksEnable(enumIndex, true);
199         }
200     }
201 
202     std::lock_guard<std::mutex> lock(handleAvailableDeviceChangeCbsMapMutex_);
203     for (auto it = availableDeviceChangeCbsMap_.begin(); it != availableDeviceChangeCbsMap_.end(); ++it) {
204         gsp->SetAvailableDeviceChangeCallback(it->first.first, it->first.second, it->second);
205     }
206 }
207 
SetCallbackStreamInfo(const CallbackChange & callbackChange)208 int32_t AudioPolicyManager::SetCallbackStreamInfo(const CallbackChange &callbackChange)
209 {
210     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
211     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
212 
213     int32_t ret = SUCCESS;
214     if (callbackChange == CALLBACK_PREFERRED_OUTPUT_DEVICE_CHANGE) {
215         for (auto &rendererInfo : rendererInfos_) {
216             ret = gsp->SetCallbackRendererInfo(rendererInfo);
217         }
218     } else if (callbackChange == CALLBACK_PREFERRED_INPUT_DEVICE_CHANGE) {
219         for (auto &capturerInfo : capturerInfos_) {
220             ret = gsp->SetCallbackCapturerInfo(capturerInfo);
221         }
222     }
223     return ret;
224 }
225 
AudioPolicyServerDied(pid_t pid,pid_t uid)226 void AudioPolicyManager::AudioPolicyServerDied(pid_t pid, pid_t uid)
227 {
228     GetInstance().ResetClientTrackerStubMap();
229     if (auto capturerCb = capturerCB_.lock()) {
230         capturerCb->OnAudioPolicyServiceDied();
231     }
232     {
233         std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
234         AUDIO_INFO_LOG("Audio policy server died: reestablish connection");
235         std::shared_ptr<AudioRendererPolicyServiceDiedCallback> cb;
236         for (auto it = rendererCBMap_.begin(); it != rendererCBMap_.end(); ++it) {
237             cb = it->second.lock();
238             if (cb != nullptr) {
239                 cb->OnAudioPolicyServiceDied();
240             }
241         }
242     }
243     {
244         std::lock_guard<std::mutex> lock(g_apProxyMutex);
245         if (g_apProxy != nullptr) {
246             sptr<IRemoteObject> object = g_apProxy->AsObject();
247             if (object == nullptr || object->IsObjectDead()) {
248                 AUDIO_INFO_LOG("assign g_apProxy to nullptr");
249                 g_apProxy = nullptr;
250             }
251         }
252     }
253     GetInstance().RecoverAudioPolicyCallbackClient();
254 
255     {
256         std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
257         if (audioStreamCBMap_.size() != 0) {
258             for (auto it = audioStreamCBMap_.begin(); it != audioStreamCBMap_.end();) {
259                 auto cb = (*it).lock();
260                 if (cb == nullptr) {
261                     it = audioStreamCBMap_.erase(it);
262                     continue;
263                 }
264                 cb->OnAudioPolicyServiceDied();
265                 ++it;
266             }
267         }
268     }
269 
270     {
271         std::lock_guard<std::mutex> lockCbMap(serverDiedCbkMutex_);
272         for (auto func : serverDiedCbks_) {
273             CHECK_AND_CONTINUE(func != nullptr);
274             func();
275         }
276     }
277 
278     AudioSessionManagerCallback();
279 }
280 
RegisterServerDiedCallBack(AudioServerDiedCallBack func)281 void AudioPolicyManager::RegisterServerDiedCallBack(AudioServerDiedCallBack func)
282 {
283     CHECK_AND_RETURN_LOG(func != nullptr, "func is null");
284     std::lock_guard<std::mutex> lockCbMap(serverDiedCbkMutex_);
285     serverDiedCbks_.emplace_back(func);
286 }
287 
GetMaxVolumeLevel(AudioVolumeType volumeType,DeviceType deviceType)288 int32_t AudioPolicyManager::GetMaxVolumeLevel(AudioVolumeType volumeType, DeviceType deviceType)
289 {
290     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
291     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
292 
293     int32_t volumeLevel = -1;
294     gsp->GetMaxVolumeLevel(volumeType, volumeLevel, deviceType);
295     return volumeLevel;
296 }
297 
GetMinVolumeLevel(AudioVolumeType volumeType,DeviceType deviceType)298 int32_t AudioPolicyManager::GetMinVolumeLevel(AudioVolumeType volumeType, DeviceType deviceType)
299 {
300     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
301     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
302 
303     int32_t volumeLevel = -1;
304     gsp->GetMinVolumeLevel(volumeType, volumeLevel, deviceType);
305     return volumeLevel;
306 }
307 
SetSelfAppVolumeLevel(int32_t volumeLevel,int32_t volumeFlag)308 int32_t AudioPolicyManager::SetSelfAppVolumeLevel(int32_t volumeLevel, 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     return gsp->SetSelfAppVolumeLevel(volumeLevel, volumeFlag);
313 }
314 
SetAppVolumeLevel(int32_t appUid,int32_t volumeLevel,int32_t volumeFlag)315 int32_t AudioPolicyManager::SetAppVolumeLevel(int32_t appUid, int32_t volumeLevel, int32_t volumeFlag)
316 {
317     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
318     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
319     return gsp->SetAppVolumeLevel(appUid, volumeLevel, volumeFlag);
320 }
321 
SetAppVolumeMuted(int32_t appUid,bool muted,int32_t volumeFlag)322 int32_t AudioPolicyManager::SetAppVolumeMuted(int32_t appUid, bool muted, int32_t volumeFlag)
323 {
324     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
325     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
326     return gsp->SetAppVolumeMuted(appUid, muted, volumeFlag);
327 }
328 
IsAppVolumeMute(int32_t appUid,bool muted,bool & isMute)329 int32_t AudioPolicyManager::IsAppVolumeMute(int32_t appUid, bool muted, bool &isMute)
330 {
331     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
332     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
333     return gsp->IsAppVolumeMute(appUid, muted, isMute);
334 }
335 
SetAppRingMuted(int32_t appUid,bool muted)336 int32_t AudioPolicyManager::SetAppRingMuted(int32_t appUid, bool muted)
337 {
338     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
339     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
340     return gsp->SetAppRingMuted(appUid, muted);
341 }
342 
SetAdjustVolumeForZone(int32_t zoneId)343 int32_t AudioPolicyManager::SetAdjustVolumeForZone(int32_t zoneId)
344 {
345     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
346     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
347     return gsp->SetAdjustVolumeForZone(zoneId);
348 }
349 
SetSystemVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag,int32_t uid)350 int32_t AudioPolicyManager::SetSystemVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel, bool isLegacy,
351     int32_t volumeFlag, int32_t uid)
352 {
353     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
354     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
355 
356     if (isLegacy) {
357         return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
358     }
359     return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag, uid);
360 }
361 
SetSystemNotificationVolumeLevel(AudioVolumeType volumeType,int32_t volumeLevel,bool isLegacy,int32_t volumeFlag,int32_t uid)362 int32_t AudioPolicyManager::SetSystemNotificationVolumeLevel(AudioVolumeType volumeType, int32_t volumeLevel,
363     bool isLegacy, int32_t volumeFlag, int32_t uid)
364 {
365     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
366     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
367 
368     volumeType = STREAM_RING;
369     if (isLegacy) {
370         return gsp->SetSystemVolumeLevelLegacy(volumeType, volumeLevel);
371     }
372     return gsp->SetSystemVolumeLevel(volumeType, volumeLevel, volumeFlag, uid);
373 }
374 
SetSystemVolumeLevelWithDevice(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType,int32_t volumeFlag)375 int32_t AudioPolicyManager::SetSystemVolumeLevelWithDevice(AudioVolumeType volumeType, int32_t volumeLevel,
376     DeviceType deviceType, int32_t volumeFlag)
377 {
378     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
379     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
380 
381     return gsp->SetSystemVolumeLevelWithDevice(volumeType, volumeLevel, deviceType, volumeFlag);
382 }
383 
SetRingerModeLegacy(AudioRingerMode ringMode)384 int32_t AudioPolicyManager::SetRingerModeLegacy(AudioRingerMode ringMode)
385 {
386     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
387     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
388     return gsp->SetRingerModeLegacy(ringMode);
389 }
390 
SetRingerMode(AudioRingerMode ringMode)391 int32_t AudioPolicyManager::SetRingerMode(AudioRingerMode ringMode)
392 {
393     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
394     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
395     return gsp->SetRingerMode(ringMode);
396 }
397 
GetRingerMode()398 AudioRingerMode AudioPolicyManager::GetRingerMode()
399 {
400     AudioXCollie audioXCollie("AudioPolicyManager::GetRingerMode", TIME_OUT_SECONDS,
401          nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG);
402     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
403     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, RINGER_MODE_NORMAL, "audio policy manager proxy is NULL.");
404 
405     int32_t out = RINGER_MODE_NORMAL;
406     gsp->GetRingerMode(out);
407     return static_cast<AudioRingerMode>(out);
408 }
409 
SetAudioScene(AudioScene scene)410 int32_t AudioPolicyManager::SetAudioScene(AudioScene scene)
411 {
412     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
413     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
414     return gsp->SetAudioScene(scene);
415 }
416 
SetMicrophoneMute(bool isMute)417 int32_t AudioPolicyManager::SetMicrophoneMute(bool isMute)
418 {
419     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
420     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
421     return gsp->SetMicrophoneMute(isMute);
422 }
423 
SetMicrophoneMuteAudioConfig(bool isMute)424 int32_t AudioPolicyManager::SetMicrophoneMuteAudioConfig(bool isMute)
425 {
426     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
427     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
428     return gsp->SetMicrophoneMuteAudioConfig(isMute);
429 }
430 
SetMicrophoneMutePersistent(const bool isMute,const PolicyType type)431 int32_t AudioPolicyManager::SetMicrophoneMutePersistent(const bool isMute, const PolicyType type)
432 {
433     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
434     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
435     return gsp->SetMicrophoneMutePersistent(isMute, type);
436 }
437 
GetPersistentMicMuteState()438 bool AudioPolicyManager::GetPersistentMicMuteState()
439 {
440     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
441     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
442 
443     bool mute = true;
444     gsp->GetPersistentMicMuteState(mute);
445     return mute;
446 }
447 
IsMicrophoneMuteLegacy()448 bool AudioPolicyManager::IsMicrophoneMuteLegacy()
449 {
450     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
451     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
452     if (!isAudioPolicyClientRegisted_) {
453         RegisterPolicyCallbackClientFunc(gsp);
454     }
455 
456     bool mute = true;
457     gsp->IsMicrophoneMuteLegacy(mute);
458     return mute;
459 }
460 
IsMicrophoneMute()461 bool AudioPolicyManager::IsMicrophoneMute()
462 {
463     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
464     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
465     if (!isAudioPolicyClientRegisted_) {
466         RegisterPolicyCallbackClientFunc(gsp);
467     }
468 
469     bool mute = true;
470     gsp->IsMicrophoneMute(mute);
471     return mute;
472 }
473 
GetAudioScene()474 AudioScene AudioPolicyManager::GetAudioScene()
475 {
476     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
477     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_SCENE_DEFAULT, "audio policy manager proxy is NULL.");
478     int32_t scene = AUDIO_SCENE_DEFAULT;
479     gsp->GetAudioScene(scene);
480     return static_cast<AudioScene>(scene);
481 }
482 
GetSystemActiveVolumeType(const int32_t clientUid)483 AudioStreamType AudioPolicyManager::GetSystemActiveVolumeType(const int32_t clientUid)
484 {
485     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
486     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
487     int32_t streamType = STREAM_DEFAULT;
488     gsp->GetSystemActiveVolumeType(clientUid, streamType);
489     return static_cast<AudioStreamType>(streamType);
490 }
491 
GetSelfAppVolumeLevel(int32_t & volumeLevel)492 int32_t AudioPolicyManager::GetSelfAppVolumeLevel(int32_t &volumeLevel)
493 {
494     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
495     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
496     return gsp->GetSelfAppVolumeLevel(volumeLevel);
497 }
498 
GetAppVolumeLevel(int32_t appUid,int32_t & volumeLevel)499 int32_t AudioPolicyManager::GetAppVolumeLevel(int32_t appUid, int32_t &volumeLevel)
500 {
501     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
502     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
503     return gsp->GetAppVolumeLevel(appUid, volumeLevel);
504 }
505 
GetSystemVolumeLevel(AudioVolumeType volumeType,int32_t uid)506 int32_t AudioPolicyManager::GetSystemVolumeLevel(AudioVolumeType volumeType, int32_t uid)
507 {
508     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
509     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
510 
511     int32_t volumeLevel = -1;
512     gsp->GetSystemVolumeLevel(volumeType, uid, volumeLevel);
513     return volumeLevel;
514 }
515 
GetSystemNotificationVolumeLevel(AudioVolumeType volumeType,int32_t uid)516 int32_t AudioPolicyManager::GetSystemNotificationVolumeLevel(AudioVolumeType volumeType, int32_t uid)
517 {
518     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
519     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
520 
521     volumeType = STREAM_RING;
522     int32_t volumeLevel = -1;
523     gsp->GetSystemVolumeLevel(volumeType, uid, volumeLevel);
524     return volumeLevel;
525 }
526 
SetStreamMute(AudioVolumeType volumeType,bool mute,bool isLegacy,const DeviceType & deviceType)527 int32_t AudioPolicyManager::SetStreamMute(AudioVolumeType volumeType, bool mute, bool isLegacy,
528     const DeviceType &deviceType)
529 {
530     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
531     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
532     if (isLegacy) {
533         return gsp->SetStreamMuteLegacy(volumeType, mute, deviceType);
534     }
535     return gsp->SetStreamMute(volumeType, mute, deviceType);
536 }
537 
GetStreamMute(AudioVolumeType volumeType)538 bool AudioPolicyManager::GetStreamMute(AudioVolumeType volumeType)
539 {
540     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
541     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
542 
543     bool mute = false;
544     gsp->GetStreamMute(volumeType, mute);
545     return mute;
546 }
547 
SetLowPowerVolume(int32_t streamId,float volume)548 int32_t AudioPolicyManager::SetLowPowerVolume(int32_t streamId, float volume)
549 {
550     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
551     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
552     return gsp->SetLowPowerVolume(streamId, volume);
553 }
554 
GetLowPowerVolume(int32_t streamId)555 float AudioPolicyManager::GetLowPowerVolume(int32_t streamId)
556 {
557     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
558     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
559 
560     float outVolume = -1;
561     gsp->GetLowPowerVolume(streamId, outVolume);
562     return outVolume;
563 }
564 
GetFastStreamInfo()565 AudioStreamInfo AudioPolicyManager::GetFastStreamInfo()
566 {
567     AudioStreamInfo streamInfo = {SAMPLE_RATE_48000, ENCODING_PCM, SAMPLE_S16LE, STEREO};
568     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
569     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, streamInfo, "audio policy manager proxy is NULL.");
570     gsp->GetFastStreamInfo(streamInfo);
571     return streamInfo;
572 }
573 
GetSingleStreamVolume(int32_t streamId)574 float AudioPolicyManager::GetSingleStreamVolume(int32_t streamId)
575 {
576     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
577     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
578 
579     float outVolume = -1;
580     gsp->GetSingleStreamVolume(streamId, outVolume);
581     return outVolume;
582 }
583 
IsStreamActive(AudioVolumeType volumeType)584 bool AudioPolicyManager::IsStreamActive(AudioVolumeType volumeType)
585 {
586     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
587     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
588 
589     bool active = false;
590     gsp->IsStreamActive(volumeType, active);
591     return active;
592 }
593 
IsStreamActiveByStreamUsage(StreamUsage streamUsage)594 bool AudioPolicyManager::IsStreamActiveByStreamUsage(StreamUsage streamUsage)
595 {
596     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
597     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
598     bool active = false;
599     gsp->IsStreamActiveByStreamUsage(streamUsage, active);
600     return active;
601 }
602 
IsFastPlaybackSupported(AudioStreamInfo & streamInfo,StreamUsage usage)603 bool AudioPolicyManager::IsFastPlaybackSupported(AudioStreamInfo &streamInfo, StreamUsage usage)
604 {
605     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
606     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
607 
608     bool support = false;
609     gsp->IsFastPlaybackSupported(streamInfo, static_cast<int32_t>(usage), support);
610     return support;
611 }
612 
IsFastRecordingSupported(AudioStreamInfo & streamInfo,SourceType source)613 bool AudioPolicyManager::IsFastRecordingSupported(AudioStreamInfo &streamInfo, SourceType source)
614 {
615     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
616     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
617 
618     bool support = false;
619     gsp->IsFastRecordingSupported(streamInfo, static_cast<int32_t>(source), support);
620     return support;
621 }
622 
GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt,AudioFocuState>> & focusInfoList,const int32_t zoneID)623 int32_t AudioPolicyManager::GetAudioFocusInfoList(std::list<std::pair<AudioInterrupt, AudioFocuState>> &focusInfoList,
624     const int32_t zoneID)
625 {
626     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
627     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
628     auto ipcInterrupts = ToIpcInterrupts(focusInfoList);
629     int32_t ret = gsp->GetAudioFocusInfoList(ipcInterrupts, zoneID);
630     focusInfoList = FromIpcInterrupts(ipcInterrupts);
631     return ret;
632 }
633 
SetClientCallbacksEnable(const CallbackChange & callbackchange,const bool & enable,bool block)634 int32_t AudioPolicyManager::SetClientCallbacksEnable(const CallbackChange &callbackchange,
635     const bool &enable, bool block)
636 {
637     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy(block);
638     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
639     return gsp->SetClientCallbacksEnable(callbackchange, enable);
640 }
641 
SetCallbackRendererInfo(const AudioRendererInfo & rendererInfo)642 int32_t AudioPolicyManager::SetCallbackRendererInfo(const AudioRendererInfo &rendererInfo)
643 {
644     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
645     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
646     return gsp->SetCallbackRendererInfo(rendererInfo);
647 }
648 
SetCallbackCapturerInfo(const AudioCapturerInfo & capturerInfo)649 int32_t AudioPolicyManager::SetCallbackCapturerInfo(const AudioCapturerInfo &capturerInfo)
650 {
651     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
652     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
653     return gsp->SetCallbackCapturerInfo(capturerInfo);
654 }
655 
RegisterFocusInfoChangeCallback(const int32_t clientId,const std::shared_ptr<AudioFocusInfoChangeCallback> & callback)656 int32_t AudioPolicyManager::RegisterFocusInfoChangeCallback(const int32_t clientId,
657     const std::shared_ptr<AudioFocusInfoChangeCallback> &callback)
658 {
659     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterFocusInfoChangeCallback");
660     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
661         "RegisterFocusInfoChangeCallback: callback is nullptr");
662 
663     if (!isAudioPolicyClientRegisted_) {
664         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
665         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
666         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
667         if (ret != SUCCESS) {
668             return ret;
669         }
670     }
671 
672     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
673     audioPolicyClientStubCB_->AddFocusInfoChangeCallback(callback);
674     size_t callbackSize = audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize();
675     if (callbackSize == 1) {
676         callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = true;
677         SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, true);
678     }
679 
680     return SUCCESS;
681 }
682 
UnregisterFocusInfoChangeCallback(const int32_t clientId)683 int32_t AudioPolicyManager::UnregisterFocusInfoChangeCallback(const int32_t clientId)
684 {
685     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterFocusInfoChangeCallback");
686     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].mutex);
687     if (audioPolicyClientStubCB_ != nullptr) {
688         audioPolicyClientStubCB_->RemoveFocusInfoChangeCallback();
689         if (audioPolicyClientStubCB_->GetFocusInfoChangeCallbackSize() == 0) {
690             callbackChangeInfos_[CALLBACK_FOCUS_INFO_CHANGE].isEnable = false;
691             SetClientCallbacksEnable(CALLBACK_FOCUS_INFO_CHANGE, false, false);
692         }
693     }
694     return SUCCESS;
695 }
696 
697 #ifdef FEATURE_DTMF_TONE
GetSupportedTones(const std::string & countryCode)698 std::vector<int32_t> AudioPolicyManager::GetSupportedTones(const std::string &countryCode)
699 {
700     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
701     std::vector<int> lSupportedToneList = {};
702     if (gsp == nullptr) {
703         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
704         return lSupportedToneList;
705     }
706 
707     gsp->GetSupportedTones(countryCode, lSupportedToneList);
708 
709     int32_t lListSize = static_cast<int32_t>(lSupportedToneList.size());
710     CHECK_AND_RETURN_RET_LOG(lListSize >= 0 && lListSize <= static_cast<int32_t>(MAX_SUPPORTED_TONEINFO_SIZE),
711         {}, "supported tone size exceed limits");
712 
713     return lSupportedToneList;
714 }
715 
GetToneConfig(int32_t ltonetype,const std::string & countryCode)716 std::shared_ptr<ToneInfo> AudioPolicyManager::GetToneConfig(int32_t ltonetype, const std::string &countryCode)
717 {
718     AUDIO_DEBUG_LOG("AudioPolicyManager::GetToneConfig");
719     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
720     std::shared_ptr<ToneInfo> config = nullptr;
721     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, nullptr, "audio policy manager proxy is NULL.");
722 
723     gsp->GetToneConfig(ltonetype, countryCode, config);
724     return config;
725 }
726 #endif
727 
SetActiveVolumeTypeCallback(const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> & callback)728 int32_t AudioPolicyManager::SetActiveVolumeTypeCallback(
729     const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> &callback)
730 {
731     AUDIO_DEBUG_LOG("enter set active volume type change callback");
732     if (!PermissionUtil::VerifySystemPermission()) {
733         AUDIO_ERR_LOG("No system permission");
734         return ERR_PERMISSION_DENIED;
735     }
736     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
737     if (!isAudioPolicyClientRegisted_) {
738         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
739         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
740         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
741         if (ret != SUCCESS) {
742             return ret;
743         }
744     }
745 
746     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].mutex);
747     if (audioPolicyClientStubCB_ != nullptr) {
748         audioPolicyClientStubCB_->AddActiveVolumeTypeChangeCallback(callback);
749         size_t callbackSize = audioPolicyClientStubCB_->GetActiveVolumeTypeChangeCallbackSize();
750         if (callbackSize == 1) {
751             callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].isEnable = true;
752             SetClientCallbacksEnable(CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE, true);
753         }
754     }
755     return SUCCESS;
756 }
757 
UnsetActiveVolumeTypeCallback(const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> & callback)758 int32_t AudioPolicyManager::UnsetActiveVolumeTypeCallback(
759     const std::shared_ptr<AudioManagerActiveVolumeTypeChangeCallback> &callback)
760 {
761     AUDIO_DEBUG_LOG("enter unset active volume type change callback");
762     if (!PermissionUtil::VerifySystemPermission()) {
763         AUDIO_ERR_LOG("No system permission");
764         return ERR_PERMISSION_DENIED;
765     }
766     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].mutex);
767     if (audioPolicyClientStubCB_ == nullptr) {
768         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is error");
769         return ERR_NULL_POINTER;
770     }
771     if (callback != nullptr) {
772         AUDIO_DEBUG_LOG("callback is not null");
773         audioPolicyClientStubCB_->RemoveActiveVolumeTypeChangeCallback(callback);
774     } else {
775         AUDIO_DEBUG_LOG("callback is null");
776         audioPolicyClientStubCB_->RemoveAllActiveVolumeTypeChangeCallback();
777     }
778     if (audioPolicyClientStubCB_->GetActiveVolumeTypeChangeCallbackSize() == 0) {
779         AUDIO_DEBUG_LOG("active volumeType change callback list is empty");
780         callbackChangeInfos_[CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE].isEnable = false;
781         SetClientCallbacksEnable(CALLBACK_ACTIVE_VOLUME_TYPE_CHANGE, false);
782     }
783     return SUCCESS;
784 }
785 
SetSelfAppVolumeChangeCallback(const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)786 int32_t AudioPolicyManager::SetSelfAppVolumeChangeCallback(
787     const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
788 {
789     AUDIO_DEBUG_LOG("enter set self volume change callback");
790     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
791     if (!isAudioPolicyClientRegisted_) {
792         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
793         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
794         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
795         if (ret != SUCCESS) {
796             return ret;
797         }
798     }
799 
800     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].mutex);
801     if (audioPolicyClientStubCB_ != nullptr) {
802         audioPolicyClientStubCB_->AddSelfAppVolumeChangeCallback(getuid(), callback);
803         size_t callbackSize = audioPolicyClientStubCB_->GetSelfAppVolumeChangeCallbackSize();
804         if (callbackSize == 1) {
805             callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].isEnable = true;
806             SetClientCallbacksEnable(CALLBACK_SELF_APP_VOLUME_CHANGE, true);
807         }
808     }
809     return SUCCESS;
810 }
811 
UnsetSelfAppVolumeCallback(const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)812 int32_t AudioPolicyManager::UnsetSelfAppVolumeCallback(
813     const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
814 {
815     AUDIO_DEBUG_LOG("enter unset self volume change callback");
816     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].mutex);
817     if (audioPolicyClientStubCB_ == nullptr) {
818         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is error");
819         return ERR_NULL_POINTER;
820     }
821     if (callback != nullptr) {
822         AUDIO_DEBUG_LOG("callback is not null");
823         audioPolicyClientStubCB_->RemoveSelfAppVolumeChangeCallback(getuid(), callback);
824     } else {
825         AUDIO_DEBUG_LOG("callback is null");
826         audioPolicyClientStubCB_->RemoveAllSelfAppVolumeChangeCallback(getuid());
827     }
828     if (audioPolicyClientStubCB_->GetSelfAppVolumeChangeCallbackSize() == 0) {
829         callbackChangeInfos_[CALLBACK_SELF_APP_VOLUME_CHANGE].isEnable = false;
830         SetClientCallbacksEnable(CALLBACK_SELF_APP_VOLUME_CHANGE, false);
831     }
832     return SUCCESS;
833 }
834 
UnsetAppVolumeCallbackForUid(const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)835 int32_t AudioPolicyManager::UnsetAppVolumeCallbackForUid(
836     const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
837 {
838     AUDIO_DEBUG_LOG("enter");
839     if (!PermissionUtil::VerifySystemPermission()) {
840         AUDIO_ERR_LOG("SetAppVolumeChangeCallbackForUid: No system permission");
841         return ERR_PERMISSION_DENIED;
842     }
843     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].mutex);
844     if (audioPolicyClientStubCB_ == nullptr) {
845         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is error");
846         return ERR_NULL_POINTER;
847     }
848     if (callback != nullptr) {
849         audioPolicyClientStubCB_->RemoveAppVolumeChangeForUidCallback(callback);
850     } else {
851         audioPolicyClientStubCB_->RemoveAllAppVolumeChangeForUidCallback();
852     }
853     if (audioPolicyClientStubCB_->GetAppVolumeChangeCallbackForUidSize() == 0) {
854         callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].isEnable = false;
855         SetClientCallbacksEnable(CALLBACK_APP_VOLUME_CHANGE, false);
856     }
857     return SUCCESS;
858 }
859 
SetAppVolumeChangeCallbackForUid(const int32_t appUid,const std::shared_ptr<AudioManagerAppVolumeChangeCallback> & callback)860 int32_t AudioPolicyManager::SetAppVolumeChangeCallbackForUid(const int32_t appUid,
861     const std::shared_ptr<AudioManagerAppVolumeChangeCallback> &callback)
862 {
863     AUDIO_DEBUG_LOG("enter set volume change callback for uid");
864     if (!PermissionUtil::VerifySystemPermission()) {
865         AUDIO_ERR_LOG("SetAppVolumeChangeCallbackForUid: No system permission");
866         return ERR_PERMISSION_DENIED;
867     }
868     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
869 
870     if (!isAudioPolicyClientRegisted_) {
871         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
872         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
873         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
874         if (ret != SUCCESS) {
875             return ret;
876         }
877     }
878 
879     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].mutex);
880     if (audioPolicyClientStubCB_ != nullptr) {
881         audioPolicyClientStubCB_->AddAppVolumeChangeForUidCallback(appUid, callback);
882         size_t callbackSize = audioPolicyClientStubCB_->GetAppVolumeChangeCallbackForUidSize();
883         if (callbackSize == 1) {
884             callbackChangeInfos_[CALLBACK_APP_VOLUME_CHANGE].isEnable = true;
885             SetClientCallbacksEnable(CALLBACK_APP_VOLUME_CHANGE, true);
886         }
887     }
888     return SUCCESS;
889 }
890 
SetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback,API_VERSION api_v)891 int32_t AudioPolicyManager::SetRingerModeCallback(const int32_t clientId,
892     const std::shared_ptr<AudioRingerModeCallback> &callback, API_VERSION api_v)
893 {
894     AUDIO_DEBUG_LOG("AudioPolicyManager::SetRingerModeCallback");
895     if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
896         AUDIO_ERR_LOG("SetRingerModeCallback: No system permission");
897         return ERR_PERMISSION_DENIED;
898     }
899 
900     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
901 
902     if (!isAudioPolicyClientRegisted_) {
903         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
904         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
905         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
906         if (ret != SUCCESS) {
907             return ret;
908         }
909     }
910     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
911     if (audioPolicyClientStubCB_ != nullptr) {
912         audioPolicyClientStubCB_->AddRingerModeCallback(callback);
913         size_t callbackSize = audioPolicyClientStubCB_->GetRingerModeCallbackSize();
914         if (callbackSize == 1) {
915             callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = true;
916             SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, true);
917         }
918     }
919     return SUCCESS;
920 }
921 
UnsetRingerModeCallback(const int32_t clientId)922 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId)
923 {
924     AUDIO_DEBUG_LOG("Remove all ringer mode callbacks");
925     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
926     if (audioPolicyClientStubCB_ != nullptr) {
927         audioPolicyClientStubCB_->RemoveRingerModeCallback();
928         if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
929             callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
930             SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
931         }
932     }
933     return SUCCESS;
934 }
935 
UnsetRingerModeCallback(const int32_t clientId,const std::shared_ptr<AudioRingerModeCallback> & callback)936 int32_t AudioPolicyManager::UnsetRingerModeCallback(const int32_t clientId,
937     const std::shared_ptr<AudioRingerModeCallback> &callback)
938 {
939     AUDIO_DEBUG_LOG("Remove one ringer mode callback");
940     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].mutex);
941     if (audioPolicyClientStubCB_ != nullptr) {
942         audioPolicyClientStubCB_->RemoveRingerModeCallback(callback);
943         if (audioPolicyClientStubCB_->GetRingerModeCallbackSize() == 0) {
944             callbackChangeInfos_[CALLBACK_SET_RINGER_MODE].isEnable = false;
945             SetClientCallbacksEnable(CALLBACK_SET_RINGER_MODE, false);
946         }
947     }
948     return SUCCESS;
949 }
950 
SetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)951 int32_t AudioPolicyManager::SetMicrophoneBlockedCallback(const int32_t clientId,
952     const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
953 {
954     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
955     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
956     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
957         "SetMicrophoneBlockedCallback: callback is nullptr");
958     if (!isAudioPolicyClientRegisted_) {
959         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
960         if (ret != SUCCESS) {
961             return ret;
962         }
963     }
964     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
965     if (audioPolicyClientStubCB_ != nullptr) {
966         audioPolicyClientStubCB_->AddMicrophoneBlockedCallback(clientId, callback);
967         size_t callbackSize = audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize();
968         if (callbackSize == 1) {
969             callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = true;
970             SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, true);
971         }
972     }
973     return SUCCESS;
974 }
975 
UnsetMicrophoneBlockedCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> & callback)976 int32_t AudioPolicyManager::UnsetMicrophoneBlockedCallback(const int32_t clientId,
977     const std::shared_ptr<AudioManagerMicrophoneBlockedCallback> &callback)
978 {
979     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].mutex);
980     if (audioPolicyClientStubCB_ != nullptr) {
981         audioPolicyClientStubCB_->RemoveMicrophoneBlockedCallback(clientId, callback);
982         if (audioPolicyClientStubCB_->GetMicrophoneBlockedCallbackSize() == 0) {
983             callbackChangeInfos_[CALLBACK_SET_MICROPHONE_BLOCKED].isEnable = false;
984             SetClientCallbacksEnable(CALLBACK_SET_MICROPHONE_BLOCKED, false);
985         }
986     }
987     return SUCCESS;
988 }
989 
SetAudioSceneChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerAudioSceneChangedCallback> & callback)990 int32_t AudioPolicyManager::SetAudioSceneChangeCallback(const int32_t clientId,
991     const std::shared_ptr<AudioManagerAudioSceneChangedCallback> &callback)
992 {
993     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
994     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
995     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM,
996         "AudioManagerAudioSceneChangedCallback: callback is nullptr");
997     if (!isAudioPolicyClientRegisted_) {
998         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
999         if (ret != SUCCESS) {
1000             return ret;
1001         }
1002     }
1003     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].mutex);
1004     if (audioPolicyClientStubCB_ != nullptr) {
1005         audioPolicyClientStubCB_->AddAudioSceneChangedCallback(clientId, callback);
1006         size_t callbackSize = audioPolicyClientStubCB_->GetAudioSceneChangedCallbackSize();
1007         if (callbackSize == 1) {
1008             callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].isEnable = true;
1009             SetClientCallbacksEnable(CALLBACK_SET_AUDIO_SCENE_CHANGE, true);
1010         }
1011     }
1012     return SUCCESS;
1013 }
1014 
UnsetAudioSceneChangeCallback(const std::shared_ptr<AudioManagerAudioSceneChangedCallback> & callback)1015 int32_t AudioPolicyManager::UnsetAudioSceneChangeCallback(
1016     const std::shared_ptr<AudioManagerAudioSceneChangedCallback> &callback)
1017 {
1018     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].mutex);
1019     if (audioPolicyClientStubCB_ != nullptr) {
1020         audioPolicyClientStubCB_->RemoveAudioSceneChangedCallback(callback);
1021         if (audioPolicyClientStubCB_->GetAudioSceneChangedCallbackSize() == 0) {
1022             callbackChangeInfos_[CALLBACK_SET_AUDIO_SCENE_CHANGE].isEnable = false;
1023             SetClientCallbacksEnable(CALLBACK_SET_AUDIO_SCENE_CHANGE, false);
1024         }
1025     }
1026     return SUCCESS;
1027 }
1028 
SetMicStateChangeCallback(const int32_t clientId,const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)1029 int32_t AudioPolicyManager::SetMicStateChangeCallback(const int32_t clientId,
1030     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
1031 {
1032     AUDIO_DEBUG_LOG("AudioPolicyManager::SetMicStateChangeCallback");
1033     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1034 
1035     if (!isAudioPolicyClientRegisted_) {
1036         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1037         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1038         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1039         if (ret != SUCCESS) {
1040             return ret;
1041         }
1042     }
1043 
1044     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
1045     if (audioPolicyClientStubCB_ != nullptr) {
1046         audioPolicyClientStubCB_->AddMicStateChangeCallback(callback);
1047         size_t callbackSize = audioPolicyClientStubCB_->GetMicStateChangeCallbackSize();
1048         if (callbackSize == 1) {
1049             callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = true;
1050             SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, true);
1051         }
1052     }
1053     return SUCCESS;
1054 }
1055 
UnsetMicStateChangeCallback(const std::shared_ptr<AudioManagerMicStateChangeCallback> & callback)1056 int32_t AudioPolicyManager::UnsetMicStateChangeCallback(
1057     const std::shared_ptr<AudioManagerMicStateChangeCallback> &callback)
1058 {
1059     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1060     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1061     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1062     CHECK_AND_RETURN_RET_LOG(audioPolicyClientStubCB_ != nullptr, ERR_INVALID_OPERATION,
1063         "audioPolicyClientStubCB is nullptr");
1064     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].mutex);
1065     if (audioPolicyClientStubCB_ != nullptr) {
1066         audioPolicyClientStubCB_->RemoveMicStateChangeCallback();
1067         if (audioPolicyClientStubCB_->GetMicStateChangeCallbackSize() == 0) {
1068             callbackChangeInfos_[CALLBACK_SET_MIC_STATE_CHANGE].isEnable = false;
1069             SetClientCallbacksEnable(CALLBACK_SET_MIC_STATE_CHANGE, false);
1070         }
1071     }
1072     return SUCCESS;
1073 }
1074 
SetAudioInterruptCallback(const uint32_t sessionID,const std::shared_ptr<AudioInterruptCallback> & callback,uint32_t clientUid,const int32_t zoneID)1075 int32_t AudioPolicyManager::SetAudioInterruptCallback(const uint32_t sessionID,
1076     const std::shared_ptr<AudioInterruptCallback> &callback, uint32_t clientUid, const int32_t zoneID)
1077 {
1078     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1079     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1080     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1081 
1082     sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1083     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1084     listener->SetInterruptCallback(callback);
1085 
1086     sptr<IRemoteObject> object = listener->AsObject();
1087     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
1088     return gsp->SetAudioInterruptCallback(sessionID, object, clientUid, zoneID);
1089 }
1090 
UnsetAudioInterruptCallback(const uint32_t sessionID,const int32_t zoneID)1091 int32_t AudioPolicyManager::UnsetAudioInterruptCallback(const uint32_t sessionID, const int32_t zoneID)
1092 {
1093     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1094     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1095     return gsp->UnsetAudioInterruptCallback(sessionID, zoneID);
1096 }
1097 
SetAudioRouteCallback(uint32_t sessionId,std::shared_ptr<AudioRouteCallback> callback,uint32_t clientUid)1098 int32_t AudioPolicyManager::SetAudioRouteCallback(uint32_t sessionId, std::shared_ptr<AudioRouteCallback> callback,
1099     uint32_t clientUid)
1100 {
1101     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1102     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1103     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1104 
1105     sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1106     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1107     listener->SetAudioRouteCallback(callback);
1108 
1109     sptr<IRemoteObject> object = listener->AsObject();
1110     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr..");
1111     return gsp->SetAudioRouteCallback(sessionId, object, clientUid);
1112 }
1113 
UnsetAudioRouteCallback(uint32_t sessionId)1114 int32_t AudioPolicyManager::UnsetAudioRouteCallback(uint32_t sessionId)
1115 {
1116     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1117     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1118     return gsp->UnsetAudioRouteCallback(sessionId);
1119 }
1120 
SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> & callback)1121 int32_t AudioPolicyManager::SetQueryClientTypeCallback(const std::shared_ptr<AudioQueryClientTypeCallback> &callback)
1122 {
1123     AUDIO_INFO_LOG("In");
1124     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1125     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1126     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1127 
1128     sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1129     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1130     listener->SetQueryClientTypeCallback(callback);
1131 
1132     sptr<IRemoteObject> object = listener->AsObject();
1133     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
1134 
1135     return gsp->SetQueryClientTypeCallback(object);
1136 }
1137 
SetQueryBundleNameListCallback(const std::shared_ptr<AudioQueryBundleNameListCallback> & callback)1138 int32_t AudioPolicyManager::SetQueryBundleNameListCallback(
1139     const std::shared_ptr<AudioQueryBundleNameListCallback> &callback)
1140 {
1141     AUDIO_INFO_LOG("In");
1142     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1143     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1144     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1145 
1146     sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1147     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
1148     listener->SetQueryBundleNameListCallback(callback);
1149 
1150     sptr<IRemoteObject> object = listener->AsObject();
1151     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
1152 
1153     return gsp->SetQueryBundleNameListCallback(object);
1154 }
1155 
ActivateAudioInterrupt(AudioInterrupt & audioInterrupt,const int32_t zoneID,const bool isUpdatedAudioStrategy)1156 int32_t AudioPolicyManager::ActivateAudioInterrupt(
1157     AudioInterrupt &audioInterrupt, const int32_t zoneID, const bool isUpdatedAudioStrategy)
1158 {
1159     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1160     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1161     return gsp->ActivateAudioInterrupt(audioInterrupt, zoneID, isUpdatedAudioStrategy);
1162 }
1163 
SetAppConcurrencyMode(const int32_t appUid,const int32_t mode)1164 int32_t AudioPolicyManager::SetAppConcurrencyMode(const int32_t appUid, const int32_t mode)
1165 {
1166     AudioConcurrencyMode audioConcurrencyMode = static_cast<AudioConcurrencyMode>(mode);
1167     CHECK_AND_RETURN_RET_LOG((audioConcurrencyMode == AudioConcurrencyMode::DEFAULT ||
1168         audioConcurrencyMode == AudioConcurrencyMode::STANDALONE), -1, "mode is illegal parameters");
1169     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1170     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1171     if (!isAudioPolicyClientRegisted_) {
1172         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1173         if (ret != SUCCESS) {
1174             return ret;
1175         }
1176     }
1177     return gsp->SetAppConcurrencyMode(appUid, mode);
1178 }
1179 
SetAppSlientOnDisplay(const int32_t displayId)1180 int32_t AudioPolicyManager::SetAppSlientOnDisplay(const int32_t displayId)
1181 {
1182     CHECK_AND_RETURN_RET_LOG((displayId > 0 || displayId == -1), -1,
1183         "mode is illegal parameters");
1184     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1185     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1186     if (!isAudioPolicyClientRegisted_) {
1187         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1188         if (ret != SUCCESS) {
1189             return ret;
1190         }
1191     }
1192     return gsp->SetAppSlientOnDisplay(displayId);
1193 }
1194 
DeactivateAudioInterrupt(const AudioInterrupt & audioInterrupt,const int32_t zoneID)1195 int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID)
1196 {
1197     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1198     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1199     return gsp->DeactivateAudioInterrupt(audioInterrupt, zoneID);
1200 }
1201 
ActivatePreemptMode()1202 int32_t AudioPolicyManager::ActivatePreemptMode()
1203 {
1204     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1205     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1206     return gsp->ActivatePreemptMode();
1207 }
1208 
DeactivatePreemptMode()1209 int32_t AudioPolicyManager::DeactivatePreemptMode()
1210 {
1211     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1212     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1213     return gsp->DeactivatePreemptMode();
1214 }
1215 
SetAudioManagerInterruptCallback(const int32_t clientId,const std::shared_ptr<AudioInterruptCallback> & callback)1216 int32_t AudioPolicyManager::SetAudioManagerInterruptCallback(const int32_t clientId,
1217     const std::shared_ptr<AudioInterruptCallback> &callback)
1218 {
1219     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1220     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1221     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1222 
1223     std::unique_lock<std::mutex> lock(listenerStubMutex_);
1224     sptr<AudioPolicyManagerListenerStubImpl> interruptListenerStub =
1225         new(std::nothrow) AudioPolicyManagerListenerStubImpl();
1226     CHECK_AND_RETURN_RET_LOG(interruptListenerStub != nullptr, ERROR, "object null");
1227     interruptListenerStub->SetInterruptCallback(callback);
1228 
1229     sptr<IRemoteObject> object = interruptListenerStub->AsObject();
1230     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "onInterruptListenerStub->AsObject is nullptr.");
1231     lock.unlock();
1232 
1233     return gsp->SetAudioManagerInterruptCallback(clientId, object);
1234 }
1235 
UnsetAudioManagerInterruptCallback(const int32_t clientId)1236 int32_t AudioPolicyManager::UnsetAudioManagerInterruptCallback(const int32_t clientId)
1237 {
1238     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1239     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1240     return gsp->UnsetAudioManagerInterruptCallback(clientId);
1241 }
1242 
CheckVKBInfo(const std::string & bundleName,bool & isValid)1243 int32_t AudioPolicyManager::CheckVKBInfo(const std::string &bundleName, bool &isValid)
1244 {
1245     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1246     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1247     return gsp->CheckVKBInfo(bundleName, isValid);
1248 }
1249 
RequestAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)1250 int32_t AudioPolicyManager::RequestAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
1251 {
1252     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1253     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1254     return gsp->RequestAudioFocus(clientId, audioInterrupt);
1255 }
1256 
AbandonAudioFocus(const int32_t clientId,const AudioInterrupt & audioInterrupt)1257 int32_t AudioPolicyManager::AbandonAudioFocus(const int32_t clientId, const AudioInterrupt &audioInterrupt)
1258 {
1259     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1260     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1261     return gsp->AbandonAudioFocus(clientId, audioInterrupt);
1262 }
1263 
GetStreamInFocus(const int32_t zoneID)1264 AudioStreamType AudioPolicyManager::GetStreamInFocus(const int32_t zoneID)
1265 {
1266     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1267     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
1268     int32_t out = STREAM_DEFAULT;
1269     gsp->GetStreamInFocus(zoneID, out);
1270     return static_cast<AudioStreamType>(out);
1271 }
1272 
GetStreamInFocusByUid(const int32_t uid,const int32_t zoneID)1273 AudioStreamType AudioPolicyManager::GetStreamInFocusByUid(const int32_t uid, const int32_t zoneID)
1274 {
1275     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1276     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, STREAM_DEFAULT, "audio policy manager proxy is NULL.");
1277     int32_t out = STREAM_DEFAULT;
1278     gsp->GetStreamInFocusByUid(uid, zoneID, out);
1279     return static_cast<AudioStreamType>(out);
1280 }
1281 
GetSessionInfoInFocus(AudioInterrupt & audioInterrupt,const int32_t zoneID)1282 int32_t AudioPolicyManager::GetSessionInfoInFocus(AudioInterrupt &audioInterrupt, const int32_t zoneID)
1283 {
1284     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1285     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1286     return gsp->GetSessionInfoInFocus(audioInterrupt, zoneID);
1287 }
1288 
SetVolumeKeyEventCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback,API_VERSION api_v)1289 int32_t AudioPolicyManager::SetVolumeKeyEventCallback(const int32_t clientPid,
1290     const std::shared_ptr<VolumeKeyEventCallback> &callback, API_VERSION api_v)
1291 {
1292     AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
1293     if (api_v == API_8 && !PermissionUtil::VerifySystemPermission()) {
1294         AUDIO_ERR_LOG("SetVolumeKeyEventCallback: No system permission");
1295         return ERR_PERMISSION_DENIED;
1296     }
1297     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
1298 
1299     if (!isAudioPolicyClientRegisted_) {
1300         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1301         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1302         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1303         if (ret != SUCCESS) {
1304             return ret;
1305         }
1306     }
1307 
1308     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
1309     if (audioPolicyClientStubCB_ != nullptr) {
1310         audioPolicyClientStubCB_->AddVolumeKeyEventCallback(callback);
1311         size_t callbackSize = audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize();
1312         if (callbackSize == 1) {
1313             callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = true;
1314             SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, true);
1315         }
1316     }
1317     return SUCCESS;
1318 }
1319 
UnsetVolumeKeyEventCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)1320 int32_t AudioPolicyManager::UnsetVolumeKeyEventCallback(
1321     const std::shared_ptr<VolumeKeyEventCallback> &callback)
1322 {
1323     AUDIO_DEBUG_LOG("UnsetVolumeKeyEventCallback");
1324     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].mutex);
1325     if (audioPolicyClientStubCB_ != nullptr) {
1326         audioPolicyClientStubCB_->RemoveVolumeKeyEventCallback(callback);
1327         if (audioPolicyClientStubCB_->GetVolumeKeyEventCallbackSize() == 0) {
1328             callbackChangeInfos_[CALLBACK_SET_VOLUME_KEY_EVENT].isEnable = false;
1329             SetClientCallbacksEnable(CALLBACK_SET_VOLUME_KEY_EVENT, false, false);
1330         }
1331     }
1332     return SUCCESS;
1333 }
1334 
SetSystemVolumeChangeCallback(const int32_t clientPid,const std::shared_ptr<SystemVolumeChangeCallback> & callback)1335 int32_t AudioPolicyManager::SetSystemVolumeChangeCallback(const int32_t clientPid,
1336     const std::shared_ptr<SystemVolumeChangeCallback> &callback)
1337 {
1338     AUDIO_INFO_LOG("SetSystemVolumeChangeCallback: client: %{public}d", clientPid);
1339     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "systemVolumeChange callback is nullptr");
1340 
1341     if (!isAudioPolicyClientRegisted_) {
1342         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1343         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1344         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1345         if (ret != SUCCESS) {
1346             return ret;
1347         }
1348     }
1349 
1350     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].mutex);
1351     if (audioPolicyClientStubCB_ != nullptr) {
1352         audioPolicyClientStubCB_->AddSystemVolumeChangeCallback(callback);
1353         size_t callbackSize = audioPolicyClientStubCB_->GetSystemVolumeChangeCallbackSize();
1354         if (callbackSize == 1) {
1355             callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].isEnable = true;
1356             SetClientCallbacksEnable(CALLBACK_SYSTEM_VOLUME_CHANGE, true);
1357         }
1358     }
1359     return SUCCESS;
1360 }
1361 
UnsetSystemVolumeChangeCallback(const std::shared_ptr<SystemVolumeChangeCallback> & callback)1362 int32_t AudioPolicyManager::UnsetSystemVolumeChangeCallback
1363     (const std::shared_ptr<SystemVolumeChangeCallback> &callback)
1364 {
1365     AUDIO_DEBUG_LOG("UnsetSystemVolumeChangeCallback");
1366     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].mutex);
1367     if (audioPolicyClientStubCB_ != nullptr) {
1368         audioPolicyClientStubCB_->RemoveSystemVolumeChangeCallback(callback);
1369         if (audioPolicyClientStubCB_->GetSystemVolumeChangeCallbackSize() == 0) {
1370             callbackChangeInfos_[CALLBACK_SYSTEM_VOLUME_CHANGE].isEnable = false;
1371             SetClientCallbacksEnable(CALLBACK_SYSTEM_VOLUME_CHANGE, false);
1372         }
1373     }
1374     return SUCCESS;
1375 }
1376 
RegisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1377 int32_t AudioPolicyManager::RegisterAudioRendererEventListener(
1378     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1379 {
1380     AUDIO_DEBUG_LOG("in");
1381     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "RendererEvent Listener callback is nullptr");
1382 
1383     if (!isAudioPolicyClientRegisted_) {
1384         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1385         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1386         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1387         if (ret != SUCCESS) {
1388             return ret;
1389         }
1390     }
1391 
1392     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1393     audioPolicyClientStubCB_->AddRendererStateChangeCallback(callback);
1394     size_t callbackSize = audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize();
1395     if (callbackSize == 1) {
1396         callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = true;
1397         SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, true);
1398     }
1399     isAudioRendererEventListenerRegistered = true;
1400     return SUCCESS;
1401 }
1402 
UnregisterAudioRendererEventListener(const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> & callbacks)1403 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1404     const std::vector<std::shared_ptr<AudioRendererStateChangeCallback>> &callbacks)
1405 {
1406     AUDIO_DEBUG_LOG("in");
1407     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1408     if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1409         audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callbacks);
1410         if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1411             callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1412             SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1413         }
1414         isAudioRendererEventListenerRegistered = false;
1415     }
1416     return SUCCESS;
1417 }
1418 
UnregisterAudioRendererEventListener(const std::shared_ptr<AudioRendererStateChangeCallback> & callback)1419 int32_t AudioPolicyManager::UnregisterAudioRendererEventListener(
1420     const std::shared_ptr<AudioRendererStateChangeCallback> &callback)
1421 {
1422     AUDIO_DEBUG_LOG("in");
1423     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].mutex);
1424     if ((audioPolicyClientStubCB_ != nullptr) && isAudioRendererEventListenerRegistered) {
1425         audioPolicyClientStubCB_->RemoveRendererStateChangeCallback(callback);
1426         if (audioPolicyClientStubCB_->GetRendererStateChangeCallbackSize() == 0) {
1427             callbackChangeInfos_[CALLBACK_RENDERER_STATE_CHANGE].isEnable = false;
1428             SetClientCallbacksEnable(CALLBACK_RENDERER_STATE_CHANGE, false);
1429         }
1430         isAudioRendererEventListenerRegistered = false;
1431     }
1432     return SUCCESS;
1433 }
1434 
RegisterAudioCapturerEventListener(const int32_t clientPid,const std::shared_ptr<AudioCapturerStateChangeCallback> & callback)1435 int32_t AudioPolicyManager::RegisterAudioCapturerEventListener(const int32_t clientPid,
1436     const std::shared_ptr<AudioCapturerStateChangeCallback> &callback)
1437 {
1438     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterAudioCapturerEventListener");
1439 
1440     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Capturer Event Listener callback is nullptr");
1441 
1442     if (!isAudioPolicyClientRegisted_) {
1443         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1444         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1445         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1446         if (ret != SUCCESS) {
1447             return ret;
1448         }
1449     }
1450 
1451     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1452     audioPolicyClientStubCB_->AddCapturerStateChangeCallback(callback);
1453     size_t callbackSize = audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize();
1454     if (callbackSize == 1) {
1455         callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = true;
1456         SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, true);
1457     }
1458     isAudioCapturerEventListenerRegistered = true;
1459     return SUCCESS;
1460 }
1461 
UnregisterAudioCapturerEventListener(const int32_t clientPid)1462 int32_t AudioPolicyManager::UnregisterAudioCapturerEventListener(const int32_t clientPid)
1463 {
1464     AUDIO_DEBUG_LOG("AudioPolicyManager::UnregisterAudioCapturerEventListener");
1465     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].mutex);
1466     if ((audioPolicyClientStubCB_ != nullptr) && isAudioCapturerEventListenerRegistered) {
1467         audioPolicyClientStubCB_->RemoveCapturerStateChangeCallback();
1468         if (audioPolicyClientStubCB_->GetCapturerStateChangeCallbackSize() == 0) {
1469             callbackChangeInfos_[CALLBACK_CAPTURER_STATE_CHANGE].isEnable = false;
1470             SetClientCallbacksEnable(CALLBACK_CAPTURER_STATE_CHANGE, false);
1471         }
1472         isAudioCapturerEventListenerRegistered = false;
1473     }
1474     return SUCCESS;
1475 }
1476 
RegisterTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo,const std::shared_ptr<AudioClientTracker> & clientTrackerObj)1477 int32_t AudioPolicyManager::RegisterTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo,
1478     const std::shared_ptr<AudioClientTracker> &clientTrackerObj)
1479 {
1480     AUDIO_DEBUG_LOG("AudioPolicyManager::RegisterTracker");
1481     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1482     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1483 
1484     std::lock_guard<std::mutex> lock(clientTrackerStubMutex_);
1485     sptr<AudioClientTrackerCallbackService> callback = new(std::nothrow) AudioClientTrackerCallbackService();
1486     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERROR, "clientTrackerCbStub: memory allocation failed");
1487 
1488     callback->SetClientTrackerCallback(clientTrackerObj);
1489 
1490     sptr<IRemoteObject> object = callback->AsObject();
1491     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "clientTrackerCbStub: IPC object creation failed");
1492 
1493     int32_t ret = gsp->RegisterTracker(mode, streamChangeInfo, object);
1494     CHECK_AND_RETURN_RET_LOG(ret == SUCCESS, ERROR, "RegisterTracker failed");
1495     int32_t sessionId = mode == AUDIO_MODE_PLAYBACK ? streamChangeInfo.audioRendererChangeInfo.sessionId :
1496         streamChangeInfo.audioCapturerChangeInfo.sessionId;
1497     clientTrackerStubMap_[sessionId] = callback;
1498     return ret;
1499 }
1500 
UpdateTracker(AudioMode & mode,AudioStreamChangeInfo & streamChangeInfo)1501 int32_t AudioPolicyManager::UpdateTracker(AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo)
1502 {
1503     AUDIO_DEBUG_LOG("AudioPolicyManager::UpdateTracker");
1504     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1505     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1506     int32_t ret = gsp->UpdateTracker(mode, streamChangeInfo);
1507     CheckAndRemoveClientTrackerStub(mode, streamChangeInfo);
1508     return ret;
1509 }
1510 
GetPreferredOutputStreamType(AudioRendererInfo & rendererInfo)1511 int32_t AudioPolicyManager::GetPreferredOutputStreamType(AudioRendererInfo &rendererInfo)
1512 {
1513     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1514     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1515     int32_t streamType = AUDIO_FLAG_INVALID;
1516     gsp->GetPreferredOutputStreamType(rendererInfo, streamType);
1517     return streamType;
1518 }
1519 
GetPreferredInputStreamType(AudioCapturerInfo & capturerInfo)1520 int32_t AudioPolicyManager::GetPreferredInputStreamType(AudioCapturerInfo &capturerInfo)
1521 {
1522     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1523     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1524     int32_t streamType = AUDIO_FLAG_INVALID;
1525     gsp->GetPreferredInputStreamType(capturerInfo, streamType);
1526     return streamType;
1527 }
1528 
CreateRendererClient(std::shared_ptr<AudioStreamDescriptor> streamDesc,uint32_t & flag,uint32_t & sessionId,std::string & networkId)1529 int32_t AudioPolicyManager::CreateRendererClient(
1530     std::shared_ptr<AudioStreamDescriptor> streamDesc, uint32_t &flag, uint32_t &sessionId, std::string &networkId)
1531 {
1532     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1533     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1534     return gsp->CreateRendererClient(streamDesc, flag, sessionId, networkId);
1535 }
1536 
CreateCapturerClient(std::shared_ptr<AudioStreamDescriptor> streamDesc,uint32_t & flag,uint32_t & sessionId)1537 int32_t AudioPolicyManager::CreateCapturerClient(
1538     std::shared_ptr<AudioStreamDescriptor> streamDesc, uint32_t &flag, uint32_t &sessionId)
1539 {
1540     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1541     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AUDIO_FLAG_INVALID, "audio policy manager proxy is NULL.");
1542     return gsp->CreateCapturerClient(streamDesc, flag, sessionId);
1543 }
1544 
GetCurrentRendererChangeInfos(vector<shared_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)1545 int32_t AudioPolicyManager::GetCurrentRendererChangeInfos(
1546     vector<shared_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
1547 {
1548     AUDIO_DEBUG_LOG("GetCurrentRendererChangeInfos");
1549     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1550     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1551     return gsp->GetCurrentRendererChangeInfos(audioRendererChangeInfos);
1552 }
1553 
GetCurrentCapturerChangeInfos(vector<shared_ptr<AudioCapturerChangeInfo>> & audioCapturerChangeInfos)1554 int32_t AudioPolicyManager::GetCurrentCapturerChangeInfos(
1555     vector<shared_ptr<AudioCapturerChangeInfo>> &audioCapturerChangeInfos)
1556 {
1557     AUDIO_DEBUG_LOG("GetCurrentCapturerChangeInfos");
1558     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1559     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1560     return gsp->GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
1561 }
1562 
UpdateStreamState(const int32_t clientUid,StreamSetState streamSetState,StreamUsage streamUsage)1563 int32_t AudioPolicyManager::UpdateStreamState(const int32_t clientUid,
1564     StreamSetState streamSetState, StreamUsage streamUsage)
1565 {
1566     AUDIO_DEBUG_LOG("UpdateStreamState");
1567     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1568     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1569     return  gsp->UpdateStreamState(clientUid, streamSetState, streamUsage);
1570 }
1571 
GetVolumeGroupInfos(std::string networkId,std::vector<sptr<VolumeGroupInfo>> & infos)1572 int32_t AudioPolicyManager::GetVolumeGroupInfos(std::string networkId, std::vector<sptr<VolumeGroupInfo>> &infos)
1573 {
1574     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1575     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1576     return gsp->GetVolumeGroupInfos(networkId, infos);
1577 }
1578 
GetNetworkIdByGroupId(int32_t groupId,std::string & networkId)1579 int32_t AudioPolicyManager::GetNetworkIdByGroupId(int32_t groupId, std::string &networkId)
1580 {
1581     AudioXCollie audioXCollie("AudioPolicyManager::GetNetworkIdByGroupId", TIME_OUT_SECONDS,
1582          nullptr, nullptr, AUDIO_XCOLLIE_FLAG_LOG);
1583     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1584     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "GetNetworkIdByGroupId failed, g_apProxy is nullptr.");
1585     return gsp->GetNetworkIdByGroupId(groupId, networkId);
1586 }
1587 
SetSystemSoundUri(const std::string & key,const std::string & uri)1588 int32_t AudioPolicyManager::SetSystemSoundUri(const std::string &key, const std::string &uri)
1589 {
1590     AUDIO_DEBUG_LOG("SetSystemSoundUri: [%{public}s]: [%{public}s]", key.c_str(), uri.c_str());
1591     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1592     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1593 
1594     return gsp->SetSystemSoundUri(key, uri);
1595 }
1596 
GetSystemSoundUri(const std::string & key)1597 std::string AudioPolicyManager::GetSystemSoundUri(const std::string &key)
1598 {
1599     AUDIO_DEBUG_LOG("GetSystemSoundUri: %{public}s", key.c_str());
1600     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1601     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, "", "audio policy manager proxy is NULL.");
1602 
1603     std::string out{};
1604     gsp->GetSystemSoundUri(key, out);
1605     return out;
1606 }
1607 
GetMinStreamVolume()1608 float AudioPolicyManager::GetMinStreamVolume()
1609 {
1610     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1611     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1612     float out = -1;
1613     gsp->GetMinStreamVolume(out);
1614     return out;
1615 }
1616 
GetMaxStreamVolume()1617 float AudioPolicyManager::GetMaxStreamVolume()
1618 {
1619     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1620     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1621     float out = -1;
1622     gsp->GetMaxStreamVolume(out);
1623     return out;
1624 }
1625 
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> & callback)1626 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1627     const std::shared_ptr<AudioRendererPolicyServiceDiedCallback> &callback)
1628 {
1629     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1630     if (rendererCBMap_.count(clientPid)) {
1631         rendererCBMap_.erase(clientPid);
1632     }
1633     rendererCBMap_[clientPid] = callback;
1634     return SUCCESS;
1635 }
1636 
RegisterAudioPolicyServerDiedCb(const int32_t clientPid,const std::shared_ptr<AudioCapturerPolicyServiceDiedCallback> & callback)1637 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(const int32_t clientPid,
1638     const std::shared_ptr<AudioCapturerPolicyServiceDiedCallback> &callback)
1639 {
1640     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1641     capturerCB_ = callback;
1642     return SUCCESS;
1643 }
1644 
UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)1645 int32_t AudioPolicyManager::UnregisterAudioPolicyServerDiedCb(const int32_t clientPid)
1646 {
1647     std::lock_guard<std::mutex> lockCbMap(g_cBMapMutex);
1648     AUDIO_DEBUG_LOG("client pid: %{public}d", clientPid);
1649     rendererCBMap_.erase(getpid());
1650     return SUCCESS;
1651 }
1652 
RegisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1653 int32_t AudioPolicyManager::RegisterAudioStreamPolicyServerDiedCb(
1654     const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1655 {
1656     std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1657     AUDIO_DEBUG_LOG("RegisterAudioStreamPolicyServerDiedCb");
1658     audioStreamCBMap_.emplace_back(callback);
1659 
1660     return SUCCESS;
1661 }
1662 
UnregisterAudioStreamPolicyServerDiedCb(const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> & callback)1663 int32_t AudioPolicyManager::UnregisterAudioStreamPolicyServerDiedCb(
1664     const std::shared_ptr<AudioStreamPolicyServiceDiedCallback> &callback)
1665 {
1666     std::lock_guard<std::mutex> lockCbMap(g_cBDiedMapMutex);
1667     AUDIO_DEBUG_LOG("UnregisterAudioStreamPolicyServerDiedCb");
1668 
1669     audioStreamCBMap_.erase(std::remove_if(audioStreamCBMap_.begin(), audioStreamCBMap_.end(),
1670         [&callback] (const weak_ptr<AudioStreamPolicyServiceDiedCallback> &cb) {
1671             auto sharedCb = cb.lock();
1672             if (sharedCb == callback || sharedCb == nullptr) {
1673                 return true;
1674             }
1675             return false;
1676         }), audioStreamCBMap_.end());
1677 
1678     return SUCCESS;
1679 }
1680 
GetMaxRendererInstances()1681 int32_t AudioPolicyManager::GetMaxRendererInstances()
1682 {
1683     AUDIO_DEBUG_LOG("AudioPolicyManager::GetMaxRendererInstances");
1684     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1685     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1686 
1687     int32_t ret = -1;
1688     gsp->GetMaxRendererInstances(ret);
1689     return ret;
1690 }
1691 
IsVolumeUnadjustable()1692 bool AudioPolicyManager::IsVolumeUnadjustable()
1693 {
1694     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1695     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1696     bool out = false;
1697     gsp->IsVolumeUnadjustable(out);
1698     return out;
1699 }
1700 
AdjustVolumeByStep(VolumeAdjustType adjustType)1701 int32_t AudioPolicyManager::AdjustVolumeByStep(VolumeAdjustType adjustType)
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->AdjustVolumeByStep(adjustType);
1706 }
1707 
AdjustSystemVolumeByStep(AudioVolumeType volumeType,VolumeAdjustType adjustType)1708 int32_t AudioPolicyManager::AdjustSystemVolumeByStep(AudioVolumeType volumeType, VolumeAdjustType adjustType)
1709 {
1710     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1711     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1712     return gsp->AdjustSystemVolumeByStep(volumeType, adjustType);
1713 }
1714 
GetSystemVolumeInDb(AudioVolumeType volumeType,int32_t volumeLevel,DeviceType deviceType)1715 float AudioPolicyManager::GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType)
1716 {
1717     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1718     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1719     float out = -1.0f;
1720     int32_t ret = gsp->GetSystemVolumeInDb(volumeType, volumeLevel, deviceType, out);
1721     return ret == SUCCESS ? out : static_cast<float>(ERR_INVALID_PARAM);
1722 }
1723 
QueryEffectSceneMode(SupportedEffectConfig & supportedEffectConfig)1724 int32_t AudioPolicyManager::QueryEffectSceneMode(SupportedEffectConfig &supportedEffectConfig)
1725 {
1726     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1727     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1728     int error = gsp->QueryEffectSceneMode(supportedEffectConfig);
1729     return error;
1730 }
1731 
GetHardwareOutputSamplingRate(const std::shared_ptr<AudioDeviceDescriptor> & desc)1732 int32_t AudioPolicyManager::GetHardwareOutputSamplingRate(const std::shared_ptr<AudioDeviceDescriptor> &desc)
1733 {
1734     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1735     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1736     int32_t ret = ERROR;
1737     gsp->GetHardwareOutputSamplingRate(desc, ret);
1738     return ret;
1739 }
1740 
GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)1741 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAudioCapturerMicrophoneDescriptors(int32_t sessionID)
1742 {
1743     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1744     std::vector<sptr<MicrophoneDescriptor>> descs;
1745     if (gsp == nullptr) {
1746         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1747         return descs;
1748     }
1749     gsp->GetAudioCapturerMicrophoneDescriptors(sessionID, descs);
1750     return descs;
1751 }
1752 
GetAvailableMicrophones()1753 vector<sptr<MicrophoneDescriptor>> AudioPolicyManager::GetAvailableMicrophones()
1754 {
1755     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1756     if (gsp == nullptr) {
1757         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
1758         std::vector<sptr<MicrophoneDescriptor>> descs;
1759         return descs;
1760     }
1761     vector<sptr<MicrophoneDescriptor>> retMicList;
1762     gsp->GetAvailableMicrophones(retMicList);
1763     return retMicList;
1764 }
1765 
SetDeviceAbsVolumeSupported(const std::string & macAddress,const bool support)1766 int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support)
1767 {
1768     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1769     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1770     return gsp->SetDeviceAbsVolumeSupported(macAddress, support);
1771 }
1772 
IsAbsVolumeScene()1773 bool AudioPolicyManager::IsAbsVolumeScene()
1774 {
1775     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1776     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1777     bool ret = true;
1778     gsp->IsAbsVolumeScene(ret);
1779     return ret;
1780 }
1781 
SetA2dpDeviceVolume(const std::string & macAddress,const int32_t volume,const bool updateUi)1782 int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume,
1783     const bool updateUi)
1784 {
1785     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1786     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1787     return gsp->SetA2dpDeviceVolume(macAddress, volume, updateUi);
1788 }
1789 
SetNearlinkDeviceVolume(const std::string & macAddress,AudioVolumeType volumeType,const int32_t volume,const bool updateUi)1790 int32_t AudioPolicyManager::SetNearlinkDeviceVolume(const std::string &macAddress, AudioVolumeType volumeType,
1791     const int32_t volume, const bool updateUi)
1792 {
1793     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1794     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1795     return gsp->SetNearlinkDeviceVolume(macAddress, volumeType, volume, updateUi);
1796 }
1797 
ConfigDistributedRoutingRole(std::shared_ptr<AudioDeviceDescriptor> descriptor,CastType type)1798 int32_t AudioPolicyManager::ConfigDistributedRoutingRole(
1799     std::shared_ptr<AudioDeviceDescriptor> descriptor, CastType type)
1800 {
1801     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1802     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1803     return gsp->ConfigDistributedRoutingRole(descriptor, static_cast<int32_t>(type));
1804 }
1805 
SetDistributedRoutingRoleCallback(const std::shared_ptr<AudioDistributedRoutingRoleCallback> & callback)1806 int32_t AudioPolicyManager::SetDistributedRoutingRoleCallback(
1807     const std::shared_ptr<AudioDistributedRoutingRoleCallback> &callback)
1808 {
1809     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1810     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1811     if (callback == nullptr) {
1812         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: callback is nullptr");
1813         return ERR_INVALID_PARAM;
1814     }
1815 
1816     std::unique_lock<std::mutex> lock(listenerStubMutex_);
1817     auto activeDistributedRoutingRoleCb = new(std::nothrow) AudioRoutingManagerListener();
1818     if (activeDistributedRoutingRoleCb == nullptr) {
1819         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: object is nullptr");
1820         return ERROR;
1821     }
1822     activeDistributedRoutingRoleCb->SetDistributedRoutingRoleCallback(callback);
1823     sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
1824     if (object == nullptr) {
1825         AUDIO_ERR_LOG("SetDistributedRoutingRoleCallback: listenerStub is nullptr.");
1826         delete activeDistributedRoutingRoleCb;
1827         return ERROR;
1828     }
1829     return gsp->SetDistributedRoutingRoleCallback(object);
1830 }
1831 
UnsetDistributedRoutingRoleCallback()1832 int32_t AudioPolicyManager::UnsetDistributedRoutingRoleCallback()
1833 {
1834     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1835     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1836     return gsp->UnsetDistributedRoutingRoleCallback();
1837 }
1838 
IsSpatializationEnabled()1839 bool AudioPolicyManager::IsSpatializationEnabled()
1840 {
1841     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1842     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1843     bool ret = false;
1844     gsp->IsSpatializationEnabled(ret);
1845     return ret;
1846 }
1847 
IsSpatializationEnabled(const std::string address)1848 bool AudioPolicyManager::IsSpatializationEnabled(const std::string address)
1849 {
1850     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1851     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1852     bool ret = false;
1853     gsp->IsSpatializationEnabled(address, ret);
1854     return ret;
1855 }
1856 
IsSpatializationEnabledForCurrentDevice()1857 bool AudioPolicyManager::IsSpatializationEnabledForCurrentDevice()
1858 {
1859     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1860     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1861     bool ret = false;
1862     gsp->IsSpatializationEnabledForCurrentDevice(ret);
1863     return ret;
1864 }
1865 
SetSpatializationEnabled(const bool enable)1866 int32_t AudioPolicyManager::SetSpatializationEnabled(const bool enable)
1867 {
1868     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1869     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1870     return gsp->SetSpatializationEnabled(enable);
1871 }
1872 
SetSpatializationEnabled(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1873 int32_t AudioPolicyManager::SetSpatializationEnabled(
1874     const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice, const bool enable)
1875 {
1876     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1877     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1878     return gsp->SetSpatializationEnabled(selectedAudioDevice, enable);
1879 }
1880 
IsHeadTrackingEnabled()1881 bool AudioPolicyManager::IsHeadTrackingEnabled()
1882 {
1883     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1884     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1885     bool ret = false;
1886     gsp->IsHeadTrackingEnabled(ret);
1887     return ret;
1888 }
1889 
IsHeadTrackingEnabled(const std::string address)1890 bool AudioPolicyManager::IsHeadTrackingEnabled(const std::string address)
1891 {
1892     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1893     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
1894     bool ret = false;
1895     gsp->IsHeadTrackingEnabled(address, ret);
1896     return ret;
1897 }
1898 
SetHeadTrackingEnabled(const bool enable)1899 int32_t AudioPolicyManager::SetHeadTrackingEnabled(const bool enable)
1900 {
1901     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1902     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1903     return gsp->SetHeadTrackingEnabled(enable);
1904 }
1905 
SetHeadTrackingEnabled(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice,const bool enable)1906 int32_t AudioPolicyManager::SetHeadTrackingEnabled(
1907     const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice, const bool enable)
1908 {
1909     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1910     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
1911     return gsp->SetHeadTrackingEnabled(selectedAudioDevice, enable);
1912 }
1913 
RegisterSpatializationEnabledEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeCallback> & callback)1914 int32_t AudioPolicyManager::RegisterSpatializationEnabledEventListener(
1915     const std::shared_ptr<AudioSpatializationEnabledChangeCallback> &callback)
1916 {
1917     AUDIO_DEBUG_LOG("Start to register");
1918     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1919 
1920     if (!isAudioPolicyClientRegisted_) {
1921         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1922         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1923         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1924         if (ret != SUCCESS) {
1925             return ret;
1926         }
1927     }
1928 
1929     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
1930     if (audioPolicyClientStubCB_ != nullptr) {
1931         audioPolicyClientStubCB_->AddSpatializationEnabledChangeCallback(callback);
1932         size_t callbackSize = audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize();
1933         if (callbackSize == 1) {
1934             callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = true;
1935             SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, true);
1936         }
1937     }
1938     return SUCCESS;
1939 }
1940 
RegisterSpatializationEnabledForCurrentDeviceEventListener(const std::shared_ptr<AudioSpatializationEnabledChangeForCurrentDeviceCallback> & callback)1941 int32_t AudioPolicyManager::RegisterSpatializationEnabledForCurrentDeviceEventListener(
1942     const std::shared_ptr<AudioSpatializationEnabledChangeForCurrentDeviceCallback> &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>
1957         lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].mutex);
1958     if (audioPolicyClientStubCB_ != nullptr) {
1959         audioPolicyClientStubCB_->AddSpatializationEnabledChangeForCurrentDeviceCallback(callback);
1960         size_t callbackSize = audioPolicyClientStubCB_->GetSpatializationEnabledChangeForCurrentDeviceCallbackSize();
1961         if (callbackSize == 1) {
1962             callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].isEnable = true;
1963             SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE, true);
1964         }
1965     }
1966     return SUCCESS;
1967 }
1968 
RegisterHeadTrackingEnabledEventListener(const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> & callback)1969 int32_t AudioPolicyManager::RegisterHeadTrackingEnabledEventListener(
1970     const std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> &callback)
1971 {
1972     AUDIO_DEBUG_LOG("Start to register");
1973     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
1974 
1975     if (!isAudioPolicyClientRegisted_) {
1976         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
1977         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
1978         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
1979         if (ret != SUCCESS) {
1980             return ret;
1981         }
1982     }
1983 
1984     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
1985     if (audioPolicyClientStubCB_ != nullptr) {
1986         audioPolicyClientStubCB_->AddHeadTrackingEnabledChangeCallback(callback);
1987         size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize();
1988         if (callbackSize == 1) {
1989             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = true;
1990             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, true);
1991         }
1992     }
1993     return SUCCESS;
1994 }
1995 
RegisterNnStateEventListener(const std::shared_ptr<AudioNnStateChangeCallback> & callback)1996 int32_t AudioPolicyManager::RegisterNnStateEventListener(const std::shared_ptr<AudioNnStateChangeCallback> &callback)
1997 {
1998     AUDIO_DEBUG_LOG("Start to register");
1999     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2000 
2001     if (!isAudioPolicyClientRegisted_) {
2002         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2003         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2004         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2005         CHECK_AND_RETURN_RET(ret == SUCCESS, ret);
2006     }
2007 
2008     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].mutex);
2009     CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, SUCCESS);
2010     audioPolicyClientStubCB_->AddNnStateChangeCallback(callback);
2011     if (audioPolicyClientStubCB_->GetNnStateChangeCallbackSize() == 1) {
2012         callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].isEnable = true;
2013         SetClientCallbacksEnable(CALLBACK_NN_STATE_CHANGE, true);
2014     }
2015     return SUCCESS;
2016 }
2017 
UnregisterSpatializationEnabledEventListener()2018 int32_t AudioPolicyManager::UnregisterSpatializationEnabledEventListener()
2019 {
2020     AUDIO_DEBUG_LOG("Start to unregister");
2021     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].mutex);
2022     if (audioPolicyClientStubCB_ != nullptr) {
2023         audioPolicyClientStubCB_->RemoveSpatializationEnabledChangeCallback();
2024         if (audioPolicyClientStubCB_->GetSpatializationEnabledChangeCallbackSize() == 0) {
2025             callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE].isEnable = false;
2026             SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE, false);
2027         }
2028     }
2029     return SUCCESS;
2030 }
2031 
UnregisterSpatializationEnabledForCurrentDeviceEventListener()2032 int32_t AudioPolicyManager::UnregisterSpatializationEnabledForCurrentDeviceEventListener()
2033 {
2034     AUDIO_DEBUG_LOG("Start to unregister");
2035     std::lock_guard<std::mutex>
2036         lockCbMap(callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].mutex);
2037     if (audioPolicyClientStubCB_ != nullptr) {
2038         audioPolicyClientStubCB_->RemoveSpatializationEnabledChangeForCurrentDeviceCallback();
2039         if (audioPolicyClientStubCB_->GetSpatializationEnabledChangeForCurrentDeviceCallbackSize() == 0) {
2040             callbackChangeInfos_[CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE].isEnable = false;
2041             SetClientCallbacksEnable(CALLBACK_SPATIALIZATION_ENABLED_CHANGE_FOR_CURRENT_DEVICE, false);
2042         }
2043     }
2044     return SUCCESS;
2045 }
2046 
UnregisterHeadTrackingEnabledEventListener()2047 int32_t AudioPolicyManager::UnregisterHeadTrackingEnabledEventListener()
2048 {
2049     AUDIO_DEBUG_LOG("Start to unregister");
2050     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].mutex);
2051     if (audioPolicyClientStubCB_ != nullptr) {
2052         audioPolicyClientStubCB_->RemoveHeadTrackingEnabledChangeCallback();
2053         if (audioPolicyClientStubCB_->GetHeadTrackingEnabledChangeCallbacSize() == 0) {
2054             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_ENABLED_CHANGE].isEnable = false;
2055             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_ENABLED_CHANGE, false);
2056         }
2057     }
2058     return SUCCESS;
2059 }
2060 
UnregisterNnStateEventListener()2061 int32_t AudioPolicyManager::UnregisterNnStateEventListener()
2062 {
2063     AUDIO_DEBUG_LOG("Start to unregister");
2064     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].mutex);
2065     CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, SUCCESS);
2066     audioPolicyClientStubCB_->RemoveNnStateChangeCallback();
2067     if (audioPolicyClientStubCB_->GetNnStateChangeCallbackSize() == 0) {
2068         callbackChangeInfos_[CALLBACK_NN_STATE_CHANGE].isEnable = false;
2069         SetClientCallbacksEnable(CALLBACK_NN_STATE_CHANGE, false);
2070     }
2071     return SUCCESS;
2072 }
2073 
GetSpatializationState(const StreamUsage streamUsage)2074 AudioSpatializationState AudioPolicyManager::GetSpatializationState(const StreamUsage streamUsage)
2075 {
2076     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2077     if (gsp == nullptr) {
2078         AUDIO_ERR_LOG("GetSpatializationState: audio policy manager proxy is NULL.");
2079         AudioSpatializationState spatializationState = {false, false};
2080         return spatializationState;
2081     }
2082     AudioSpatializationState state;
2083     gsp->GetSpatializationState(streamUsage, state);
2084     return state;
2085 }
2086 
IsSpatializationSupported()2087 bool AudioPolicyManager::IsSpatializationSupported()
2088 {
2089     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2090     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2091     bool ret = false;
2092     gsp->IsSpatializationSupported(ret);
2093     return ret;
2094 }
2095 
IsSpatializationSupportedForDevice(const std::string address)2096 bool AudioPolicyManager::IsSpatializationSupportedForDevice(const std::string address)
2097 {
2098     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2099     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2100     bool ret = false;
2101     gsp->IsSpatializationSupportedForDevice(address, ret);
2102     return ret;
2103 }
2104 
IsHeadTrackingSupported()2105 bool AudioPolicyManager::IsHeadTrackingSupported()
2106 {
2107     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2108     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2109     bool ret = false;
2110     gsp->IsHeadTrackingSupported(ret);
2111     return ret;
2112 }
2113 
IsHeadTrackingSupportedForDevice(const std::string address)2114 bool AudioPolicyManager::IsHeadTrackingSupportedForDevice(const std::string address)
2115 {
2116     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2117     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2118     bool ret = false;
2119     gsp->IsHeadTrackingSupportedForDevice(address, ret);
2120     return ret;
2121 }
2122 
UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)2123 int32_t AudioPolicyManager::UpdateSpatialDeviceState(const AudioSpatialDeviceState audioSpatialDeviceState)
2124 {
2125     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2126     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2127     return gsp->UpdateSpatialDeviceState(audioSpatialDeviceState);
2128 }
2129 
RegisterSpatializationStateEventListener(const uint32_t sessionID,const StreamUsage streamUsage,const std::shared_ptr<AudioSpatializationStateChangeCallback> & callback)2130 int32_t AudioPolicyManager::RegisterSpatializationStateEventListener(const uint32_t sessionID,
2131     const StreamUsage streamUsage, const std::shared_ptr<AudioSpatializationStateChangeCallback> &callback)
2132 {
2133     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2134     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2135 
2136     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "Spatialization state callback is nullptr");
2137 
2138     sptr<AudioSpatializationStateChangeListener> spatializationStateChangeListenerStub =
2139         new(std::nothrow) AudioSpatializationStateChangeListener();
2140     CHECK_AND_RETURN_RET_LOG(spatializationStateChangeListenerStub != nullptr, ERROR, "object null");
2141 
2142     spatializationStateChangeListenerStub->SetCallback(callback);
2143 
2144     sptr<IRemoteObject> object = spatializationStateChangeListenerStub->AsObject();
2145     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "IPC object creation failed");
2146 
2147     return gsp->RegisterSpatializationStateEventListener(sessionID, streamUsage, object);
2148 }
2149 
UnregisterSpatializationStateEventListener(const uint32_t sessionID)2150 int32_t AudioPolicyManager::UnregisterSpatializationStateEventListener(const uint32_t sessionID)
2151 {
2152     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2153     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2154 
2155     return gsp->UnregisterSpatializationStateEventListener(sessionID);
2156 }
2157 
CreateAudioInterruptZone(const std::set<int32_t> & pids,const int32_t zoneID)2158 int32_t AudioPolicyManager::CreateAudioInterruptZone(const std::set<int32_t> &pids, const int32_t zoneID)
2159 {
2160     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2161     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2162 
2163     return gsp->CreateAudioInterruptZone(pids, zoneID);
2164 }
2165 
AddAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)2166 int32_t AudioPolicyManager::AddAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
2167 {
2168     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2169     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2170 
2171     return gsp->AddAudioInterruptZonePids(pids, zoneID);
2172 }
2173 
RemoveAudioInterruptZonePids(const std::set<int32_t> & pids,const int32_t zoneID)2174 int32_t AudioPolicyManager::RemoveAudioInterruptZonePids(const std::set<int32_t> &pids, const int32_t zoneID)
2175 {
2176     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2177     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2178 
2179     return gsp->RemoveAudioInterruptZonePids(pids, zoneID);
2180 }
2181 
ReleaseAudioInterruptZone(const int32_t zoneID)2182 int32_t AudioPolicyManager::ReleaseAudioInterruptZone(const int32_t zoneID)
2183 {
2184     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2185     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2186 
2187     return gsp->ReleaseAudioInterruptZone(zoneID);
2188 }
2189 
GetConverterConfig()2190 ConverterConfig AudioPolicyManager::GetConverterConfig()
2191 {
2192     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2193     if (gsp == nullptr) {
2194         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2195         return ConverterConfig();
2196     }
2197     ConverterConfig cfg;
2198     gsp->GetConverterConfig(cfg);
2199     return cfg;
2200 }
2201 
IsHighResolutionExist()2202 bool AudioPolicyManager::IsHighResolutionExist()
2203 {
2204     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2205     if (gsp == nullptr) {
2206         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2207         return false;
2208     }
2209     bool gspIsHighResolutionExist = false;
2210     gsp->IsHighResolutionExist(gspIsHighResolutionExist);
2211     return gspIsHighResolutionExist;
2212 }
2213 
SetHighResolutionExist(bool highResExist)2214 int32_t AudioPolicyManager::SetHighResolutionExist(bool highResExist)
2215 {
2216     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2217     if (gsp == nullptr) {
2218         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
2219         return -1;
2220     }
2221     gsp->SetHighResolutionExist(highResExist);
2222     return SUCCESS;
2223 }
2224 
RegisterAudioPolicyServerDiedCb(std::shared_ptr<AudioSessionManagerPolicyServiceDiedCallback> & callback)2225 int32_t AudioPolicyManager::RegisterAudioPolicyServerDiedCb(
2226     std::shared_ptr<AudioSessionManagerPolicyServiceDiedCallback> &callback)
2227 {
2228     std::lock_guard<std::mutex> lockCb(serverDiedSessionManagerCbkMutex_);
2229     audioSessionManagerCb_ = callback;
2230     return SUCCESS;
2231 }
2232 
AudioSessionManagerCallback()2233 void AudioPolicyManager::AudioSessionManagerCallback()
2234 {
2235     std::lock_guard<std::mutex> lockCb(serverDiedSessionManagerCbkMutex_);
2236     auto cbSharedPtr = audioSessionManagerCb_.lock();
2237     CHECK_AND_RETURN_LOG(cbSharedPtr != nullptr, "func audioSessionManagerCb is nullptr");
2238 
2239     cbSharedPtr->OnAudioPolicyServiceDied();
2240 }
2241 
ActivateAudioSession(const AudioSessionStrategy & strategy)2242 int32_t AudioPolicyManager::ActivateAudioSession(const AudioSessionStrategy &strategy)
2243 {
2244     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2245     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2246     if (!isAudioPolicyClientRegisted_) {
2247         int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2248         if (result != SUCCESS) {
2249             AUDIO_ERR_LOG("Failed to register policy callback clent");
2250             return result;
2251         }
2252     }
2253     return gsp->ActivateAudioSession(static_cast<int32_t>(strategy.concurrencyMode));
2254 }
2255 
DeactivateAudioSession()2256 int32_t AudioPolicyManager::DeactivateAudioSession()
2257 {
2258     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2259     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2260     return gsp->DeactivateAudioSession();
2261 }
2262 
IsAudioSessionActivated()2263 bool AudioPolicyManager::IsAudioSessionActivated()
2264 {
2265     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2266     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2267     bool active = false;
2268     gsp->IsAudioSessionActivated(active);
2269     return active;
2270 }
2271 
SetInputDevice(const DeviceType deviceType,const uint32_t sessionID,const SourceType sourceType,bool isRunning)2272 int32_t AudioPolicyManager::SetInputDevice(const DeviceType deviceType, const uint32_t sessionID,
2273     const SourceType sourceType, bool isRunning)
2274 {
2275     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2276     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2277     return gsp->SetInputDevice(deviceType, sessionID, sourceType, isRunning);
2278 }
2279 
SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)2280 int32_t AudioPolicyManager::SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
2281 {
2282     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2283     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2284     CHECK_AND_RETURN_RET_LOG(audioSessionCallback != nullptr, ERR_INVALID_PARAM, "audioSessionCallback is nullptr");
2285 
2286     int32_t result = SUCCESS;
2287     if (!isAudioPolicyClientRegisted_) {
2288         result = RegisterPolicyCallbackClientFunc(gsp);
2289         if (result != SUCCESS) {
2290             AUDIO_ERR_LOG("Failed to register policy callback clent");
2291             return result;
2292         }
2293     }
2294     if (audioPolicyClientStubCB_ == nullptr) {
2295         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2296         return ERROR_ILLEGAL_STATE;
2297     }
2298 
2299     result = audioPolicyClientStubCB_->AddAudioSessionCallback(audioSessionCallback);
2300     if (result != SUCCESS) {
2301         AUDIO_ERR_LOG("Failed to add audio session callback.");
2302         return result;
2303     }
2304 
2305     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
2306     if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 1) {
2307         // Notify audio server that the client has registerd one listener.
2308         callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = true;
2309         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, true);
2310     }
2311     return result;
2312 }
2313 
UnsetAudioSessionCallback()2314 int32_t AudioPolicyManager::UnsetAudioSessionCallback()
2315 {
2316     if (audioPolicyClientStubCB_ == nullptr) {
2317         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2318         return ERROR_ILLEGAL_STATE;
2319     }
2320 
2321     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback();
2322     if (result != SUCCESS) {
2323         AUDIO_ERR_LOG("Failed to remove all audio session callbacks.");
2324         return result;
2325     }
2326 
2327     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
2328     if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
2329         // Notify audio server that all of the client listeners have been unregisterd.
2330         callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
2331         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
2332     }
2333     return result;
2334 }
2335 
UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)2336 int32_t AudioPolicyManager::UnsetAudioSessionCallback(
2337     const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
2338 {
2339     if (audioPolicyClientStubCB_ == nullptr) {
2340         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2341         return ERROR_ILLEGAL_STATE;
2342     }
2343     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionCallback(audioSessionCallback);
2344     if (result != SUCCESS) {
2345         AUDIO_ERR_LOG("Failed to remove the audio session callback.");
2346         return result;
2347     }
2348 
2349     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION].mutex);
2350     if (audioPolicyClientStubCB_->GetAudioSessionCallbackSize() == 0) {
2351         // Notify audio server that all of the client listeners have been unregisterd.
2352         callbackChangeInfos_[CALLBACK_AUDIO_SESSION].isEnable = false;
2353         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION, false);
2354     }
2355     return result;
2356 }
2357 
SetAudioSessionScene(const AudioSessionScene audioSessionScene)2358 int32_t AudioPolicyManager::SetAudioSessionScene(const AudioSessionScene audioSessionScene)
2359 {
2360     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2361     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2362     if (!isAudioPolicyClientRegisted_) {
2363         int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2364         if (result != SUCCESS) {
2365             AUDIO_ERR_LOG("Failed to register policy callback clent");
2366             return result;
2367         }
2368     }
2369     return gsp->SetAudioSessionScene(static_cast<int32_t>(audioSessionScene));
2370 }
2371 
SetAudioSessionStateChangeCallback(const std::shared_ptr<AudioSessionStateChangedCallback> & stateChangedCallback)2372 int32_t AudioPolicyManager::SetAudioSessionStateChangeCallback(
2373     const std::shared_ptr<AudioSessionStateChangedCallback> &stateChangedCallback)
2374 {
2375     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2376     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2377     CHECK_AND_RETURN_RET_LOG(stateChangedCallback != nullptr, ERR_INVALID_PARAM, "stateChangedCallback is nullptr");
2378 
2379     int32_t result = SUCCESS;
2380     if (!isAudioPolicyClientRegisted_) {
2381         result = RegisterPolicyCallbackClientFunc(gsp);
2382         if (result != SUCCESS) {
2383             AUDIO_ERR_LOG("Failed to register policy callback clent");
2384             return result;
2385         }
2386     }
2387     if (audioPolicyClientStubCB_ == nullptr) {
2388         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2389         return ERROR_ILLEGAL_STATE;
2390     }
2391 
2392     result = audioPolicyClientStubCB_->AddAudioSessionStateCallback(stateChangedCallback);
2393     if (result != SUCCESS) {
2394         AUDIO_ERR_LOG("Failed to add audio session callback.");
2395         return result;
2396     }
2397 
2398     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].mutex);
2399     if (audioPolicyClientStubCB_->GetAudioSessionStateCallbackSize() == 1) {
2400         // Notify audio server that the client has registerd one listener.
2401         callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].isEnable = true;
2402         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_STATE, true);
2403     }
2404     return result;
2405 }
2406 
UnsetAudioSessionStateChangeCallback()2407 int32_t AudioPolicyManager::UnsetAudioSessionStateChangeCallback()
2408 {
2409     if (audioPolicyClientStubCB_ == nullptr) {
2410         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2411         return ERROR_ILLEGAL_STATE;
2412     }
2413 
2414     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionStateCallback();
2415     if (result != SUCCESS) {
2416         AUDIO_ERR_LOG("Failed to remove all audio session state callbacks.");
2417         return result;
2418     }
2419 
2420     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].mutex);
2421     if (audioPolicyClientStubCB_->GetAudioSessionStateCallbackSize() == 0) {
2422         // Notify audio server that all of the client listeners have been unregisterd.
2423         callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].isEnable = false;
2424         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_STATE, false);
2425     }
2426     return result;
2427 }
2428 
UnsetAudioSessionStateChangeCallback(const std::shared_ptr<AudioSessionStateChangedCallback> & stateChangedCallback)2429 int32_t AudioPolicyManager::UnsetAudioSessionStateChangeCallback(
2430     const std::shared_ptr<AudioSessionStateChangedCallback> &stateChangedCallback)
2431 {
2432     if (audioPolicyClientStubCB_ == nullptr) {
2433         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2434         return ERROR_ILLEGAL_STATE;
2435     }
2436     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionStateCallback(stateChangedCallback);
2437     if (result != SUCCESS) {
2438         AUDIO_ERR_LOG("Failed to remove the audio session state callback.");
2439         return result;
2440     }
2441 
2442     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].mutex);
2443     if (audioPolicyClientStubCB_->GetAudioSessionStateCallbackSize() == 0) {
2444         // Notify audio server that all of the client listeners have been unregisterd.
2445         callbackChangeInfos_[CALLBACK_AUDIO_SESSION_STATE].isEnable = false;
2446         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_STATE, false);
2447     }
2448     return result;
2449 }
2450 
GetDefaultOutputDevice(DeviceType & deviceType)2451 int32_t AudioPolicyManager::GetDefaultOutputDevice(DeviceType &deviceType)
2452 {
2453     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2454     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2455     if (!isAudioPolicyClientRegisted_) {
2456         int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2457         if (result != SUCCESS) {
2458             AUDIO_ERR_LOG("Failed to register policy callback clent");
2459             return result;
2460         }
2461     }
2462     int32_t deviceTypeOut = DEVICE_TYPE_NONE;
2463     int32_t ret = gsp->GetDefaultOutputDevice(deviceTypeOut);
2464     deviceType = static_cast<DeviceType>(deviceTypeOut);
2465     return ret;
2466 }
2467 
SetDefaultOutputDevice(DeviceType deviceType)2468 int32_t AudioPolicyManager::SetDefaultOutputDevice(DeviceType deviceType)
2469 {
2470     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2471     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2472     if (!isAudioPolicyClientRegisted_) {
2473         int32_t result = RegisterPolicyCallbackClientFunc(gsp);
2474         if (result != SUCCESS) {
2475             AUDIO_ERR_LOG("Failed to register policy callback clent");
2476             return result;
2477         }
2478     }
2479     return gsp->SetDefaultOutputDevice(static_cast<int32_t>(deviceType));
2480 }
2481 
SetAudioSessionCurrentDeviceChangeCallback(const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> & deviceChangedCallback)2482 int32_t AudioPolicyManager::SetAudioSessionCurrentDeviceChangeCallback(
2483     const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> &deviceChangedCallback)
2484 {
2485     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2486     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2487     CHECK_AND_RETURN_RET_LOG(deviceChangedCallback != nullptr, ERR_INVALID_PARAM, "deviceChangedCallback is nullptr");
2488 
2489     int32_t result = SUCCESS;
2490     if (!isAudioPolicyClientRegisted_) {
2491         result = RegisterPolicyCallbackClientFunc(gsp);
2492         if (result != SUCCESS) {
2493             AUDIO_ERR_LOG("Failed to register policy callback clent");
2494             return result;
2495         }
2496     }
2497     if (audioPolicyClientStubCB_ == nullptr) {
2498         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2499         return ERROR_ILLEGAL_STATE;
2500     }
2501 
2502     result = audioPolicyClientStubCB_->AddAudioSessionDeviceCallback(deviceChangedCallback);
2503     if (result != SUCCESS) {
2504         AUDIO_ERR_LOG("Failed to add audio session device callback.");
2505         return result;
2506     }
2507 
2508     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].mutex);
2509     if (audioPolicyClientStubCB_->GetAudioSessionDeviceCallbackSize() == 1) {
2510         // Notify audio server that the client has registerd one listener.
2511         callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].isEnable = true;
2512         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_DEVICE, true);
2513     }
2514     return result;
2515 }
2516 
UnsetAudioSessionCurrentDeviceChangeCallback()2517 int32_t AudioPolicyManager::UnsetAudioSessionCurrentDeviceChangeCallback()
2518 {
2519     if (audioPolicyClientStubCB_ == nullptr) {
2520         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2521         return ERROR_ILLEGAL_STATE;
2522     }
2523 
2524     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionDeviceCallback();
2525     if (result != SUCCESS) {
2526         AUDIO_ERR_LOG("Failed to remove all audio session device callbacks.");
2527         return result;
2528     }
2529 
2530     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].mutex);
2531     if (audioPolicyClientStubCB_->GetAudioSessionDeviceCallbackSize() == 0) {
2532         // Notify audio server that all of the client listeners have been unregisterd.
2533         callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].isEnable = false;
2534         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_DEVICE, false);
2535     }
2536     return result;
2537 }
2538 
UnsetAudioSessionCurrentDeviceChangeCallback(const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> & deviceChangedCallback)2539 int32_t AudioPolicyManager::UnsetAudioSessionCurrentDeviceChangeCallback(
2540     const std::shared_ptr<AudioSessionCurrentDeviceChangedCallback> &deviceChangedCallback)
2541 {
2542     if (audioPolicyClientStubCB_ == nullptr) {
2543         AUDIO_ERR_LOG("audioPolicyClientStubCB_ is null");
2544         return ERROR_ILLEGAL_STATE;
2545     }
2546     int32_t result = audioPolicyClientStubCB_->RemoveAudioSessionDeviceCallback(deviceChangedCallback);
2547     if (result != SUCCESS) {
2548         AUDIO_ERR_LOG("Failed to remove the audio session device callback.");
2549         return result;
2550     }
2551 
2552     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].mutex);
2553     if (audioPolicyClientStubCB_->GetAudioSessionDeviceCallbackSize() == 0) {
2554         // Notify audio server that all of the client listeners have been unregisterd.
2555         callbackChangeInfos_[CALLBACK_AUDIO_SESSION_DEVICE].isEnable = false;
2556         SetClientCallbacksEnable(CALLBACK_AUDIO_SESSION_DEVICE, false);
2557     }
2558     return result;
2559 }
2560 
GetSpatializationSceneType()2561 AudioSpatializationSceneType AudioPolicyManager::GetSpatializationSceneType()
2562 {
2563     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2564     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, SPATIALIZATION_SCENE_TYPE_MUSIC, "audio policy manager proxy is NULL.");
2565     int32_t type = SPATIALIZATION_SCENE_TYPE_MUSIC;
2566     gsp->GetSpatializationSceneType(type);
2567     return static_cast<AudioSpatializationSceneType>(type);
2568 }
2569 
SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)2570 int32_t AudioPolicyManager::SetSpatializationSceneType(const AudioSpatializationSceneType spatializationSceneType)
2571 {
2572     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2573     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2574     return gsp->SetSpatializationSceneType(spatializationSceneType);
2575 }
2576 
GetMaxAmplitude(const int32_t deviceId)2577 float AudioPolicyManager::GetMaxAmplitude(const int32_t deviceId)
2578 {
2579     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2580     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, SPATIALIZATION_SCENE_TYPE_DEFAULT, "audio policy manager proxy is NULL.");
2581     float ret = SPATIALIZATION_SCENE_TYPE_DEFAULT;
2582     gsp->GetMaxAmplitude(deviceId, ret);
2583     return ret;
2584 }
2585 
DisableSafeMediaVolume()2586 int32_t AudioPolicyManager::DisableSafeMediaVolume()
2587 {
2588     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2589     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2590     return gsp->DisableSafeMediaVolume();
2591 }
2592 
IsHeadTrackingDataRequested(const std::string & macAddress)2593 bool AudioPolicyManager::IsHeadTrackingDataRequested(const std::string &macAddress)
2594 {
2595     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2596     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
2597     bool ret = false;
2598     gsp->IsHeadTrackingDataRequested(macAddress, ret);
2599     return ret;
2600 }
2601 
RegisterHeadTrackingDataRequestedEventListener(const std::string & macAddress,const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> & callback)2602 int32_t AudioPolicyManager::RegisterHeadTrackingDataRequestedEventListener(const std::string &macAddress,
2603     const std::shared_ptr<HeadTrackingDataRequestedChangeCallback> &callback)
2604 {
2605     AUDIO_DEBUG_LOG("Start to register");
2606     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2607 
2608     if (!isAudioPolicyClientRegisted_) {
2609         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2610         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2611         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2612         if (ret != SUCCESS) {
2613             return ret;
2614         }
2615     }
2616 
2617     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2618     if (audioPolicyClientStubCB_ != nullptr) {
2619         audioPolicyClientStubCB_->AddHeadTrackingDataRequestedChangeCallback(macAddress, callback);
2620         size_t callbackSize = audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize();
2621         if (callbackSize == 1) {
2622             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = true;
2623             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, true);
2624         }
2625     }
2626     return SUCCESS;
2627 }
2628 
UnregisterHeadTrackingDataRequestedEventListener(const std::string & macAddress)2629 int32_t AudioPolicyManager::UnregisterHeadTrackingDataRequestedEventListener(const std::string &macAddress)
2630 {
2631     AUDIO_DEBUG_LOG("Start to unregister");
2632     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].mutex);
2633     if (audioPolicyClientStubCB_ != nullptr) {
2634         audioPolicyClientStubCB_->RemoveHeadTrackingDataRequestedChangeCallback(macAddress);
2635         if (audioPolicyClientStubCB_->GetHeadTrackingDataRequestedChangeCallbackSize() == 0) {
2636             callbackChangeInfos_[CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE].isEnable = false;
2637             SetClientCallbacksEnable(CALLBACK_HEAD_TRACKING_DATA_REQUESTED_CHANGE, false);
2638         }
2639     }
2640     return SUCCESS;
2641 }
SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> & callback)2642 int32_t AudioPolicyManager::SetAudioDeviceRefinerCallback(const std::shared_ptr<AudioDeviceRefiner> &callback)
2643 {
2644     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2645     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2646     if (callback == nullptr) {
2647         return ERR_INVALID_PARAM;
2648     };
2649 
2650     std::unique_lock<std::mutex> lock(listenerStubMutex_);
2651     auto activeDistributedRoutingRoleCb = new (std::nothrow) AudioRoutingManagerListener();
2652     if (activeDistributedRoutingRoleCb == nullptr) {
2653         AUDIO_ERR_LOG("object is nullptr");
2654         return ERROR;
2655     }
2656     activeDistributedRoutingRoleCb->SetAudioDeviceRefinerCallback(callback);
2657     sptr<IRemoteObject> object = activeDistributedRoutingRoleCb->AsObject();
2658     if (object == nullptr) {
2659         AUDIO_ERR_LOG("listenerStub is nullptr");
2660         delete activeDistributedRoutingRoleCb;
2661         return ERROR;
2662     }
2663 
2664     return gsp->SetAudioDeviceRefinerCallback(object);
2665 }
2666 
UnsetAudioDeviceRefinerCallback()2667 int32_t AudioPolicyManager::UnsetAudioDeviceRefinerCallback()
2668 {
2669     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2670     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2671     return gsp->UnsetAudioDeviceRefinerCallback();
2672 }
2673 
SetAudioClientInfoMgrCallback(const std::shared_ptr<AudioClientInfoMgrCallback> & callback)2674 int32_t AudioPolicyManager::SetAudioClientInfoMgrCallback(
2675     const std::shared_ptr<AudioClientInfoMgrCallback> &callback)
2676 {
2677     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2678     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2679     if (callback == nullptr) {
2680         return ERR_INVALID_PARAM;
2681     };
2682 
2683     sptr<AudioPolicyManagerListenerStubImpl> listener = new (std::nothrow) AudioPolicyManagerListenerStubImpl();
2684     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2685     listener->SetAudioClientInfoMgrCallback(callback);
2686 
2687     sptr<IRemoteObject> object = listener->AsObject();
2688     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2689 
2690     return gsp->SetAudioClientInfoMgrCallback(object);
2691 }
2692 
SetAudioVKBInfoMgrCallback(const std::shared_ptr<AudioVKBInfoMgrCallback> & callback)2693 int32_t AudioPolicyManager::SetAudioVKBInfoMgrCallback(
2694     const std::shared_ptr<AudioVKBInfoMgrCallback> &callback)
2695 {
2696     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2697     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2698     if (callback == nullptr) {
2699         return ERR_INVALID_PARAM;
2700     };
2701 
2702     sptr<AudioPolicyManagerListenerStubImpl> listener = new (std::nothrow) AudioPolicyManagerListenerStubImpl();
2703     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2704     listener->SetAudioVKBInfoMgrCallback(callback);
2705 
2706     sptr<IRemoteObject> object = listener->AsObject();
2707     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2708 
2709     return gsp->SetAudioVKBInfoMgrCallback(object);
2710 }
2711 
2712 // When AudioPolicyServer died, clear client tracker stubs. New tracker stubs will be added
2713 // in IAudioStream::RestoreAudioStream. Only called in AudioPolicyServerDied().
ResetClientTrackerStubMap()2714 void AudioPolicyManager::ResetClientTrackerStubMap()
2715 {
2716     std::lock_guard<std::mutex> lock(clientTrackerStubMutex_);
2717     for (auto it : clientTrackerStubMap_) {
2718         if (it.second != nullptr) {
2719             it.second->UnsetClientTrackerCallback();
2720         } else {
2721             AUDIO_WARNING_LOG("Client tracker stub is nullptr in local map");
2722         }
2723     }
2724     clientTrackerStubMap_.clear();
2725 }
2726 
CheckAndRemoveClientTrackerStub(const AudioMode & mode,const AudioStreamChangeInfo & streamChangeInfo)2727 void AudioPolicyManager::CheckAndRemoveClientTrackerStub(const AudioMode &mode,
2728     const AudioStreamChangeInfo &streamChangeInfo)
2729 {
2730     if (streamChangeInfo.audioRendererChangeInfo.rendererState != RENDERER_RELEASED &&
2731         streamChangeInfo.audioCapturerChangeInfo.capturerState != CAPTURER_RELEASED) {
2732         return;
2733     }
2734     int32_t sessionId = mode == AUDIO_MODE_PLAYBACK ? streamChangeInfo.audioRendererChangeInfo.sessionId :
2735         streamChangeInfo.audioCapturerChangeInfo.sessionId;
2736     RemoveClientTrackerStub(sessionId);
2737 }
2738 
RemoveClientTrackerStub(int32_t sessionId)2739 void AudioPolicyManager::RemoveClientTrackerStub(int32_t sessionId)
2740 {
2741     std::unique_lock<std::mutex> lock(clientTrackerStubMutex_);
2742     if (clientTrackerStubMap_.find(sessionId) != clientTrackerStubMap_.end() &&
2743         clientTrackerStubMap_[sessionId] != nullptr) {
2744         clientTrackerStubMap_[sessionId]->UnsetClientTrackerCallback();
2745         clientTrackerStubMap_.erase(sessionId);
2746         AUDIO_INFO_LOG("Client tracker for session %{public}d removed", sessionId);
2747     } else {
2748         AUDIO_WARNING_LOG("Client tracker for session %{public}d not exist", sessionId);
2749     }
2750 }
2751 
GetSupportedAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)2752 int32_t AudioPolicyManager::GetSupportedAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
2753 {
2754     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2755     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2756     int32_t result = gsp->GetSupportedAudioEffectProperty(propertyArray);
2757     CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Supported Audio Effect Property, error: %d", result);
2758 
2759     int32_t size = static_cast<int32_t>(propertyArray.property.size());
2760     CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2761         ERROR_INVALID_PARAM, "size invalid");
2762     return result;
2763 }
2764 
SetAudioEffectProperty(const AudioEffectPropertyArrayV3 & propertyArray)2765 int32_t AudioPolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArrayV3 &propertyArray)
2766 {
2767     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2768     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2769     return gsp->SetAudioEffectProperty(propertyArray);
2770 }
2771 
GetAudioEffectProperty(AudioEffectPropertyArrayV3 & propertyArray)2772 int32_t AudioPolicyManager::GetAudioEffectProperty(AudioEffectPropertyArrayV3 &propertyArray)
2773 {
2774     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2775     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2776     int32_t result = gsp->GetAudioEffectProperty(propertyArray);
2777     CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Audio Effect Property, error: %d", result);
2778 
2779     int32_t size = static_cast<int32_t>(propertyArray.property.size());
2780     CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2781         ERROR_INVALID_PARAM, "size invalid");
2782     return result;
2783 }
2784 
GetSupportedAudioEffectProperty(AudioEffectPropertyArray & propertyArray)2785 int32_t AudioPolicyManager::GetSupportedAudioEffectProperty(AudioEffectPropertyArray &propertyArray)
2786 {
2787     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2788     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2789     int32_t result = gsp->GetSupportedAudioEffectProperty(propertyArray);
2790     CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Supported Audio Effect Property, error: %d", result);
2791 
2792     int32_t size = static_cast<int32_t>(propertyArray.property.size());
2793     CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2794         ERROR_INVALID_PARAM, "size invalid");
2795     return result;
2796 }
2797 
GetSupportedAudioEnhanceProperty(AudioEnhancePropertyArray & propertyArray)2798 int32_t AudioPolicyManager::GetSupportedAudioEnhanceProperty(AudioEnhancePropertyArray &propertyArray)
2799 {
2800     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2801     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2802     int32_t result = gsp->GetSupportedAudioEnhanceProperty(propertyArray);
2803     CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Supported Audio Enhance Property, error: %d", result);
2804 
2805     int32_t size = static_cast<int32_t>(propertyArray.property.size());
2806     CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2807         ERROR_INVALID_PARAM, "size invalid");
2808     return result;
2809 }
2810 
SetAudioEffectProperty(const AudioEffectPropertyArray & propertyArray)2811 int32_t AudioPolicyManager::SetAudioEffectProperty(const AudioEffectPropertyArray &propertyArray)
2812 {
2813     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2814     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2815     return gsp->SetAudioEffectProperty(propertyArray);
2816 }
2817 
GetAudioEffectProperty(AudioEffectPropertyArray & propertyArray)2818 int32_t AudioPolicyManager::GetAudioEffectProperty(AudioEffectPropertyArray &propertyArray)
2819 {
2820     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2821     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2822     int32_t result = gsp->GetAudioEffectProperty(propertyArray);
2823     CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Audio Effect Property, error: %d", result);
2824 
2825     int32_t size = static_cast<int32_t>(propertyArray.property.size());
2826     CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2827         ERROR_INVALID_PARAM, "size invalid");
2828     return result;
2829 }
2830 
SetAudioEnhanceProperty(const AudioEnhancePropertyArray & propertyArray)2831 int32_t AudioPolicyManager::SetAudioEnhanceProperty(const AudioEnhancePropertyArray &propertyArray)
2832 {
2833     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2834     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2835     return gsp->SetAudioEnhanceProperty(propertyArray);
2836 }
2837 
GetAudioEnhanceProperty(AudioEnhancePropertyArray & propertyArray)2838 int32_t AudioPolicyManager::GetAudioEnhanceProperty(AudioEnhancePropertyArray &propertyArray)
2839 {
2840     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2841     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
2842     int32_t result = gsp->GetAudioEnhanceProperty(propertyArray);
2843     CHECK_AND_RETURN_RET_LOG(result == ERR_NONE, result, "Get Audio Enhance Property, error: %d", result);
2844 
2845     int32_t size = static_cast<int32_t>(propertyArray.property.size());
2846     CHECK_AND_RETURN_RET_LOG(size >= 0 && size <= AUDIO_EFFECT_COUNT_UPPER_LIMIT,
2847         ERROR_INVALID_PARAM, "size invalid");
2848     return result;
2849 }
2850 
InjectInterruption(const std::string networkId,InterruptEvent & event)2851 int32_t AudioPolicyManager::InjectInterruption(const std::string networkId, InterruptEvent &event)
2852 {
2853     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2854     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2855     return gsp->InjectInterruption(networkId, event);
2856 }
2857 
LoadSplitModule(const std::string & splitArgs,const std::string & networkId)2858 int32_t AudioPolicyManager::LoadSplitModule(const std::string &splitArgs, const std::string &networkId)
2859 {
2860     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2861     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2862     return gsp->LoadSplitModule(splitArgs, networkId);
2863 }
2864 
IsAllowedPlayback(const int32_t & uid,const int32_t & pid)2865 bool AudioPolicyManager::IsAllowedPlayback(const int32_t &uid, const int32_t &pid)
2866 {
2867     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2868     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2869     bool isAllowed = false;
2870     gsp->IsAllowedPlayback(uid, pid, isAllowed);
2871     return isAllowed;
2872 }
2873 
SetVoiceRingtoneMute(bool isMute)2874 int32_t AudioPolicyManager::SetVoiceRingtoneMute(bool isMute)
2875 {
2876     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2877     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2878     return gsp->SetVoiceRingtoneMute(isMute);
2879 }
2880 
SetVirtualCall(const bool isVirtual)2881 int32_t AudioPolicyManager::SetVirtualCall(const bool isVirtual)
2882 {
2883     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2884     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2885     return gsp->SetVirtualCall(isVirtual);
2886 }
2887 
SetQueryAllowedPlaybackCallback(const std::shared_ptr<AudioQueryAllowedPlaybackCallback> & callback)2888 int32_t AudioPolicyManager::SetQueryAllowedPlaybackCallback(
2889     const std::shared_ptr<AudioQueryAllowedPlaybackCallback> &callback)
2890 {
2891     AUDIO_INFO_LOG("In");
2892     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2893     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2894     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2895 
2896     sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
2897     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2898     listener->SetQueryAllowedPlaybackCallback(callback);
2899 
2900     sptr<IRemoteObject> object = listener->AsObject();
2901     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2902 
2903     return gsp->SetQueryAllowedPlaybackCallback(object);
2904 }
2905 
SetBackgroundMuteCallback(const std::shared_ptr<AudioBackgroundMuteCallback> & callback)2906 int32_t AudioPolicyManager::SetBackgroundMuteCallback(
2907     const std::shared_ptr<AudioBackgroundMuteCallback> &callback)
2908 {
2909     AUDIO_INFO_LOG("In");
2910     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2911     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2912     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2913 
2914     sptr<AudioPolicyManagerListenerStubImpl> listener = new(std::nothrow) AudioPolicyManagerListenerStubImpl();
2915     CHECK_AND_RETURN_RET_LOG(listener != nullptr, ERROR, "object null");
2916     listener->SetBackgroundMuteCallback(callback);
2917 
2918     sptr<IRemoteObject> object = listener->AsObject();
2919     CHECK_AND_RETURN_RET_LOG(object != nullptr, ERROR, "listenerStub->AsObject is nullptr.");
2920 
2921     return gsp->SetBackgroundMuteCallback(object);
2922 }
2923 
NotifySessionStateChange(const int32_t uid,const int32_t pid,const bool hasSession)2924 int32_t AudioPolicyManager::NotifySessionStateChange(const int32_t uid, const int32_t pid, const bool hasSession)
2925 {
2926     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2927     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2928     return gsp->NotifySessionStateChange(uid, pid, hasSession);
2929 }
2930 
NotifyFreezeStateChange(const std::set<int32_t> & pidList,const bool isFreeze)2931 int32_t AudioPolicyManager::NotifyFreezeStateChange(const std::set<int32_t> &pidList, const bool isFreeze)
2932 {
2933     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2934     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2935     return gsp->NotifyFreezeStateChange(pidList, isFreeze);
2936 }
2937 
ResetAllProxy()2938 int32_t AudioPolicyManager::ResetAllProxy()
2939 {
2940     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2941     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2942     return gsp->ResetAllProxy();
2943 }
2944 
NotifyProcessBackgroundState(const int32_t uid,const int32_t pid)2945 int32_t AudioPolicyManager::NotifyProcessBackgroundState(const int32_t uid, const int32_t pid)
2946 {
2947     AUDIO_INFO_LOG("In");
2948     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2949     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
2950     return gsp->NotifyProcessBackgroundState(uid, pid);
2951 }
2952 
SetAudioFormatUnsupportedErrorCallback(const std::shared_ptr<AudioFormatUnsupportedErrorCallback> & callback)2953 int32_t AudioPolicyManager::SetAudioFormatUnsupportedErrorCallback(
2954     const std::shared_ptr<AudioFormatUnsupportedErrorCallback> &callback)
2955 {
2956     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "callback is nullptr");
2957     if (!isAudioPolicyClientRegisted_) {
2958         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2959         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
2960         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
2961         CHECK_AND_RETURN_RET(ret == SUCCESS, ret);
2962     }
2963 
2964     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].mutex);
2965     CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, ERR_NULL_POINTER);
2966     audioPolicyClientStubCB_->AddAudioFormatUnsupportedErrorCallback(callback);
2967     if (audioPolicyClientStubCB_->GetAudioFormatUnsupportedErrorCallbackSize() == 1) {
2968         callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].isEnable = true;
2969         SetClientCallbacksEnable(CALLBACK_FORMAT_UNSUPPORTED_ERROR, true);
2970     }
2971     return SUCCESS;
2972 }
2973 
UnsetAudioFormatUnsupportedErrorCallback()2974 int32_t AudioPolicyManager::UnsetAudioFormatUnsupportedErrorCallback()
2975 {
2976     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].mutex);
2977     CHECK_AND_RETURN_RET(audioPolicyClientStubCB_ != nullptr, ERR_NULL_POINTER);
2978     audioPolicyClientStubCB_->RemoveAudioFormatUnsupportedErrorCallback();
2979     if (audioPolicyClientStubCB_->GetAudioFormatUnsupportedErrorCallbackSize() == 0) {
2980         callbackChangeInfos_[CALLBACK_FORMAT_UNSUPPORTED_ERROR].isEnable = false;
2981         SetClientCallbacksEnable(CALLBACK_FORMAT_UNSUPPORTED_ERROR, false);
2982     }
2983     return SUCCESS;
2984 }
2985 
GetDirectPlaybackSupport(const AudioStreamInfo & streamInfo,const StreamUsage & streamUsage)2986 DirectPlaybackMode AudioPolicyManager::GetDirectPlaybackSupport(const AudioStreamInfo &streamInfo,
2987     const StreamUsage &streamUsage)
2988 {
2989     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2990     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, DIRECT_PLAYBACK_NOT_SUPPORTED, "audio policy manager proxy is NULL.");
2991     int32_t ret = DIRECT_PLAYBACK_NOT_SUPPORTED;
2992     gsp->GetDirectPlaybackSupport(streamInfo, streamUsage, ret);
2993     return static_cast<DirectPlaybackMode>(ret);
2994 }
2995 
IsAcousticEchoCancelerSupported(SourceType sourceType)2996 bool AudioPolicyManager::IsAcousticEchoCancelerSupported(SourceType sourceType)
2997 {
2998     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
2999     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3000 
3001     bool isSupport = false;
3002     gsp->IsAcousticEchoCancelerSupported(sourceType, isSupport);
3003     return isSupport;
3004 }
3005 
SetKaraokeParameters(const std::string & parameters)3006 bool AudioPolicyManager::SetKaraokeParameters(const std::string &parameters)
3007 {
3008     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3009     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3010     bool ret = false;
3011     gsp->SetKaraokeParameters(parameters, ret);
3012     return ret;
3013 }
3014 
IsAudioLoopbackSupported(AudioLoopbackMode mode)3015 bool AudioPolicyManager::IsAudioLoopbackSupported(AudioLoopbackMode mode)
3016 {
3017     Trace trace("AudioPolicyManager::IsAudioLoopbackSupported");
3018     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3019     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3020     bool support = false;
3021     gsp->IsAudioLoopbackSupported(mode, support);
3022     return support;
3023 }
3024 
GetMaxVolumeLevelByUsage(StreamUsage streamUsage)3025 int32_t AudioPolicyManager::GetMaxVolumeLevelByUsage(StreamUsage streamUsage)
3026 {
3027     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3028     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3029     int32_t maxVolumeLevel = 0;
3030     gsp->GetMaxVolumeLevelByUsage(streamUsage, maxVolumeLevel);
3031     return maxVolumeLevel;
3032 }
GetMinVolumeLevelByUsage(StreamUsage streamUsage)3033 int32_t AudioPolicyManager::GetMinVolumeLevelByUsage(StreamUsage streamUsage)
3034 {
3035     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3036     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3037     int32_t minVolumeLevel = 0;
3038     gsp->GetMinVolumeLevelByUsage(streamUsage, minVolumeLevel);
3039     return minVolumeLevel;
3040 }
3041 
GetVolumeLevelByUsage(StreamUsage streamUsage)3042 int32_t AudioPolicyManager::GetVolumeLevelByUsage(StreamUsage streamUsage)
3043 {
3044     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3045     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3046     int32_t volumeLevel = 0;
3047     gsp->GetVolumeLevelByUsage(streamUsage, volumeLevel);
3048     return volumeLevel;
3049 }
3050 
GetStreamMuteByUsage(StreamUsage streamUsage)3051 bool AudioPolicyManager::GetStreamMuteByUsage(StreamUsage streamUsage)
3052 {
3053     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3054     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3055     bool isMute = false;
3056     gsp->GetStreamMuteByUsage(streamUsage, isMute);
3057     return isMute;
3058 }
3059 
GetVolumeInDbByStream(StreamUsage streamUsage,int32_t volumeLevel,DeviceType deviceType)3060 float AudioPolicyManager::GetVolumeInDbByStream(StreamUsage streamUsage, int32_t volumeLevel, DeviceType deviceType)
3061 {
3062     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3063     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3064     float volume = -1;
3065     int32_t ret = gsp->GetVolumeInDbByStream(static_cast<int32_t>(streamUsage), volumeLevel,
3066         static_cast<int32_t>(deviceType), volume);
3067     return ret == SUCCESS ? volume : ERR_INVALID_PARAM;
3068 }
3069 
GetSupportedAudioVolumeTypes()3070 std::vector<AudioVolumeType> AudioPolicyManager::GetSupportedAudioVolumeTypes()
3071 {
3072     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3073     std::vector<AudioVolumeType> retList = {};
3074     if (gsp == nullptr) {
3075         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
3076         return retList;
3077     }
3078     std::vector<int32_t> inList = {};
3079     gsp->GetSupportedAudioVolumeTypes(inList);
3080     for (auto &item : inList) {
3081         retList.push_back(static_cast<AudioVolumeType>(item));
3082     }
3083     return retList;
3084 }
3085 
GetAudioVolumeTypeByStreamUsage(StreamUsage streamUsage)3086 AudioVolumeType AudioPolicyManager::GetAudioVolumeTypeByStreamUsage(StreamUsage streamUsage)
3087 {
3088     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3089     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, AudioVolumeType::STREAM_DEFAULT, "audio policy manager proxy is NULL.");
3090     int32_t volumeType = AudioVolumeType::STREAM_DEFAULT;
3091     int32_t ret = gsp->GetAudioVolumeTypeByStreamUsage(streamUsage, volumeType);
3092     return ret == SUCCESS ? static_cast<AudioVolumeType>(volumeType) : AudioVolumeType::STREAM_DEFAULT;
3093 }
3094 
GetStreamUsagesByVolumeType(AudioVolumeType audioVolumeType)3095 std::vector<StreamUsage> AudioPolicyManager::GetStreamUsagesByVolumeType(AudioVolumeType audioVolumeType)
3096 {
3097     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3098     std::vector<StreamUsage> retList{};
3099     if (gsp == nullptr) {
3100         AUDIO_ERR_LOG("audio policy manager proxy is NULL.");
3101         return retList;
3102     }
3103     std::vector<int32_t> inList = {};
3104     gsp->GetStreamUsagesByVolumeType(static_cast<int32_t>(audioVolumeType), inList);
3105     for (auto &item : inList) {
3106         retList.push_back(static_cast<StreamUsage>(item));
3107     }
3108     return retList;
3109 }
3110 
3111 
SetStreamVolumeChangeCallback(const int32_t clientPid,const std::set<StreamUsage> & streamUsages,const std::shared_ptr<StreamVolumeChangeCallback> & callback)3112 int32_t AudioPolicyManager::SetStreamVolumeChangeCallback(const int32_t clientPid,
3113     const std::set<StreamUsage> &streamUsages, const std::shared_ptr<StreamVolumeChangeCallback> &callback)
3114 {
3115     AUDIO_INFO_LOG("SetVolumeKeyEventCallback: client: %{public}d", clientPid);
3116     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
3117 
3118     if (!isAudioPolicyClientRegisted_) {
3119         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3120         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3121         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
3122         if (ret != SUCCESS) {
3123             return ret;
3124         }
3125     }
3126 
3127     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].mutex);
3128     if (audioPolicyClientStubCB_ != nullptr) {
3129         audioPolicyClientStubCB_->AddStreamVolumeChangeCallback(streamUsages, callback);
3130         size_t callbackSize = audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackSize();
3131         if (callbackSize == 1) {
3132             callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].isEnable = true;
3133             SetClientCallbacksEnable(CALLBACK_STREAM_VOLUME_CHANGE, true);
3134         }
3135         SetCallbackStreamUsageInfo(audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackStreamUsages());
3136     }
3137     return SUCCESS;
3138 }
3139 
UnsetStreamVolumeChangeCallback(const std::shared_ptr<StreamVolumeChangeCallback> & callback)3140 int32_t AudioPolicyManager::UnsetStreamVolumeChangeCallback(
3141     const std::shared_ptr<StreamVolumeChangeCallback> &callback)
3142 {
3143     AUDIO_DEBUG_LOG("UnsetStreamVolumeKeyEventCallback");
3144     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].mutex);
3145     if (audioPolicyClientStubCB_ != nullptr) {
3146         audioPolicyClientStubCB_->RemoveStreamVolumeChangeCallback(callback);
3147         if (audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackSize() == 0) {
3148             callbackChangeInfos_[CALLBACK_STREAM_VOLUME_CHANGE].isEnable = false;
3149             SetClientCallbacksEnable(CALLBACK_STREAM_VOLUME_CHANGE, false);
3150         }
3151         SetCallbackStreamUsageInfo(audioPolicyClientStubCB_->GetStreamVolumeChangeCallbackStreamUsages());
3152     }
3153     return SUCCESS;
3154 }
3155 
SetCallbackStreamUsageInfo(const std::set<StreamUsage> & streamUsages)3156 int32_t AudioPolicyManager::SetCallbackStreamUsageInfo(const std::set<StreamUsage> &streamUsages)
3157 {
3158     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3159     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, -1, "audio policy manager proxy is NULL.");
3160 
3161     std::set<int32_t> streamUsagesIn;
3162     for (auto item : streamUsages) {
3163         streamUsagesIn.insert(static_cast<int32_t>(item));
3164     }
3165     return gsp->SetCallbackStreamUsageInfo(streamUsagesIn);
3166 }
3167 
IsCollaborativePlaybackSupported()3168 bool AudioPolicyManager::IsCollaborativePlaybackSupported()
3169 {
3170     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3171     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3172     bool support = false;
3173     gsp->IsCollaborativePlaybackSupported(support);
3174     return support;
3175 }
3176 
IsCollaborativePlaybackEnabledForDevice(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice)3177 bool AudioPolicyManager::IsCollaborativePlaybackEnabledForDevice(
3178     const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice)
3179 {
3180     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3181     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3182     bool enable = false;
3183     gsp->IsCollaborativePlaybackEnabledForDevice(selectedAudioDevice, enable);
3184     return enable;
3185 }
3186 
SetCollaborativePlaybackEnabledForDevice(const std::shared_ptr<AudioDeviceDescriptor> & selectedAudioDevice,bool enabled)3187 int32_t AudioPolicyManager::SetCollaborativePlaybackEnabledForDevice(
3188     const std::shared_ptr<AudioDeviceDescriptor> &selectedAudioDevice, bool enabled)
3189 {
3190     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3191     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_INVALID_PARAM, "audio policy manager proxy is NULL.");
3192     return gsp->SetCollaborativePlaybackEnabledForDevice(selectedAudioDevice, enabled);
3193 }
3194 
ForceStopAudioStream(StopAudioType audioType)3195 int32_t AudioPolicyManager::ForceStopAudioStream(StopAudioType audioType)
3196 {
3197     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3198     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3199     return gsp->ForceStopAudioStream(audioType);
3200 }
3201 
IsCapturerFocusAvailable(const AudioCapturerInfo & capturerInfo)3202 bool AudioPolicyManager::IsCapturerFocusAvailable(const AudioCapturerInfo &capturerInfo)
3203 {
3204     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3205     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, false, "audio policy manager proxy is NULL.");
3206     bool isAvailable = false;
3207     gsp->IsCapturerFocusAvailable(capturerInfo, isAvailable);
3208     return isAvailable;
3209 }
3210 
ForceVolumeKeyControlType(AudioVolumeType volumeType,int32_t duration)3211 int32_t AudioPolicyManager::ForceVolumeKeyControlType(AudioVolumeType volumeType, int32_t duration)
3212 {
3213     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3214     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3215     int32_t ret = ERROR;
3216     gsp->ForceVolumeKeyControlType(static_cast<int32_t>(volumeType), duration, ret);
3217     return ret;
3218 }
3219 
SetVolumeDegreeCallback(const int32_t clientPid,const std::shared_ptr<VolumeKeyEventCallback> & callback)3220 int32_t AudioPolicyManager::SetVolumeDegreeCallback(const int32_t clientPid,
3221     const std::shared_ptr<VolumeKeyEventCallback> &callback)
3222 {
3223     AUDIO_INFO_LOG("client: %{public}d", clientPid);
3224     if (!PermissionUtil::VerifySystemPermission()) {
3225         AUDIO_ERR_LOG("No system permission");
3226         return ERR_PERMISSION_DENIED;
3227     }
3228     CHECK_AND_RETURN_RET_LOG(callback != nullptr, ERR_INVALID_PARAM, "volume back is nullptr");
3229 
3230     if (!isAudioPolicyClientRegisted_) {
3231         const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3232         CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3233         int32_t ret = RegisterPolicyCallbackClientFunc(gsp);
3234         if (ret != SUCCESS) {
3235             return ret;
3236         }
3237     }
3238 
3239     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].mutex);
3240     if (audioPolicyClientStubCB_ != nullptr) {
3241         audioPolicyClientStubCB_->AddVolumeDegreeCallback(callback);
3242         size_t callbackSize = audioPolicyClientStubCB_->GetVolumeDegreeCallbackSize();
3243         if (callbackSize == 1) {
3244             callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].isEnable = true;
3245             SetClientCallbacksEnable(CALLBACK_SET_VOLUME_DEGREE_CHANGE, true);
3246         }
3247     }
3248     return SUCCESS;
3249 }
3250 
UnsetVolumeDegreeCallback(const std::shared_ptr<VolumeKeyEventCallback> & callback)3251 int32_t AudioPolicyManager::UnsetVolumeDegreeCallback(
3252     const std::shared_ptr<VolumeKeyEventCallback> &callback)
3253 {
3254     AUDIO_DEBUG_LOG("Start to unregister");
3255     std::lock_guard<std::mutex> lockCbMap(callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].mutex);
3256     if (audioPolicyClientStubCB_ != nullptr) {
3257         audioPolicyClientStubCB_->RemoveVolumeDegreeCallback(callback);
3258         if (audioPolicyClientStubCB_->GetVolumeDegreeCallbackSize() == 0) {
3259             callbackChangeInfos_[CALLBACK_SET_VOLUME_DEGREE_CHANGE].isEnable = false;
3260             SetClientCallbacksEnable(CALLBACK_SET_VOLUME_DEGREE_CHANGE, false, false);
3261         }
3262     }
3263     return SUCCESS;
3264 }
3265 
SetSystemVolumeDegree(AudioVolumeType volumeType,int32_t volumeDegree,int32_t volumeFlag,int32_t uid)3266 int32_t AudioPolicyManager::SetSystemVolumeDegree(AudioVolumeType volumeType, int32_t volumeDegree,
3267     int32_t volumeFlag, int32_t uid)
3268 {
3269     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3270     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERROR, "audio policy manager proxy is NULL.");
3271     return gsp->SetSystemVolumeDegree(volumeType, volumeDegree, volumeFlag, uid);
3272 }
3273 
GetSystemVolumeDegree(AudioVolumeType volumeType,int32_t uid)3274 int32_t AudioPolicyManager::GetSystemVolumeDegree(AudioVolumeType volumeType, int32_t uid)
3275 {
3276     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3277     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
3278 
3279     int32_t volumeDegree = 0;
3280     gsp->GetSystemVolumeDegree(volumeType, uid, volumeDegree);
3281     return volumeDegree;
3282 }
3283 
GetMinVolumeDegree(AudioVolumeType volumeType)3284 int32_t AudioPolicyManager::GetMinVolumeDegree(AudioVolumeType volumeType)
3285 {
3286     const sptr<IAudioPolicy> gsp = GetAudioPolicyManagerProxy();
3287     CHECK_AND_RETURN_RET_LOG(gsp != nullptr, 0, "audio policy manager proxy is NULL.");
3288 
3289     int32_t volumeDegree = 0;
3290     gsp->GetMinVolumeDegree(volumeType, volumeDegree);
3291     return volumeDegree;
3292 }
3293 
GetInstance()3294 AudioPolicyManager& AudioPolicyManager::GetInstance()
3295 {
3296     static AudioPolicyManager policyManager;
3297     return policyManager;
3298 }
3299 // LCOV_EXCL_STOP
3300 } // namespace AudioStandard
3301 } // namespace OHOS
3302