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