• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #ifndef SYSTEM_SOUND_MNGR_NAPI_H
17 #define SYSTEM_SOUND_MNGR_NAPI_H
18 
19 #include "system_sound_manager.h"
20 
21 #include "ringtone_player_napi.h"
22 #include "system_tone_player_napi.h"
23 #include "tone_attrs_napi.h"
24 #include "tone_haptics_attrs_napi.h"
25 #include "tone_haptics_settings_napi.h"
26 
27 #include "napi/native_api.h"
28 #include "napi/native_node_api.h"
29 #include "napi_base_context.h"
30 #include "ability.h"
31 
32 namespace OHOS {
33 namespace Media {
34 static const std::string SYSTEM_SND_MNGR_NAPI_CLASS_NAME = "SystemSoundManager";
35 
36 static const std::map<std::string, RingtoneType> ringtoneTypeMap = {
37     {"RINGTONE_TYPE_DEFAULT", RINGTONE_TYPE_SIM_CARD_0}, // deprecated
38     {"RINGTONE_TYPE_MULTISIM", RINGTONE_TYPE_SIM_CARD_1}, // deprecated
39     {"RINGTONE_TYPE_SIM_CARD_0", RINGTONE_TYPE_SIM_CARD_0},
40     {"RINGTONE_TYPE_SIM_CARD_1", RINGTONE_TYPE_SIM_CARD_1}
41 };
42 
43 static const std::map<std::string, SystemToneType> systemToneTypeMap = {
44     {"SYSTEM_TONE_TYPE_SIM_CARD_0", SYSTEM_TONE_TYPE_SIM_CARD_0},
45     {"SYSTEM_TONE_TYPE_SIM_CARD_1", SYSTEM_TONE_TYPE_SIM_CARD_1},
46     {"SYSTEM_TONE_TYPE_NOTIFICATION", SYSTEM_TONE_TYPE_NOTIFICATION}
47 };
48 
49 static const std::map<std::string, ToneHapticsType> toneHapticsTypeMap = {
50     {"CALL_SIM_CARD_0", CALL_SIM_CARD_0},
51     {"CALL_SIM_CARD_1", CALL_SIM_CARD_1},
52     {"TEXT_MESSAGE_SIM_CARD_0", TEXT_MESSAGE_SIM_CARD_0},
53     {"TEXT_MESSAGE_SIM_CARD_1", TEXT_MESSAGE_SIM_CARD_1},
54     {"NOTIFICATION", NOTIFICATION},
55 };
56 
57 static const std::map<std::string, ToneCustomizedType> toneCustomizedTypeMap = {
58     {"PRE_INSTALLED", PRE_INSTALLED},
59     {"CUSTOMISED",  CUSTOMISED}
60 };
61 
62 static const std::map<std::string, ToneHapticsMode> toneHapticsModeMap = {
63     {"NONE", NONE},
64     {"SYNC", SYNC},
65     {"NON_SYNC", NON_SYNC},
66 };
67 
68 class SystemSoundManagerNapi {
69 public:
70     static napi_value Init(napi_env env, napi_value exports);
71 
72     SystemSoundManagerNapi();
73     ~SystemSoundManagerNapi();
74 
75 private:
76     static napi_status DefineClassProperties(napi_env env, napi_value &ctorObj);
77     static napi_status DefineStaticProperties(napi_env env, napi_value exports);
78     static void Destructor(napi_env env, void* nativeObject, void* finalize_hint);
79     static napi_value Construct(napi_env env, napi_callback_info info);
80     static napi_value CreateCustomizedToneAttrs(napi_env env, napi_callback_info info);
81     static napi_value GetSystemSoundManager(napi_env env, napi_callback_info info);
82     static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue);
83     static napi_value CreateRingtoneTypeObject(napi_env env);
84     static napi_value CreateSystemToneTypeObject(napi_env env);
85     static napi_value CreateToneCustomizedTypeObject(napi_env env);
86     static napi_value CreateToneCategoryRingtoneObject(napi_env env);
87     static napi_value CreateToneCategoryTextMessageObject(napi_env env);
88     static napi_value CreateToneCategoryNotificationObject(napi_env env);
89     static napi_value CreateToneCategoryContactsObject(napi_env env);
90     static napi_value CreateToneCategoryAlarmObject(napi_env env);
91     static napi_value CreateToneHapticsTypeObject(napi_env env);
92     static napi_value CreateToneHapticsModeObject(napi_env env);
93     static std::shared_ptr<AbilityRuntime::Context> GetAbilityContext(napi_env env, napi_value contextArg);
94     static bool VerifySelfSystemPermission();
95     static bool VerifyRingtonePermission();
96 
97     static napi_value SetRingtoneUri(napi_env env, napi_callback_info info);
98     static void AsyncSetRingtoneUri(napi_env env, void *data);
99     static napi_value GetRingtoneUri(napi_env env, napi_callback_info info);
100     static void AsyncGetRingtoneUri(napi_env env, void *data);
101     static napi_value GetDefaultRingtoneAttrs(napi_env env, napi_callback_info info);
102     static void AsyncGetDefaultRingtoneAttrs(napi_env env, void *data);
103     static napi_value GetRingtoneAttrList(napi_env env, napi_callback_info info);
104     static void AsyncGetRingtoneAttrList(napi_env env, void *data);
105     static napi_value GetRingtonePlayer(napi_env env, napi_callback_info info);
106     static void AsyncGetRingtonePlayer(napi_env env, void *data);
107 
108     static napi_value SetSystemToneUri(napi_env env, napi_callback_info info);
109     static void AsyncSetSystemToneUri(napi_env env, void *data);
110     static napi_value GetSystemToneUri(napi_env env, napi_callback_info info);
111     static void AsyncGetSystemToneUri(napi_env env, void *data);
112     static napi_value GetDefaultSystemToneAttrs(napi_env env, napi_callback_info info);
113     static void AsyncGetDefaultSystemToneAttrs(napi_env env, void *data);
114     static napi_value GetSystemToneAttrList(napi_env env, napi_callback_info info);
115     static void AsyncGetSystemToneAttrList(napi_env env, void *data);
116     static napi_value GetSystemTonePlayer(napi_env env, napi_callback_info info);
117     static void AsyncGetSystemTonePlayer(napi_env env, void *data);
118 
119     static napi_value SetAlarmToneUri(napi_env env, napi_callback_info info);
120     static void AsyncSetAlarmToneUri(napi_env env, void *data);
121     static napi_value GetAlarmToneUri(napi_env env, napi_callback_info info);
122     static void AsyncGetAlarmToneUri(napi_env env, void *data);
123     static napi_value GetDefaultAlarmToneAttrs(napi_env env, napi_callback_info info);
124     static void AsyncGetDefaultAlarmToneAttrs(napi_env env, void *data);
125     static napi_value GetAlarmToneAttrList(napi_env env, napi_callback_info info);
126     static void AsyncGetAlarmToneAttrList(napi_env env, void *data);
127 
128     static void SetSystemSoundUriAsyncCallbackComp(napi_env env, napi_status status, void* data);
129     static void GetSystemSoundUriAsyncCallbackComp(napi_env env, napi_status status, void* data);
130     static void GetDefaultAttrsAsyncCallbackComp(napi_env env, napi_status status, void* data);
131     static void GetToneAttrsListAsyncCallbackComp(napi_env env, napi_status status, void* data);
132     static void GetRingtonePlayerAsyncCallbackComp(napi_env env, napi_status status, void* data);
133     static void GetSystemTonePlayerAsyncCallbackComp(napi_env env, napi_status status, void* data);
134 
135     static napi_value OpenAlarmTone(napi_env env, napi_callback_info info);
136     static void AsyncOpenAlarmTone(napi_env env, void *data);
137     static void OpenAlarmToneAsyncCallbackComp(napi_env env, napi_status status, void* data);
138     static napi_value Close(napi_env env, napi_callback_info info);
139     static void AsyncClose(napi_env env, void *data);
140     static void CloseAsyncCallbackComp(napi_env env, napi_status status, void* data);
141     static napi_value AddCustomizedTone(napi_env env, napi_callback_info info);
142     static void AsyncAddCustomizedTone(napi_env env, void *data);
143     static void DealErrorForAddCustomizedTone(std::string &uri, bool &status, int32_t &errCode,
144         std::string &errMessage, bool &duplicateFile);
145     static void AddCustomizedToneAsyncCallbackComp(napi_env env, napi_status status, void* data);
146     static napi_value RemoveCustomizedTone(napi_env env, napi_callback_info info);
147     static void AsyncRemoveCustomizedTone(napi_env env, void *data);
148     static void RemoveCustomizedToneAsyncCallbackComp(napi_env env, napi_status status, void* data);
149     static napi_value ThrowErrorAndReturn(napi_env env, const std::string& napiMessage, int32_t napiCode);
150     static napi_value AsyncThrowErrorAndReturn(napi_env env, const std::string& napiMessage, int32_t napiCode);
151 
152     static napi_value GetToneHapticsSettings(napi_env env, napi_callback_info info);
153     static void AsyncGetToneHapticsSettings(napi_env env, void *data);
154     static void GetToneHapticsSettingsAsyncCallbackComp(napi_env env, napi_status status, void *data);
155     static napi_value SetToneHapticsSettings(napi_env env, napi_callback_info info);
156     static void AsyncSetToneHapticsSettings(napi_env env, void *data);
157     static void SetToneHapticsSettingsAsyncCallbackComp(napi_env env, napi_status status, void *data);
158     static napi_value GetToneHapticsList(napi_env env, napi_callback_info info);
159     static void AsyncGetToneHapticsList(napi_env env, void *data);
160     static void GetToneHapticsListAsyncCallbackComp(napi_env env, napi_status status, void *data);
161     static napi_value GetHapticsAttrsSyncedWithTone(napi_env env, napi_callback_info info);
162     static void AsyncGetHapticsAttrsSyncedWithTone(napi_env env, void *data);
163     static void GetHapticsAttrsSyncedWithToneAsyncCallbackComp(napi_env env, napi_status status, void *data);
164     static napi_value OpenToneHaptics(napi_env env, napi_callback_info info);
165     static void AsyncOpenToneHaptics(napi_env env, void *data);
166     static void OpenToneHapticsAsyncCallbackComp(napi_env env, napi_status status, void *data);
167     static void GetToneHapticsSettingsToEnv(const napi_env &env, const napi_value &argv,
168         ToneHapticsSettings &toneHapticsSettings);
169     static std::string ExtractStringToEnv(const napi_env &env, const napi_value &argv);
170     static napi_value GetCurrentRingtoneAttribute(napi_env env, napi_callback_info info);
171     static void AsyncGetCurrentRingtoneAttribute(napi_env env, void *data);
172     static napi_value RemoveCustomizedToneList(napi_env env, napi_callback_info info);
173     static void AsyncRemoveCustomizedToneList(napi_env env, void *data);
174     static void RemoveCustomizedToneListAsyncCallbackComp(napi_env env, napi_status status, void *data);
175     static napi_status GetUriVector(const napi_env &env, std::vector<std::string> &uriList, napi_value in);
176     static std::string GetStringArgument(napi_env env, napi_value value);
177     static napi_value OpenToneList(napi_env env, napi_callback_info info);
178     static void AsyncOpenToneList(napi_env env, void *data);
179     static void AsyncOpenToneListAsyncCallbackComp(napi_env env, napi_status status, void *data);
180 
181     static thread_local napi_ref sConstructor_;
182     static thread_local napi_ref ringtoneType_;
183     static thread_local napi_ref systemToneType_;
184     static thread_local napi_ref toneCustomizedType_;
185     static thread_local napi_ref toneHapticsMode_;
186 
187     napi_env env_;
188 
189     std::shared_ptr<SystemSoundManager> sysSoundMgrClient_ = nullptr;
190 };
191 
192 struct SystemSoundManagerAsyncContext {
193     napi_env env;
194     napi_async_work work;
195     napi_deferred deferred;
196     napi_ref callbackRef;
197     bool status;
198     SystemSoundManagerNapi *objectInfo;
199     std::shared_ptr<AbilityRuntime::Context> abilityContext_;
200     std::string uri;
201     std::shared_ptr<RingtonePlayer> ringtonePlayer;
202     int32_t ringtoneType;
203     std::shared_ptr<SystemTonePlayer> systemTonePlayer;
204     int32_t systemToneType;
205     std::shared_ptr<ToneAttrsNapi> toneAttrsNapi;
206     std::shared_ptr<ToneAttrs> toneAttrs;
207     std::vector<std::shared_ptr<ToneAttrs>> toneAttrsArray;
208     std::string externalUri;
209     int32_t fd;
210     int32_t offset = 0;
211     int32_t length = 0;
212     int32_t result;
213     int32_t errCode;
214     std::string errMessage;
215     bool isSynced;
216     std::vector<std::shared_ptr<ToneHapticsAttrs>> toneHapticsAttrsArray;
217     std::shared_ptr<ToneHapticsAttrs> toneHapticsAttrs;
218     std::string toneUri;
219     std::string hapticsUri;
220     int32_t toneHapticsType;
221     ToneHapticsSettings toneHapticsSettings;
222     std::vector<std::pair<std::string, SystemSoundError>> removeResultArray;
223     std::vector<std::string> uriList;
224     std::vector<std::tuple<std::string, int64_t, SystemSoundError>> openToneResultArray;
225 };
226 } // namespace Media
227 } // namespace OHOS
228 #endif // SYSTEM_SOUND_MNGR_NAPI_H