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 
16 #ifndef LOG_TAG
17 #define LOG_TAG "OHAudioSessionManager"
18 #endif
19 
20 #include "OHAudioSessionManager.h"
21 #include <ostream>
22 #include <iostream>
23 
24 using OHOS::AudioStandard::OHAudioSessionManager;
25 using OHOS::AudioStandard::AudioSessionManager;
26 using namespace std;
27 
convertManager(OH_AudioSessionManager * manager)28 static OHOS::AudioStandard::OHAudioSessionManager *convertManager(OH_AudioSessionManager* manager)
29 {
30     return (OHAudioSessionManager*) manager;
31 }
32 
33 
OH_AudioManager_GetAudioSessionManager(OH_AudioSessionManager ** audioSessionManager)34 OH_AudioCommon_Result OH_AudioManager_GetAudioSessionManager(OH_AudioSessionManager **audioSessionManager)
35 {
36     OHAudioSessionManager* ohAudioSessionManager = OHAudioSessionManager::GetInstance();
37     *audioSessionManager = reinterpret_cast<OH_AudioSessionManager*>(ohAudioSessionManager);
38     return AUDIOCOMMON_RESULT_SUCCESS;
39 }
40 
OH_AudioSessionManager_RegisterSessionDeactivatedCallback(OH_AudioSessionManager * audioSessionManager,OH_AudioSession_DeactivatedCallback callback)41 OH_AudioCommon_Result OH_AudioSessionManager_RegisterSessionDeactivatedCallback(
42     OH_AudioSessionManager *audioSessionManager, OH_AudioSession_DeactivatedCallback callback)
43 {
44     OHAudioSessionManager* ohAudioSessionManager = convertManager(audioSessionManager);
45     CHECK_AND_RETURN_RET_LOG(ohAudioSessionManager != nullptr,
46         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "ohAudioSessionManager is nullptr");
47     CHECK_AND_RETURN_RET_LOG(callback != nullptr, AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "callback is nullptr");
48     return ohAudioSessionManager->SetAudioSessionCallback(callback);
49 }
50 
OH_AudioSessionManager_UnregisterSessionDeactivatedCallback(OH_AudioSessionManager * audioSessionManager,OH_AudioSession_DeactivatedCallback callback)51 OH_AudioCommon_Result OH_AudioSessionManager_UnregisterSessionDeactivatedCallback(
52     OH_AudioSessionManager *audioSessionManager, OH_AudioSession_DeactivatedCallback callback)
53 {
54     OHAudioSessionManager* ohAudioSessionManager = convertManager(audioSessionManager);
55     CHECK_AND_RETURN_RET_LOG(ohAudioSessionManager != nullptr,
56         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "ohAudioSessionManager is nullptr");
57     CHECK_AND_RETURN_RET_LOG(callback != nullptr, AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "callback is nullptr");
58     return ohAudioSessionManager->UnsetAudioSessionCallback(callback);
59 }
60 
OH_AudioSessionManager_ActivateAudioSession(OH_AudioSessionManager * audioSessionManager,const OH_AudioSession_Strategy * strategy)61 OH_AudioCommon_Result OH_AudioSessionManager_ActivateAudioSession(
62     OH_AudioSessionManager *audioSessionManager, const OH_AudioSession_Strategy *strategy)
63 {
64     OHAudioSessionManager* ohAudioSessionManager = convertManager(audioSessionManager);
65     CHECK_AND_RETURN_RET_LOG(ohAudioSessionManager != nullptr,
66         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "ohAudioSessionManager is nullptr");
67     OHOS::AudioStandard::AudioSessionStrategy audioStrategy;
68     audioStrategy.concurrencyMode =
69         static_cast<OHOS::AudioStandard::AudioConcurrencyMode>(strategy->concurrencyMode);
70     return ohAudioSessionManager->ActivateAudioSession(audioStrategy);
71 }
72 
OH_AudioSessionManager_DeactivateAudioSession(OH_AudioSessionManager * audioSessionManager)73 OH_AudioCommon_Result OH_AudioSessionManager_DeactivateAudioSession(
74     OH_AudioSessionManager *audioSessionManager)
75 {
76     OHAudioSessionManager* ohAudioSessionManager = convertManager(audioSessionManager);
77     CHECK_AND_RETURN_RET_LOG(ohAudioSessionManager != nullptr,
78         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "ohAudioSessionManager is nullptr");
79     return ohAudioSessionManager->DeactivateAudioSession();
80 }
81 
OH_AudioSessionManager_IsAudioSessionActivated(OH_AudioSessionManager * audioSessionManager)82 bool OH_AudioSessionManager_IsAudioSessionActivated(
83     OH_AudioSessionManager *audioSessionManager)
84 {
85     OHAudioSessionManager* ohAudioSessionManager = convertManager(audioSessionManager);
86     CHECK_AND_RETURN_RET_LOG(ohAudioSessionManager != nullptr, false, "ohAudioSessionManager is nullptr");
87     return ohAudioSessionManager->IsAudioSessionActivated();
88 }
89 
90 
91 namespace OHOS {
92 namespace AudioStandard {
93 
OHAudioSessionManager()94 OHAudioSessionManager::OHAudioSessionManager()
95 {
96     AUDIO_INFO_LOG("OHAudioSessionManager created!");
97 }
98 
~OHAudioSessionManager()99 OHAudioSessionManager::~OHAudioSessionManager()
100 {
101     AUDIO_INFO_LOG("OHAudioSessionManager destroyed!");
102 }
103 
SetAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback)104 OH_AudioCommon_Result OHAudioSessionManager::SetAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback)
105 {
106     CHECK_AND_RETURN_RET_LOG(audioSessionManager_ != nullptr,
107         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "failed, audioSessionManager_ is null");
108     std::shared_ptr<OHAudioSessionCallback> ohAudioSessionCallback =
109         std::make_shared<OHAudioSessionCallback>(callback);
110     if (ohAudioSessionCallback != nullptr) {
111         audioSessionManager_->SetAudioSessionCallback(ohAudioSessionCallback);
112         return AUDIOCOMMON_RESULT_SUCCESS;
113     }
114     return AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM;
115 }
116 
UnsetAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback)117 OH_AudioCommon_Result OHAudioSessionManager::UnsetAudioSessionCallback(OH_AudioSession_DeactivatedCallback callback)
118 {
119     CHECK_AND_RETURN_RET_LOG(audioSessionManager_ != nullptr,
120         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "failed, audioSessionManager_ is null");
121     std::shared_ptr<OHAudioSessionCallback> ohAudioSessionCallback =
122         std::make_shared<OHAudioSessionCallback>(callback);
123     audioSessionManager_->UnsetAudioSessionCallback(ohAudioSessionCallback);
124     return AUDIOCOMMON_RESULT_SUCCESS;
125 }
126 
ActivateAudioSession(const AudioSessionStrategy & strategy)127 OH_AudioCommon_Result OHAudioSessionManager::ActivateAudioSession(const AudioSessionStrategy &strategy)
128 {
129     CHECK_AND_RETURN_RET_LOG(audioSessionManager_ != nullptr,
130         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "failed, audioSessionManager_ is null");
131     int32_t ret = audioSessionManager_->ActivateAudioSession(strategy);
132     if (ret == 0) {
133         return AUDIOCOMMON_RESULT_SUCCESS;
134     } else {
135         return AUDIOCOMMON_RESULT_ERROR_ILLEGAL_STATE;
136     }
137 }
138 
DeactivateAudioSession()139 OH_AudioCommon_Result OHAudioSessionManager::DeactivateAudioSession()
140 {
141     CHECK_AND_RETURN_RET_LOG(audioSessionManager_ != nullptr,
142         AUDIOCOMMON_RESULT_ERROR_INVALID_PARAM, "failed, audioSessionManager_ is null");
143     int32_t ret = audioSessionManager_->DeactivateAudioSession();
144     if (ret == 0) {
145         return AUDIOCOMMON_RESULT_SUCCESS;
146     } else {
147         return AUDIOCOMMON_RESULT_ERROR_ILLEGAL_STATE;
148     }
149 }
150 
IsAudioSessionActivated()151 bool OHAudioSessionManager::IsAudioSessionActivated()
152 {
153     CHECK_AND_RETURN_RET_LOG(audioSessionManager_ != nullptr, false, "failed, audioSessionManager_ is null");
154     return audioSessionManager_->IsAudioSessionActivated();
155 }
156 
OnAudioSessionDeactive(const AudioSessionDeactiveEvent & deactiveEvent)157 void OHAudioSessionCallback::OnAudioSessionDeactive(const AudioSessionDeactiveEvent &deactiveEvent)
158 {
159     OH_AudioSession_DeactivatedEvent event;
160     event.reason = static_cast<OH_AudioSession_DeactivatedReason>(deactiveEvent.deactiveReason);
161     callback_(event);
162 }
163 
164 } // namespace AudioStandard
165 } // namespace OHOS