• 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 
25 #include "napi/native_api.h"
26 #include "napi/native_node_api.h"
27 #include "napi_base_context.h"
28 #include "ability.h"
29 
30 namespace OHOS {
31 namespace Media {
32 static const std::string SYSTEM_SND_MNGR_NAPI_CLASS_NAME = "SystemSoundManager";
33 
34 static const std::map<std::string, RingtoneType> ringtoneTypeMap = {
35     {"RINGTONE_TYPE_DEFAULT", RINGTONE_TYPE_SIM_CARD_0}, // deprecated
36     {"RINGTONE_TYPE_MULTISIM", RINGTONE_TYPE_SIM_CARD_1}, // deprecated
37     {"RINGTONE_TYPE_SIM_CARD_0", RINGTONE_TYPE_SIM_CARD_0},
38     {"RINGTONE_TYPE_SIM_CARD_1", RINGTONE_TYPE_SIM_CARD_1}
39 };
40 
41 static const std::map<std::string, SystemToneType> systemToneTypeMap = {
42     {"SYSTEM_TONE_TYPE_SIM_CARD_0", SYSTEM_TONE_TYPE_SIM_CARD_0},
43     {"SYSTEM_TONE_TYPE_SIM_CARD_1", SYSTEM_TONE_TYPE_SIM_CARD_1},
44     {"SYSTEM_TONE_TYPE_NOTIFICATION", SYSTEM_TONE_TYPE_NOTIFICATION}
45 };
46 
47 static const std::map<std::string, ToneCustomizedType> toneCustomizedTypeMap = {
48     {"PRE_INSTALLED", PRE_INSTALLED},
49     {"CUSTOMISED",  CUSTOMISED}
50 };
51 
52 class SystemSoundManagerNapi {
53 public:
54     static napi_value Init(napi_env env, napi_value exports);
55 
56     SystemSoundManagerNapi();
57     ~SystemSoundManagerNapi();
58 
59 private:
60     static void Destructor(napi_env env, void* nativeObject, void* finalize_hint);
61     static napi_value Construct(napi_env env, napi_callback_info info);
62     static napi_value CreateCustomizedToneAttrs(napi_env env, napi_callback_info info);
63     static napi_value GetSystemSoundManager(napi_env env, napi_callback_info info);
64     static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue);
65     static napi_value CreateRingtoneTypeObject(napi_env env);
66     static napi_value CreateSystemToneTypeObject(napi_env env);
67     static napi_value CreateToneCustomizedTypeObject(napi_env env);
68     static napi_value CreateToneCategoryRingtoneObject(napi_env env);
69     static napi_value CreateToneCategoryTextMessageObject(napi_env env);
70     static napi_value CreateToneCategoryNotificationObject(napi_env env);
71     static napi_value CreateToneCategoryAlarmObject(napi_env env);
72     static std::shared_ptr<AbilityRuntime::Context> GetAbilityContext(napi_env env, napi_value contextArg);
73     static bool VerifySelfSystemPermission();
74     static bool VerifyRingtonePermission();
75 
76     static napi_value SetRingtoneUri(napi_env env, napi_callback_info info);
77     static void AsyncSetRingtoneUri(napi_env env, void *data);
78     static napi_value GetRingtoneUri(napi_env env, napi_callback_info info);
79     static void AsyncGetRingtoneUri(napi_env env, void *data);
80     static napi_value GetDefaultRingtoneAttrs(napi_env env, napi_callback_info info);
81     static void AsyncGetDefaultRingtoneAttrs(napi_env env, void *data);
82     static napi_value GetRingtoneAttrList(napi_env env, napi_callback_info info);
83     static void AsyncGetRingtoneAttrList(napi_env env, void *data);
84     static napi_value GetRingtonePlayer(napi_env env, napi_callback_info info);
85     static void AsyncGetRingtonePlayer(napi_env env, void *data);
86 
87     static napi_value SetSystemToneUri(napi_env env, napi_callback_info info);
88     static void AsyncSetSystemToneUri(napi_env env, void *data);
89     static napi_value GetSystemToneUri(napi_env env, napi_callback_info info);
90     static void AsyncGetSystemToneUri(napi_env env, void *data);
91     static napi_value GetDefaultSystemToneAttrs(napi_env env, napi_callback_info info);
92     static void AsyncGetDefaultSystemToneAttrs(napi_env env, void *data);
93     static napi_value GetSystemToneAttrList(napi_env env, napi_callback_info info);
94     static void AsyncGetSystemToneAttrList(napi_env env, void *data);
95     static napi_value GetSystemTonePlayer(napi_env env, napi_callback_info info);
96     static void AsyncGetSystemTonePlayer(napi_env env, void *data);
97 
98     static napi_value SetAlarmToneUri(napi_env env, napi_callback_info info);
99     static void AsyncSetAlarmToneUri(napi_env env, void *data);
100     static napi_value GetAlarmToneUri(napi_env env, napi_callback_info info);
101     static void AsyncGetAlarmToneUri(napi_env env, void *data);
102     static napi_value GetDefaultAlarmToneAttrs(napi_env env, napi_callback_info info);
103     static void AsyncGetDefaultAlarmToneAttrs(napi_env env, void *data);
104     static napi_value GetAlarmToneAttrList(napi_env env, napi_callback_info info);
105     static void AsyncGetAlarmToneAttrList(napi_env env, void *data);
106 
107     static void SetSystemSoundUriAsyncCallbackComp(napi_env env, napi_status status, void* data);
108     static void GetSystemSoundUriAsyncCallbackComp(napi_env env, napi_status status, void* data);
109     static void GetDefaultAttrsAsyncCallbackComp(napi_env env, napi_status status, void* data);
110     static void GetToneAttrsListAsyncCallbackComp(napi_env env, napi_status status, void* data);
111     static void GetRingtonePlayerAsyncCallbackComp(napi_env env, napi_status status, void* data);
112     static void GetSystemTonePlayerAsyncCallbackComp(napi_env env, napi_status status, void* data);
113 
114     static napi_value OpenAlarmTone(napi_env env, napi_callback_info info);
115     static void AsyncOpenAlarmTone(napi_env env, void *data);
116     static void OpenAlarmToneAsyncCallbackComp(napi_env env, napi_status status, void* data);
117     static napi_value Close(napi_env env, napi_callback_info info);
118     static void AsyncClose(napi_env env, void *data);
119     static void CloseAsyncCallbackComp(napi_env env, napi_status status, void* data);
120     static napi_value AddCustomizedTone(napi_env env, napi_callback_info info);
121     static void AsyncAddCustomizedTone(napi_env env, void *data);
122     static void AddCustomizedToneAsyncCallbackComp(napi_env env, napi_status status, void* data);
123     static napi_value RemoveCustomizedTone(napi_env env, napi_callback_info info);
124     static void AsyncRemoveCustomizedTone(napi_env env, void *data);
125     static void RemoveCustomizedToneAsyncCallbackComp(napi_env env, napi_status status, void* data);
126     static napi_value ThrowErrorAndReturn(napi_env env, const std::string& napiMessage, int32_t napiCode);
127     static napi_value AsyncThrowErrorAndReturn(napi_env env, const std::string& napiMessage, int32_t napiCode);
128 
129     static thread_local napi_ref sConstructor_;
130     static thread_local napi_ref ringtoneType_;
131     static thread_local napi_ref systemToneType_;
132     static thread_local napi_ref toneCustomizedType_;
133 
134     napi_env env_;
135 
136     std::shared_ptr<SystemSoundManager> sysSoundMgrClient_ = nullptr;
137 };
138 
139 struct SystemSoundManagerAsyncContext {
140     napi_env env;
141     napi_async_work work;
142     napi_deferred deferred;
143     napi_ref callbackRef;
144     bool status;
145     SystemSoundManagerNapi *objectInfo;
146     std::shared_ptr<AbilityRuntime::Context> abilityContext_;
147     std::string uri;
148     std::shared_ptr<RingtonePlayer> ringtonePlayer;
149     int32_t ringtoneType;
150     std::shared_ptr<SystemTonePlayer> systemTonePlayer;
151     int32_t systemToneType;
152     std::shared_ptr<ToneAttrsNapi> toneAttrsNapi;
153     std::shared_ptr<ToneAttrs> toneAttrs;
154     std::vector<std::shared_ptr<ToneAttrs>> toneAttrsArray;
155     std::string externalUri;
156     int32_t fd;
157     int32_t offset = 0;
158     int32_t length = 0;
159     int32_t result;
160     int32_t errCode;
161     std::string errMessage;
162 };
163 } // namespace Media
164 } // namespace OHOS
165 #endif // SYSTEM_SOUND_MNGR_NAPI_H