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 AddCustomizedToneAsyncCallbackComp(napi_env env, napi_status status, void* data); 144 static napi_value RemoveCustomizedTone(napi_env env, napi_callback_info info); 145 static void AsyncRemoveCustomizedTone(napi_env env, void *data); 146 static void RemoveCustomizedToneAsyncCallbackComp(napi_env env, napi_status status, void* data); 147 static napi_value ThrowErrorAndReturn(napi_env env, const std::string& napiMessage, int32_t napiCode); 148 static napi_value AsyncThrowErrorAndReturn(napi_env env, const std::string& napiMessage, int32_t napiCode); 149 150 static napi_value GetToneHapticsSettings(napi_env env, napi_callback_info info); 151 static void AsyncGetToneHapticsSettings(napi_env env, void *data); 152 static void GetToneHapticsSettingsAsyncCallbackComp(napi_env env, napi_status status, void *data); 153 static napi_value SetToneHapticsSettings(napi_env env, napi_callback_info info); 154 static void AsyncSetToneHapticsSettings(napi_env env, void *data); 155 static void SetToneHapticsSettingsAsyncCallbackComp(napi_env env, napi_status status, void *data); 156 static napi_value GetToneHapticsList(napi_env env, napi_callback_info info); 157 static void AsyncGetToneHapticsList(napi_env env, void *data); 158 static void GetToneHapticsListAsyncCallbackComp(napi_env env, napi_status status, void *data); 159 static napi_value GetHapticsAttrsSyncedWithTone(napi_env env, napi_callback_info info); 160 static void AsyncGetHapticsAttrsSyncedWithTone(napi_env env, void *data); 161 static void GetHapticsAttrsSyncedWithToneAsyncCallbackComp(napi_env env, napi_status status, void *data); 162 static napi_value OpenToneHaptics(napi_env env, napi_callback_info info); 163 static void AsyncOpenToneHaptics(napi_env env, void *data); 164 static void OpenToneHapticsAsyncCallbackComp(napi_env env, napi_status status, void *data); 165 static void GetToneHapticsSettingsToEnv(const napi_env &env, const napi_value &argv, 166 ToneHapticsSettings &toneHapticsSettings); 167 static std::string ExtractStringToEnv(const napi_env &env, const napi_value &argv); 168 169 static thread_local napi_ref sConstructor_; 170 static thread_local napi_ref ringtoneType_; 171 static thread_local napi_ref systemToneType_; 172 static thread_local napi_ref toneCustomizedType_; 173 static thread_local napi_ref toneHapticsMode_; 174 175 napi_env env_; 176 177 std::shared_ptr<SystemSoundManager> sysSoundMgrClient_ = nullptr; 178 }; 179 180 struct SystemSoundManagerAsyncContext { 181 napi_env env; 182 napi_async_work work; 183 napi_deferred deferred; 184 napi_ref callbackRef; 185 bool status; 186 SystemSoundManagerNapi *objectInfo; 187 std::shared_ptr<AbilityRuntime::Context> abilityContext_; 188 std::string uri; 189 std::shared_ptr<RingtonePlayer> ringtonePlayer; 190 int32_t ringtoneType; 191 std::shared_ptr<SystemTonePlayer> systemTonePlayer; 192 int32_t systemToneType; 193 std::shared_ptr<ToneAttrsNapi> toneAttrsNapi; 194 std::shared_ptr<ToneAttrs> toneAttrs; 195 std::vector<std::shared_ptr<ToneAttrs>> toneAttrsArray; 196 std::string externalUri; 197 int32_t fd; 198 int32_t offset = 0; 199 int32_t length = 0; 200 int32_t result; 201 int32_t errCode; 202 std::string errMessage; 203 bool isSynced; 204 std::vector<std::shared_ptr<ToneHapticsAttrs>> toneHapticsAttrsArray; 205 std::shared_ptr<ToneHapticsAttrs> toneHapticsAttrs; 206 std::string toneUri; 207 std::string hapticsUri; 208 int32_t toneHapticsType; 209 ToneHapticsSettings toneHapticsSettings; 210 }; 211 } // namespace Media 212 } // namespace OHOS 213 #endif // SYSTEM_SOUND_MNGR_NAPI_H