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