• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2025 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_VOLUME_GROUP_MANAGER_H
16 #define NAPI_AUDIO_VOLUME_GROUP_MANAGER_H
17 
18 #include <iostream>
19 #include <map>
20 #include <vector>
21 #include "napi/native_api.h"
22 #include "napi/native_node_api.h"
23 #include "napi_async_work.h"
24 #include "audio_system_manager.h"
25 
26 namespace OHOS {
27 namespace AudioStandard {
28 class NapiAudioVolumeGroupManager {
29 public:
30     static napi_value Init(napi_env env, napi_value exports);
31     static napi_value CreateAudioVolumeGroupManagerWrapper(napi_env env, int32_t groupId);
32 
33     static int32_t isConstructSuccess_;
34 
35 private:
36     struct AudioVolumeGroupManagerAsyncContext : public ContextBase {
37         int32_t volType;
38         int32_t volLevel;
39         int32_t volFlag;
40         int32_t uid;
41         int32_t deviceType;
42         int32_t ringMode;
43         int32_t scene;
44         int32_t deviceFlag;
45         int32_t intValue;
46         int32_t groupId;
47         int32_t adjustType;
48         int32_t volumeAdjustStatus;
49         bool isMute;
50         bool isActive;
51         bool isTrue;
52         double volumeInDb;
53         std::string key;
54         std::string valueStr;
55         int32_t networkId;
56         double inputMaxAmplitude;
57         double outputMaxAmplitude;
58         bool inputBArgTransFlag;
59         bool outputBArgTransFlag;
60         int32_t policyType;
61         std::shared_ptr<AudioDeviceDescriptor> inputDeviceDescriptor = std::make_shared<AudioDeviceDescriptor>();;
62         std::shared_ptr<AudioDeviceDescriptor> outputDeviceDescriptor = std::make_shared<AudioDeviceDescriptor>();;
63     };
64 
65     static void Destructor(napi_env env, void *nativeObject, void *finalizeHint);
66     static napi_value Construct(napi_env env, napi_callback_info info);
67     static napi_value GetActiveVolumeTypeSync(napi_env env, napi_callback_info info);
68     static napi_value GetVolume(napi_env env, napi_callback_info info);
69     static napi_value GetVolumeSync(napi_env env, napi_callback_info info);
70     static napi_value GetSystemVolumeByUid(napi_env env, napi_callback_info info);
71     static napi_value SetVolume(napi_env env, napi_callback_info info);
72     static napi_value SetVolumeWithFlag(napi_env env, napi_callback_info info);
73     static napi_value SetSystemVolumeByUid(napi_env env, napi_callback_info info);
74     static napi_value GetMaxVolume(napi_env env, napi_callback_info info);
75     static napi_value GetMaxVolumeSync(napi_env env, napi_callback_info info);
76     static napi_value GetMinVolume(napi_env env, napi_callback_info info);
77     static napi_value GetMinVolumeSync(napi_env env, napi_callback_info info);
78     static napi_value SetMute(napi_env env, napi_callback_info info);
79     static napi_value IsStreamMute(napi_env env, napi_callback_info info);
80     static napi_value IsStreamMuteSync(napi_env env, napi_callback_info info);
81     static napi_value SetRingerMode(napi_env env, napi_callback_info info);
82     static napi_value GetRingerMode(napi_env env, napi_callback_info info);
83     static napi_value GetRingerModeSync(napi_env env, napi_callback_info info);
84     static napi_value SetMicrophoneMute(napi_env env, napi_callback_info info);
85     static napi_value IsMicrophoneMute(napi_env env, napi_callback_info info);
86     static napi_value IsMicrophoneMuteSync(napi_env env, napi_callback_info info);
87     static napi_value SetMicMute(napi_env env, napi_callback_info info);
88     static napi_value SetMicMutePersistent(napi_env env, napi_callback_info info);
89     static napi_value GetPersistentMicMuteState(napi_env env, napi_callback_info info);
90     static napi_value IsVolumeUnadjustable(napi_env env, napi_callback_info info);
91     static napi_value AdjustVolumeByStep(napi_env env, napi_callback_info info);
92     static napi_value AdjustSystemVolumeByStep(napi_env env, napi_callback_info info);
93     static napi_value GetSystemVolumeInDb(napi_env env, napi_callback_info info);
94     static napi_value GetSystemVolumeInDbSync(napi_env env, napi_callback_info info);
95     static napi_value On(napi_env env, napi_callback_info info);
96     static napi_value Off(napi_env env, napi_callback_info info);
97     static napi_value GetMaxAmplitudeForOutputDevice(napi_env env, napi_callback_info info);
98     static napi_value GetMaxAmplitudeForInputDevice(napi_env env, napi_callback_info info);
99 
100     static napi_value RegisterCallback(napi_env env, napi_value jsThis, size_t argc, napi_value *args,
101         const std::string &cbName);
102     static napi_value UnregisterCallback(napi_env env, napi_value jsThis, size_t argc, napi_value *args,
103         const std::string &cbName);
104     static void UnregisterRingerModeCallback(NapiAudioVolumeGroupManager *napiAudioVolumeGroupManager,
105         size_t argc, napi_value *args);
106     static void UnregisterMicStateChangeCallback(NapiAudioVolumeGroupManager *napiAudioVolumeGroupManager,
107         size_t argc, napi_value *args);
108     static napi_value RegisterMicStateChangeCallback(napi_env env, napi_value *args, const std::string &cbName,
109         NapiAudioVolumeGroupManager *napiAudioVolumeGroupManager);
110     static napi_value RegisterRingModeCallback(napi_env env, napi_value *args, const std::string &cbName,
111         NapiAudioVolumeGroupManager *napiAudioVolumeGroupManager);
112     static napi_status InitNapiAudioVolumeGroupManager(napi_env env, napi_value &constructor);
113     static bool CheckContextStatus(std::shared_ptr<AudioVolumeGroupManagerAsyncContext> context);
114     static bool CheckAudioVolumeGroupManagerStatus(NapiAudioVolumeGroupManager *napi,
115         std::shared_ptr<AudioVolumeGroupManagerAsyncContext> context);
116     static NapiAudioVolumeGroupManager* GetParamWithSync(const napi_env &env, napi_callback_info info,
117         size_t &argc, napi_value *args);
118 
119     static std::mutex volumeGroupManagerMutex_;
120 
121     std::shared_ptr<AudioGroupManager> audioGroupMngr_ = nullptr;
122     int32_t cachedClientId_ = -1;
123     std::shared_ptr<AudioRingerModeCallback> ringerModecallbackNapi_ = nullptr;
124     std::shared_ptr<AudioManagerMicStateChangeCallback> micStateChangeCallbackNapi_ = nullptr;
125 };
126 }  // namespace AudioStandard
127 }  // namespace OHOS
128 #endif /* NAPI_AUDIO_VOLUME_GROUP_MANAGER_H */
129