1 /*
2  * Copyright (c) 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 "AudioSessionManager"
17 #endif
18 
19 #include "audio_session_manager.h"
20 
21 #include "audio_errors.h"
22 #include "audio_log.h"
23 #include "audio_policy_manager.h"
24 
25 namespace OHOS {
26 namespace AudioStandard {
27 using namespace std;
GetInstance()28 AudioSessionManager *AudioSessionManager::GetInstance()
29 {
30     static AudioSessionManager audioSessionManager;
31     return &audioSessionManager;
32 }
33 
ActivateAudioSession(const AudioSessionStrategy & strategy)34 int32_t AudioSessionManager::ActivateAudioSession(const AudioSessionStrategy &strategy)
35 {
36     AUDIO_INFO_LOG("Activate audio session with strategy: %{public}d", static_cast<int32_t>(strategy.concurrencyMode));
37     return AudioPolicyManager::GetInstance().ActivateAudioSession(strategy);
38 }
39 
DeactivateAudioSession()40 int32_t AudioSessionManager::DeactivateAudioSession()
41 {
42     AUDIO_INFO_LOG("in");
43     return AudioPolicyManager::GetInstance().DeactivateAudioSession();
44 }
45 
IsAudioSessionActivated()46 bool AudioSessionManager::IsAudioSessionActivated()
47 {
48     AUDIO_INFO_LOG("in");
49     return AudioPolicyManager::GetInstance().IsAudioSessionActivated();
50 }
51 
SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)52 int32_t AudioSessionManager::SetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
53 {
54     AUDIO_INFO_LOG("in");
55     CHECK_AND_RETURN_RET_LOG(audioSessionCallback != nullptr, ERR_INVALID_PARAM, "audioSessionCallback is null");
56 
57     int32_t result = AudioPolicyManager::GetInstance().SetAudioSessionCallback(audioSessionCallback);
58     CHECK_AND_RETURN_RET_LOG(result == SUCCESS, ERR_OPERATION_FAILED,
59         "SetAudioSessionCallback result:%{public}d", result);
60     return result;
61 }
62 
UnsetAudioSessionCallback()63 int32_t AudioSessionManager::UnsetAudioSessionCallback()
64 {
65     AUDIO_INFO_LOG("Unset all audio session callbacks");
66     int32_t result = AudioPolicyManager::GetInstance().UnsetAudioSessionCallback();
67     CHECK_AND_RETURN_RET_LOG(result == SUCCESS, ERR_OPERATION_FAILED,
68         "UnsetAudioSessionCallback(all) result:%{public}d", result);
69     return result;
70 }
71 
UnsetAudioSessionCallback(const std::shared_ptr<AudioSessionCallback> & audioSessionCallback)72 int32_t AudioSessionManager::UnsetAudioSessionCallback(
73     const std::shared_ptr<AudioSessionCallback> &audioSessionCallback)
74 {
75     AUDIO_INFO_LOG("Unset one audio session callback");
76     CHECK_AND_RETURN_RET_LOG(audioSessionCallback != nullptr, ERR_INVALID_PARAM, "audioSessionCallback is null");
77 
78     int32_t result = AudioPolicyManager::GetInstance().UnsetAudioSessionCallback(audioSessionCallback);
79     CHECK_AND_RETURN_RET_LOG(result == SUCCESS, ERR_OPERATION_FAILED,
80         "UnsetAudioSessionCallback result:%{public}d", result);
81     return result;
82 }
83 } // namespace AudioStandard
84 } // namespace OHOS
85