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