1 /* 2 * Copyright (c) 2023 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 NAPI_AUDIO_SESSION_MANAGER_H 16 #define NAPI_AUDIO_SESSION_MANAGER_H 17 18 #include "napi/native_api.h" 19 #include "napi/native_node_api.h" 20 #include "napi_async_work.h" 21 #include "audio_system_manager.h" 22 #include "audio_session_info.h" 23 #include "audio_session_manager.h" 24 25 namespace OHOS { 26 namespace AudioStandard { 27 const std::string AUDIOSESSION_CALLBACK_NAME = "audioSessionDeactivated"; 28 29 class NapiAudioSessionMgr { 30 public: 31 NapiAudioSessionMgr(); 32 ~NapiAudioSessionMgr(); 33 34 static napi_value Init(napi_env env, napi_value exports); 35 static napi_value CreateSessionManagerWrapper(napi_env env); 36 37 private: 38 struct AudioSessionMgrAsyncContext : public ContextBase { 39 int32_t intValue; 40 int32_t volType; 41 int32_t contentType; 42 bool isTrue; 43 bool isActive; 44 NapiAudioSessionMgr *objectInfo; 45 AudioSessionStrategy audioSessionStrategy; 46 }; 47 48 static napi_value Construct(napi_env env, napi_callback_info info); 49 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 50 static napi_value On(napi_env env, napi_callback_info info); 51 static napi_value Off(napi_env env, napi_callback_info info); 52 static bool CheckContextStatus(std::shared_ptr<AudioSessionMgrAsyncContext> context); 53 static napi_value ActivateAudioSession(napi_env env, napi_callback_info info); 54 static napi_value DeactivateAudioSession(napi_env env, napi_callback_info info); 55 static napi_value IsAudioSessionActivated(napi_env env, napi_callback_info info); 56 static void RegisterCallback(napi_env env, napi_value jsThis, napi_value *args, const std::string &cbName); 57 static void UnregisterCallback(napi_env env, napi_value jsThis); 58 static void UnregisterCallbackCarryParam(napi_env env, napi_value jsThis, napi_value *args, size_t len); 59 static void RegisterAudioSessionCallback(napi_env env, napi_value *args, 60 const std::string &cbName, NapiAudioSessionMgr *napiSessionMgr); 61 static void UnsetAudioSessionCallback(napi_env env, napi_value *args, 62 const std::string &cbName, NapiAudioSessionMgr *napiSessionMgr); 63 64 napi_env env_; 65 AudioSessionManager *audioSessionMngr_; 66 std::shared_ptr<AudioSessionCallback> audioSessionCallbackNapi_ = nullptr; 67 }; 68 } // namespace AudioStandard 69 } // namespace OHOS 70 #endif /* NAPI_AUDIO_SESSION_MANAGER_H */ 71