From 30e05a0a7efc88bd192c5e98b1e259ca38799787 Mon Sep 17 00:00:00 2001 From: hfwang0318 Date: Thu, 13 Feb 2025 11:01:42 +0800 Subject: [PATCH 1/2] add asyncPrepareTerminate api Signed-off-by: hfwang0318 --- .../js_scene_session_manager.cpp | 40 +++++++++++++++++++ .../js_scene_session_manager.h | 2 + 2 files changed, 42 insertions(+) diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp index 27b98e7d3a..15fe69ac75 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp @@ -911,6 +911,12 @@ napi_value JsSceneSessionManager::PrepareTerminate(napi_env env, napi_callback_i return (me != nullptr) ? me->OnPrepareTerminate(env, info) : nullptr; } +napi_value JsSceneSessionManager::AsyncPrepareTerminate(napi_env env, napi_callback_info info) +{ + JsSceneSessionManager* me = CheckParamsAndGetThis(env, info); + return (me != nullptr) ? me->OnAsyncPrepareTerminate(env, info) : nullptr; +} + napi_value JsSceneSessionManager::PerfRequestEx(napi_env env, napi_callback_info info) { WLOGFD("[NAPI]"); @@ -2474,6 +2480,40 @@ napi_value JsSceneSessionManager::OnPrepareTerminate(napi_env env, napi_callback return result; } +napi_value JsSceneSessionManager::OnAsyncPrepareTerminate(napi_env env, napi_callback_info info) +{ + TLOGD(WmsLogTag::WMS_LIFE, "in"); + size_t argc = ARGC_FOUR; + napi_value argv[ARGC_FOUR] = { nullptr }; + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); + if (argc != ARGC_TWO) { + TLOGE(WmsLogTag::WMS_LIFE, "Argc is invalid: %{public}zu", argc); + napi_throw(env, CreateJsError(env, static_cast(WSErrorCode::WS_ERROR_INVALID_PARAM), + "Input parameter is missing or invalid")); + return NapiGetUndefined(env); + } + int32_t persistentId = 0; + if (!ConvertFromJsValue(env, argv[ARG_INDEX_ZERO], persistentId)) { + TLOGE(WmsLogTag::WMS_LIFE, "Failed to convert parameter to persistentId"); + napi_throw(env, CreateJsError(env, static_cast(WSErrorCode::WS_ERROR_INVALID_PARAM), + "Input parameter is missing or invalid")); + return NapiGetUndefined(env); + } + auto isPrepareTerminate = std::make_shared(false); + auto execute = [persistentId, isPrepareTerminate] { + SceneSessionManager::GetInstance().PrepareTerminate(persistentId, *isPrepareTerminate); + }; + auto complete = [isPrepareTerminate](napi_env env, NapiAsyncTask& task, int32_t status) { + task.ResolveWithCustomize(env, CreateJsValue(env, static_cast(WSErrorCode::WS_OK)), + CreateJsValue(env, *isPrepareTerminate)); + }; + napi_value result = nullptr; + napi_value callback = argv[ARG_INDEX_ONE]; + NapiAsyncTask::Schedule("JsSceneSessionManager::OnAsyncPrepareTerminate", env, + CreateAsyncTaskWithLastParam(env, callback, std::move(execute), std::move(complete), &result)); + return result; +} + napi_value JsSceneSessionManager::OnPerfRequestEx(napi_env env, napi_callback_info info) { WLOGFD("in"); diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.h b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.h index 4afdcba243..444fe7a72b 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.h +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.h @@ -80,6 +80,7 @@ public: static napi_value GetBatchAbilityInfos(napi_env env, napi_callback_info info); static napi_value GetAbilityInfo(napi_env env, napi_callback_info info); static napi_value PrepareTerminate(napi_env env, napi_callback_info info); + static napi_value AsyncPrepareTerminate(napi_env env, napi_callback_info info); static napi_value PerfRequestEx(napi_env env, napi_callback_info info); static napi_value UpdateWindowMode(napi_env env, napi_callback_info info); static napi_value NotifySingleHandInfoChange(napi_env env, napi_callback_info info); @@ -171,6 +172,7 @@ private: napi_value OnGetAllAbilityInfos(napi_env env, napi_callback_info info); napi_value OnGetAbilityInfo(napi_env env, napi_callback_info info); napi_value OnPrepareTerminate(napi_env env, napi_callback_info info); + napi_value OnAsyncPrepareTerminate(napi_env env, napi_callback_info info); napi_value OnPerfRequestEx(napi_env env, napi_callback_info info); napi_value OnUpdateWindowMode(napi_env env, napi_callback_info info); napi_value OnNotifySingleHandInfoChange(napi_env env, napi_callback_info info); -- Gitee From ab084a45a72d0bc20520b4cc72311d26582c8908 Mon Sep 17 00:00:00 2001 From: hfwang0318 Date: Thu, 13 Feb 2025 11:08:30 +0800 Subject: [PATCH 2/2] add asyncPrepareTerminate api Signed-off-by: hfwang0318 --- .../napi/scene_session_manager/js_scene_session_manager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp index 15fe69ac75..00c9c52598 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_session_manager.cpp @@ -160,6 +160,8 @@ napi_value JsSceneSessionManager::Init(napi_env env, napi_value exportObj) BindNativeFunction(env, exportObj, "getAllWindowVisibilityInfos", moduleName, JsSceneSessionManager::GetAllWindowVisibilityInfos); BindNativeFunction(env, exportObj, "prepareTerminate", moduleName, JsSceneSessionManager::PrepareTerminate); + BindNativeFunction(env, exportObj, "asyncPrepareTerminate", moduleName, + JsSceneSessionManager::AsyncPrepareTerminate); BindNativeFunction(env, exportObj, "perfRequestEx", moduleName, JsSceneSessionManager::PerfRequestEx); BindNativeFunction(env, exportObj, "updateWindowMode", moduleName, JsSceneSessionManager::UpdateWindowMode); BindNativeFunction(env, exportObj, "notifySingleHandInfoChange", moduleName, -- Gitee