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