From 26047dece1b1a7df30f5eca3496cfb6a1d39eaa2 Mon Sep 17 00:00:00 2001 From: xuchenghua Date: Fri, 24 Jun 2022 12:39:33 +0800 Subject: [PATCH] xuchenghua09@huawei.com Signed-off-by: xuchenghua Change-Id: If9b3205d724e22aeedd786aa9d719db81f5fde63 --- frameworks/js/napi/BUILD.gn | 1 - .../js/napi/aafwk/abilityManager/BUILD.gn | 75 -- .../abilityManager/napi_ability_manager.cpp | 980 ------------------ .../abilityManager/napi_ability_manager.h | 103 -- .../aafwk/abilityManager/native_module.cpp | 78 -- .../aafwk/app/app_manager/js_app_manager.cpp | 380 ++++--- 6 files changed, 254 insertions(+), 1363 deletions(-) delete mode 100644 frameworks/js/napi/aafwk/abilityManager/BUILD.gn delete mode 100644 frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.cpp delete mode 100644 frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.h delete mode 100644 frameworks/js/napi/aafwk/abilityManager/native_module.cpp diff --git a/frameworks/js/napi/BUILD.gn b/frameworks/js/napi/BUILD.gn index 7df881d5fb2..fab872a4d03 100644 --- a/frameworks/js/napi/BUILD.gn +++ b/frameworks/js/napi/BUILD.gn @@ -17,7 +17,6 @@ import("//foundation/ability/ability_runtime/aafwk.gni") group("napi_packages") { deps = [ "${aafwk_napi_path}/ability:ability_napi", - "${aafwk_napi_path}/abilityManager:abilitymanager", "${aafwk_napi_path}/ability_constant:abilityconstant_napi", "${aafwk_napi_path}/ability_context:abilitycontext_napi", "${aafwk_napi_path}/ability_manager:abilitymanager_napi", diff --git a/frameworks/js/napi/aafwk/abilityManager/BUILD.gn b/frameworks/js/napi/aafwk/abilityManager/BUILD.gn deleted file mode 100644 index 0043e5861af..00000000000 --- a/frameworks/js/napi/aafwk/abilityManager/BUILD.gn +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("//foundation/ability/ability_runtime/aafwk.gni") - -ohos_shared_library("abilitymanager") { - include_dirs = [ - "//third_party/node/src", - "${services_path}/common/include", - "./", - "${services_path}/abilitymgr/include", - ] - - sources = [ - "napi_ability_manager.cpp", - "native_module.cpp", - ] - - deps = [ - "${native_path}/appkit:appkit_native", - "${services_path}/abilitymgr:abilityms", - "${services_path}/appmgr:libappms", - ] - - external_deps = [ - "ability_base:base", - "ability_base:want", - "ability_runtime:ability_manager", - "ability_runtime:abilitykit_native", - "ability_runtime:app_manager", - "bundle_framework:appexecfwk_base", - "bundle_framework:appexecfwk_core", - "common_event_service:cesfwk_innerkits", - "eventhandler:libeventhandler", - "hiviewdfx_hilog_native:libhilog", - "ipc:ipc_core", - "napi:ace_napi", - "safwk:system_ability_fwk", - "samgr_standard:samgr_proxy", - "utils_base:utils", - ] - - defines = [] - if (ability_runtime_graphics) { - include_dirs += [] - deps += [] - external_deps += [ - "multimedia_image_standard:image", - "multimedia_image_standard:image_native", - "window_manager:libwm", - ] - defines += [ "SUPPORT_GRAPHICS" ] - } - - if (background_task_mgr_continuous_task_enable) { - external_deps += [ "background_task_mgr:bgtaskmgr_innerkits" ] - defines += [ "BGTASKMGR_CONTINUOUS_TASK_ENABLE" ] - } - - relative_install_dir = "module/app" - - subsystem_name = "ability" - part_name = "ability_runtime" -} diff --git a/frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.cpp b/frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.cpp deleted file mode 100644 index 1533836be3e..00000000000 --- a/frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.cpp +++ /dev/null @@ -1,980 +0,0 @@ -/* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "napi_ability_manager.h" - -#include -#include - -#include "ability_manager_client.h" -#include "ability_manager_interface.h" -#include "app_mgr_interface.h" -#include "hilog_wrapper.h" -#include "if_system_ability_manager.h" -#include "ipc_skeleton.h" -#include "iservice_registry.h" -#include "system_ability_definition.h" -#include "ability_manager_service.h" - -using namespace OHOS::AAFwk; - -namespace OHOS { -namespace AppExecFwk { -OHOS::sptr GetAbilityManagerInstance() -{ - OHOS::sptr systemAbilityManager = - OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - OHOS::sptr abilityObject = - systemAbilityManager->GetSystemAbility(OHOS::ABILITY_MGR_SERVICE_ID); - return OHOS::iface_cast(abilityObject); -} - -OHOS::sptr GetAppManagerInstance() -{ - OHOS::sptr systemAbilityManager = - OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - OHOS::sptr appObject = systemAbilityManager->GetSystemAbility(OHOS::APP_MGR_SERVICE_ID); - return OHOS::iface_cast(appObject); -} - -napi_value ParseBundleName(napi_env env, std::string &bundleName, napi_value args) -{ - char buf[NapiAbilityMgr::BUFFER_LENGTH_MAX] = {0}; - size_t len = 0; - napi_get_value_string_utf8(env, args, buf, NapiAbilityMgr::BUFFER_LENGTH_MAX, &len); - HILOG_INFO("bundleName= [%{public}s].", buf); - bundleName = std::string(buf); - // create return - napi_value ret = 0; - NAPI_CALL(env, napi_create_int32(env, 0, &ret)); - return ret; -} - -void GetAllRunningProcessesForResult(napi_env env, const std::vector &info, napi_value result) -{ - int32_t index = 0; - - for (const auto &item : info) { - napi_value objAppProcessInfo = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &objAppProcessInfo)); - - napi_value nPid = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, item.pid_, &nPid)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "pid", nPid)); - - napi_value nProcessName = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_string_utf8(env, item.processName_.c_str(), NAPI_AUTO_LENGTH, &nProcessName)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "processName", nProcessName)); - - napi_value nPkgList = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_array(env, &nPkgList)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "pkgList", nPkgList)); - - napi_value nUid = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, item.uid_, &nUid)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "uid", nUid)); - - napi_value nLastMemoryLevel = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, NapiAbilityMgr::DEFAULT_STACK_ID, &nLastMemoryLevel)); - NAPI_CALL_RETURN_VOID( - env, napi_set_named_property(env, objAppProcessInfo, "lastMemoryLevel", nLastMemoryLevel)); - - napi_value nWeight = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, NapiAbilityMgr::DEFAULT_WEIGHT, &nWeight)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "weight", nWeight)); - - napi_value nWeightReasonCode = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::REASON_UNKNOWN), &nWeightReasonCode)); - NAPI_CALL_RETURN_VOID( - env, napi_set_named_property(env, objAppProcessInfo, "weightReasonCode", nWeightReasonCode)); - - NAPI_CALL_RETURN_VOID(env, napi_set_element(env, result, index, objAppProcessInfo)); - index++; - } -} - -void GetActiveProcessInfosForResult(napi_env env, const std::vector &info, napi_value result) -{ - int32_t index = 0; - - for (const auto &item : info) { - napi_value objAppProcessInfo = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &objAppProcessInfo)); - - napi_value nPid = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, item.pid_, &nPid)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "pid", nPid)); - - napi_value nUid = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_int32(env, item.uid_, &nUid)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "uid", nUid)); - - napi_value nProcessName = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_string_utf8(env, item.processName_.c_str(), NAPI_AUTO_LENGTH, &nProcessName)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "processName", nProcessName)); - - napi_value nBundleNames = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_create_array(env, &nBundleNames)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objAppProcessInfo, "bundleNames", nBundleNames)); - - NAPI_CALL_RETURN_VOID(env, napi_set_element(env, result, index, objAppProcessInfo)); - index++; - } -} - -void GetMissionSnapshotInfoForResult(napi_env env, MissionSnapshot &recentMissionInfos, napi_value result) -{ - HILOG_INFO("%{public}s,%{public}d", __PRETTY_FUNCTION__, __LINE__); - napi_value objTopAbilityInfo; - NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &objTopAbilityInfo)); - napi_value deviceId; - NAPI_CALL_RETURN_VOID(env, - napi_create_string_utf8(env, recentMissionInfos.topAbility.GetDeviceID().c_str(), NAPI_AUTO_LENGTH, &deviceId)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objTopAbilityInfo, "deviceId", deviceId)); - napi_value bundleName; - NAPI_CALL_RETURN_VOID(env, - napi_create_string_utf8( - env, recentMissionInfos.topAbility.GetBundleName().c_str(), NAPI_AUTO_LENGTH, &bundleName)); - HILOG_INFO("bundleName = [%{public}s]", recentMissionInfos.topAbility.GetBundleName().c_str()); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objTopAbilityInfo, "bundleName", bundleName)); - napi_value abilityName; - NAPI_CALL_RETURN_VOID(env, - napi_create_string_utf8( - env, recentMissionInfos.topAbility.GetAbilityName().c_str(), NAPI_AUTO_LENGTH, &abilityName)); - HILOG_INFO("abilityName = [%{public}s]", recentMissionInfos.topAbility.GetAbilityName().c_str()); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, objTopAbilityInfo, "abilityName", abilityName)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "topAbility", objTopAbilityInfo)); - -#ifdef SUPPORT_GRAPHICS - if (recentMissionInfos.snapshot) { - napi_value iconResult = nullptr; - iconResult = Media::PixelMapNapi::CreatePixelMap(env, recentMissionInfos.snapshot); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "snapshot", iconResult)); - } else { -#endif - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, result, "snapshot", NapiGetNull(env))); -#ifdef SUPPORT_GRAPHICS - } -#endif -} - -auto NAPI_GetAllRunningProcessesAsyncExecuteCallback = [](napi_env env, void *data) { - HILOG_INFO("getAllRunningProcesses called(CallBack Mode)..."); - AsyncCallbackInfo *async_callback_info = (AsyncCallbackInfo *)data; - GetAppManagerInstance()->GetAllRunningProcesses(async_callback_info->info); -}; - -auto NAPI_GetAllRunningProcessesAsyncCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("getAllRunningProcesses compeleted(CallBack Mode)..."); - AsyncCallbackInfo *async_callback_info = (AsyncCallbackInfo *)data; - napi_value result[NUMBER_OF_PARAMETERS_TWO] = {0}; - napi_value callback = nullptr; - napi_value undefined = nullptr; - napi_value callResult = nullptr; - - result[0] = GetCallbackErrorValue(async_callback_info->env, NapiAbilityMgr::BUSINESS_ERROR_CODE_OK); - napi_create_array(env, &result[1]); - GetAllRunningProcessesForResult(env, async_callback_info->info, result[1]); - napi_get_undefined(env, &undefined); - napi_get_reference_value(env, async_callback_info->callback[0], &callback); - napi_call_function(env, undefined, callback, NUMBER_OF_PARAMETERS_TWO, &result[0], &callResult); - - if (async_callback_info->callback[0] != nullptr) { - napi_delete_reference(env, async_callback_info->callback[0]); - } - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -auto NAPI_GetAllRunningProcessesPromiseCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("getAllRunningProcesses compeleted(Promise Mode)..."); - AsyncCallbackInfo *async_callback_info = (AsyncCallbackInfo *)data; - napi_value result = nullptr; - napi_create_array(env, &result); - GetAllRunningProcessesForResult(env, async_callback_info->info, result); - napi_resolve_deferred(async_callback_info->env, async_callback_info->deferred, result); - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -napi_value NAPI_GetAllRunningProcessesWrap( - napi_env env, napi_callback_info info, bool callBackMode, AsyncCallbackInfo &async_callback_info) -{ - HILOG_INFO("NAPI_GetAllRunningProcessesWrap called..."); - if (callBackMode) { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_GetAllRunningProcessesCallBack", NAPI_AUTO_LENGTH, &resourceName); - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_GetAllRunningProcessesAsyncExecuteCallback, - NAPI_GetAllRunningProcessesAsyncCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - - NAPI_CALL(env, napi_queue_async_work(env, async_callback_info.asyncWork)); - // create return - napi_value ret = 0; - NAPI_CALL(env, napi_create_int32(env, 0, &ret)); - return ret; - } else { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_GetAllRunningProcessesPromise", NAPI_AUTO_LENGTH, &resourceName); - - napi_deferred deferred = nullptr; - napi_value promise = nullptr; - NAPI_CALL(env, napi_create_promise(env, &deferred, &promise)); - async_callback_info.deferred = deferred; - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_GetAllRunningProcessesAsyncExecuteCallback, - NAPI_GetAllRunningProcessesPromiseCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - napi_queue_async_work(env, async_callback_info.asyncWork); - return promise; - } -} - -napi_value NAPI_GetAllRunningProcesses(napi_env env, napi_callback_info info) -{ - size_t argc = 1; - napi_value argv[1] = {}; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); - HILOG_INFO("argc = [%{public}zu]", argc); - - bool callBackMode = false; - if (argc >= 1) { - napi_valuetype valuetype = napi_valuetype::napi_null; - NAPI_CALL(env, napi_typeof(env, argv[0], &valuetype)); - NAPI_ASSERT(env, valuetype == napi_function, "Wrong argument type. Function expected."); - callBackMode = true; - } - - AsyncCallbackInfo *async_callback_info = new (std::nothrow) AsyncCallbackInfo { - .env = env, - .asyncWork = nullptr, - .deferred = nullptr, - }; - if (async_callback_info == nullptr) { - return nullptr; - } - - if (callBackMode) { - napi_create_reference(env, argv[0], 1, &async_callback_info->callback[0]); - } - - napi_value ret = NAPI_GetAllRunningProcessesWrap(env, info, callBackMode, *async_callback_info); - if (ret == nullptr) { - delete async_callback_info; - async_callback_info = nullptr; - } - - return ((callBackMode) ? (nullptr) : (ret)); -} - -auto NAPI_GetActiveProcessInfosAsyncExecuteCallback = [](napi_env env, void *data) { - HILOG_INFO("getActiveProcessInfos called(CallBack Mode)..."); - AsyncCallbackInfo *async_callback_info = (AsyncCallbackInfo *)data; - GetAppManagerInstance()->GetAllRunningProcesses(async_callback_info->info); -}; - -auto NAPI_GetActiveProcessInfosAsyncCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("getActiveProcessInfos compeleted(CallBack Mode)..."); - AsyncCallbackInfo *async_callback_info = (AsyncCallbackInfo *)data; - napi_value result[NUMBER_OF_PARAMETERS_TWO] = {0}; - napi_value callback = nullptr; - napi_value undefined = nullptr; - napi_value callResult = nullptr; - - result[0] = GetCallbackErrorValue(async_callback_info->env, NapiAbilityMgr::BUSINESS_ERROR_CODE_OK); - napi_create_array(env, &result[1]); - GetActiveProcessInfosForResult(env, async_callback_info->info, result[1]); - napi_get_undefined(env, &undefined); - napi_get_reference_value(env, async_callback_info->callback[0], &callback); - napi_call_function(env, undefined, callback, NUMBER_OF_PARAMETERS_TWO, &result[0], &callResult); - - if (async_callback_info->callback[0] != nullptr) { - napi_delete_reference(env, async_callback_info->callback[0]); - } - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -auto NAPI_GetActiveProcessInfosPromiseCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("getActiveProcessInfos compeleted(Promise Mode)..."); - AsyncCallbackInfo *async_callback_info = (AsyncCallbackInfo *)data; - napi_value result = nullptr; - napi_create_array(env, &result); - GetActiveProcessInfosForResult(env, async_callback_info->info, result); - napi_resolve_deferred(async_callback_info->env, async_callback_info->deferred, result); - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -napi_value NAPI_GetActiveProcessInfosWrap( - napi_env env, napi_callback_info info, bool callBackMode, AsyncCallbackInfo &async_callback_info) -{ - HILOG_INFO("NAPI_GetActiveProcessInfosWrap called..."); - if (callBackMode) { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_GetActiveProcessInfosCallBack", NAPI_AUTO_LENGTH, &resourceName); - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_GetActiveProcessInfosAsyncExecuteCallback, - NAPI_GetActiveProcessInfosAsyncCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - - NAPI_CALL(env, napi_queue_async_work(env, async_callback_info.asyncWork)); - // create return - napi_value ret = 0; - NAPI_CALL(env, napi_create_int32(env, 0, &ret)); - return ret; - } else { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_GetActiveProcessInfosPromise", NAPI_AUTO_LENGTH, &resourceName); - - napi_deferred deferred = nullptr; - napi_value promise = nullptr; - NAPI_CALL(env, napi_create_promise(env, &deferred, &promise)); - async_callback_info.deferred = deferred; - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_GetActiveProcessInfosAsyncExecuteCallback, - NAPI_GetActiveProcessInfosPromiseCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - napi_queue_async_work(env, async_callback_info.asyncWork); - return promise; - } -} - -napi_value NAPI_GetActiveProcessInfos(napi_env env, napi_callback_info info) -{ - size_t argc = 1; - napi_value argv[1] = {}; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); - HILOG_INFO("argc = [%{public}zu]", argc); - - bool callBackMode = false; - if (argc >= 1) { - napi_valuetype valuetype = napi_valuetype::napi_null; - NAPI_CALL(env, napi_typeof(env, argv[0], &valuetype)); - NAPI_ASSERT(env, valuetype == napi_function, "Wrong argument type. Function expected."); - callBackMode = true; - } - - AsyncCallbackInfo *async_callback_info = new (std::nothrow) AsyncCallbackInfo { - .env = env, - .asyncWork = nullptr, - .deferred = nullptr, - }; - if (async_callback_info == nullptr) { - return nullptr; - } - - if (callBackMode) { - napi_create_reference(env, argv[0], 1, &async_callback_info->callback[0]); - } - - napi_value ret = NAPI_GetActiveProcessInfosWrap(env, info, callBackMode, *async_callback_info); - if (ret == nullptr) { - delete async_callback_info; - async_callback_info = nullptr; - } - - return ((callBackMode) ? (nullptr) : (ret)); -} - -auto NAPI_KillProcessesByBundleNameAsyncExecuteCallback = [](napi_env env, void *data) { - HILOG_INFO("killProcessesByBundleName called(CallBack Mode)..."); - AsyncKillProcessCallbackInfo *async_callback_info = (AsyncKillProcessCallbackInfo *)data; - async_callback_info->result = GetAbilityManagerInstance()->KillProcess(async_callback_info->bundleName); -}; - -auto NAPI_KillProcessesByBundleNameAsyncCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("killProcessesByBundleName compeleted(CallBack Mode)..."); - AsyncKillProcessCallbackInfo *async_callback_info = (AsyncKillProcessCallbackInfo *)data; - napi_value result[NUMBER_OF_PARAMETERS_TWO] = {0}; - napi_value callback = nullptr; - napi_value undefined = nullptr; - napi_value callResult = nullptr; - - result[0] = GetCallbackErrorValue(async_callback_info->env, NapiAbilityMgr::BUSINESS_ERROR_CODE_OK); - napi_create_int32(async_callback_info->env, async_callback_info->result, &result[1]); - napi_get_undefined(env, &undefined); - - napi_get_reference_value(env, async_callback_info->callback[0], &callback); - napi_call_function(env, undefined, callback, NUMBER_OF_PARAMETERS_TWO, &result[0], &callResult); - - if (async_callback_info->callback[0] != nullptr) { - napi_delete_reference(env, async_callback_info->callback[0]); - } - - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -auto NAPI_KillProcessesByBundleNamePromiseCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("killProcessesByBundleName compeleted(Promise Mode)..."); - AsyncKillProcessCallbackInfo *async_callback_info = (AsyncKillProcessCallbackInfo *)data; - napi_value result = nullptr; - napi_create_int32(async_callback_info->env, async_callback_info->result, &result); - if (async_callback_info->result == ERR_OK) { - napi_resolve_deferred(async_callback_info->env, async_callback_info->deferred, result); - } else { - napi_reject_deferred(async_callback_info->env, async_callback_info->deferred, result); - } - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -napi_value NAPI_KillProcessesByBundleNameWrap( - napi_env env, napi_callback_info info, bool callBackMode, AsyncKillProcessCallbackInfo &async_callback_info) -{ - HILOG_INFO("NAPI_KillProcessesByBundleName called..."); - if (callBackMode) { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_KillProcessesByBundleNameCallBack", NAPI_AUTO_LENGTH, &resourceName); - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_KillProcessesByBundleNameAsyncExecuteCallback, - NAPI_KillProcessesByBundleNameAsyncCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - - NAPI_CALL(env, napi_queue_async_work(env, async_callback_info.asyncWork)); - // create return - napi_value ret = 0; - NAPI_CALL(env, napi_create_int32(env, 0, &ret)); - return ret; - } else { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_KillProcessesByBundleNamePromise", NAPI_AUTO_LENGTH, &resourceName); - - napi_deferred deferred = nullptr; - napi_value promise = nullptr; - NAPI_CALL(env, napi_create_promise(env, &deferred, &promise)); - async_callback_info.deferred = deferred; - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_KillProcessesByBundleNameAsyncExecuteCallback, - NAPI_KillProcessesByBundleNamePromiseCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - napi_queue_async_work(env, async_callback_info.asyncWork); - return promise; - } -} - -napi_value NAPI_KillProcessesByBundleName(napi_env env, napi_callback_info info) -{ - size_t argc = NUMBER_OF_PARAMETERS_TWO; - napi_value argv[NUMBER_OF_PARAMETERS_TWO] = {}; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); - HILOG_INFO("argc = [%{public}zu]", argc); - - std::string bundleName = ""; - napi_valuetype valuetype = napi_valuetype::napi_null; - NAPI_CALL(env, napi_typeof(env, argv[0], &valuetype)); - NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type. String expected."); - ParseBundleName(env, bundleName, argv[0]); - - bool callBackMode = false; - if (argc >= NUMBER_OF_PARAMETERS_TWO) { - napi_valuetype valuetype = napi_valuetype::napi_null; - NAPI_CALL(env, napi_typeof(env, argv[1], &valuetype)); - NAPI_ASSERT(env, valuetype == napi_function, "Wrong argument type. Function expected."); - callBackMode = true; - } - - AsyncKillProcessCallbackInfo *async_callback_info = new (std::nothrow) AsyncKillProcessCallbackInfo { - .env = env, - .asyncWork = nullptr, - .deferred = nullptr, - }; - if (async_callback_info == nullptr) { - return nullptr; - } - - async_callback_info->bundleName = bundleName; - if (callBackMode) { - napi_create_reference(env, argv[1], 1, &async_callback_info->callback[0]); - } - - napi_value ret = NAPI_KillProcessesByBundleNameWrap(env, info, callBackMode, *async_callback_info); - if (ret == nullptr) { - delete async_callback_info; - async_callback_info = nullptr; - } - - return ((callBackMode) ? (nullptr) : (ret)); -} - -auto NAPI_ClearUpApplicationDataAsyncExecuteCallback = [](napi_env env, void *data) { - HILOG_INFO("clearUpApplicationData called(CallBack Mode)..."); - AsyncClearUpApplicationDataCallbackInfo *async_callback_info = (AsyncClearUpApplicationDataCallbackInfo *)data; - async_callback_info->result = AAFwk::AbilityManagerClient::GetInstance()-> - ClearUpApplicationData(async_callback_info->bundleName); -}; - -auto NAPI_ClearUpApplicationDataAsyncCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("clearUpApplicationData compeleted(CallBack Mode)..."); - AsyncClearUpApplicationDataCallbackInfo *async_callback_info = (AsyncClearUpApplicationDataCallbackInfo *)data; - napi_value result[NUMBER_OF_PARAMETERS_TWO] = {0}; - napi_value callback = nullptr; - napi_value undefined = nullptr; - napi_value callResult = nullptr; - result[0] = GetCallbackErrorValue(async_callback_info->env, NapiAbilityMgr::BUSINESS_ERROR_CODE_OK); - napi_create_int32(async_callback_info->env, async_callback_info->result, &result[1]); - napi_get_undefined(env, &undefined); - - napi_get_reference_value(env, async_callback_info->callback[0], &callback); - napi_call_function(env, undefined, callback, NUMBER_OF_PARAMETERS_TWO, &result[0], &callResult); - if (async_callback_info->callback[0] != nullptr) { - napi_delete_reference(env, async_callback_info->callback[0]); - } - - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -auto NAPI_ClearUpApplicationDataPromiseCompleteCallback = [](napi_env env, napi_status status, void *data) { - HILOG_INFO("clearUpApplicationData compeleted(Promise Mode)..."); - AsyncClearUpApplicationDataCallbackInfo *async_callback_info = (AsyncClearUpApplicationDataCallbackInfo *)data; - napi_value result = nullptr; - napi_create_int32(async_callback_info->env, async_callback_info->result, &result); - if (async_callback_info->result == ERR_OK) { - napi_resolve_deferred(async_callback_info->env, async_callback_info->deferred, result); - } else { - napi_reject_deferred(async_callback_info->env, async_callback_info->deferred, result); - } - napi_delete_async_work(env, async_callback_info->asyncWork); - delete async_callback_info; -}; - -napi_value NAPI_ClearUpApplicationDataWrap(napi_env env, napi_callback_info info, bool callBackMode, - AsyncClearUpApplicationDataCallbackInfo &async_callback_info) -{ - HILOG_INFO("NAPI_ClearUpApplicationData called..."); - if (callBackMode) { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_ClearUpApplicationDataCallBack", NAPI_AUTO_LENGTH, &resourceName); - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_ClearUpApplicationDataAsyncExecuteCallback, - NAPI_ClearUpApplicationDataAsyncCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - - NAPI_CALL(env, napi_queue_async_work(env, async_callback_info.asyncWork)); - // create return - napi_value ret = 0; - NAPI_CALL(env, napi_create_int32(env, 0, &ret)); - return ret; - } else { - napi_value resourceName = nullptr; - napi_create_string_latin1(env, "NAPI_ClearUpApplicationDataPromise", NAPI_AUTO_LENGTH, &resourceName); - - napi_deferred deferred = nullptr; - napi_value promise = nullptr; - NAPI_CALL(env, napi_create_promise(env, &deferred, &promise)); - async_callback_info.deferred = deferred; - - napi_create_async_work(env, - nullptr, - resourceName, - NAPI_ClearUpApplicationDataAsyncExecuteCallback, - NAPI_ClearUpApplicationDataPromiseCompleteCallback, - (void *)&async_callback_info, - &async_callback_info.asyncWork); - napi_queue_async_work(env, async_callback_info.asyncWork); - return promise; - } -} // namespace AppExecFwk - -napi_value NAPI_ClearUpApplicationData(napi_env env, napi_callback_info info) -{ - size_t argc = NUMBER_OF_PARAMETERS_TWO; - napi_value argv[NUMBER_OF_PARAMETERS_TWO] = {}; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); - HILOG_INFO("argc = [%{public}zu]", argc); - - std::string bundleName = ""; - napi_valuetype valuetype = napi_valuetype::napi_null; - NAPI_CALL(env, napi_typeof(env, argv[0], &valuetype)); - NAPI_ASSERT(env, valuetype == napi_string, "Wrong argument type. String expected."); - ParseBundleName(env, bundleName, argv[0]); - - bool callBackMode = false; - if (argc >= NUMBER_OF_PARAMETERS_TWO) { - napi_valuetype valuetype = napi_valuetype::napi_null; - NAPI_CALL(env, napi_typeof(env, argv[1], &valuetype)); - NAPI_ASSERT(env, valuetype == napi_function, "Wrong argument type. Function expected."); - callBackMode = true; - } - - AsyncClearUpApplicationDataCallbackInfo *async_callback_info = - new (std::nothrow) AsyncClearUpApplicationDataCallbackInfo { - .env = env, - .asyncWork = nullptr, - .deferred = nullptr, - }; - if (async_callback_info == nullptr) { - return nullptr; - } - - async_callback_info->bundleName = bundleName; - if (callBackMode) { - napi_create_reference(env, argv[1], 1, &async_callback_info->callback[0]); - } - - napi_value ret = NAPI_ClearUpApplicationDataWrap(env, info, callBackMode, *async_callback_info); - if (ret == nullptr) { - delete async_callback_info; - async_callback_info = nullptr; - } - - return ((callBackMode) ? (nullptr) : (ret)); -} - -void CreateWeightReasonCodeObject(napi_env env, napi_value value) -{ - napi_value nUnknow = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::REASON_UNKNOWN), &nUnknow)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "REASON_UNKNOWN", nUnknow)); - napi_value nForeground = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_FOREGROUND), &nForeground)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_FOREGROUND", nForeground)); - napi_value nForegroundService = nullptr; - NAPI_CALL_RETURN_VOID(env, - napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_FOREGROUND_SERVICE), &nForegroundService)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_FOREGROUND_SERVICE", nForegroundService)); - napi_value nVisible = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_VISIBLE), &nVisible)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_VISIBLE", nVisible)); - napi_value nPerceptible = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_PERCEPTIBLE), &nPerceptible)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_PERCEPTIBLE", nPerceptible)); - napi_value nService = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_SERVICE), &nService)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_SERVICE", nService)); - napi_value nTopSleeping = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_TOP_SLEEPING), &nTopSleeping)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_TOP_SLEEPING", nTopSleeping)); - napi_value nCantSaveState = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_CANT_SAVE_STATE), &nCantSaveState)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_CANT_SAVE_STATE", nCantSaveState)); - napi_value nWeightCached = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_CACHED), &nWeightCached)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_CACHED", nWeightCached)); - napi_value nWeightGone = nullptr; - NAPI_CALL_RETURN_VOID( - env, napi_create_int32(env, static_cast(WeightReasonCode::WEIGHT_GONE), &nWeightGone)); - NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, value, "WEIGHT_GONE", nWeightGone)); -} - -napi_value GetCallbackErrorValue(napi_env env, int errCode) -{ - napi_value result = nullptr; - napi_value eCode = nullptr; - NAPI_CALL(env, napi_create_int32(env, errCode, &eCode)); - NAPI_CALL(env, napi_create_object(env, &result)); - NAPI_CALL(env, napi_set_named_property(env, result, "code", eCode)); - return result; -} - -napi_value NapiGetNull(napi_env env) -{ - napi_value result = 0; - napi_get_null(env, &result); - return result; -} - -static void GetAppMemorySizeExecute(napi_env env, void *data) -{ - CallbackInfo *cb = static_cast(data); - if (cb == nullptr) { - HILOG_ERROR("%{public}s, create cd failed.", __func__); - return; - } - cb->result = GetAbilityManagerInstance()->GetAppMemorySize(); - HILOG_INFO("%{public}s, result = %{public}d", __func__, cb->result); -} - -static void GetAppMemorySizePromiseComplete(napi_env env, napi_status status, void *data) -{ - HILOG_INFO("%{public}s, main event thread complete.", __func__); - CallbackInfo *cb = static_cast(data); - if (cb == nullptr) { - HILOG_ERROR("%{public}s, create cd failed.", __func__); - return; - } - napi_value result = nullptr; - napi_create_int32(env, cb->result, &result); - NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, cb->deferred, result)); - NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, cb->asyncWork)); - if (cb != nullptr) { - delete cb; - cb = nullptr; - } - HILOG_INFO("%{public}s, main event thread complete end.", __func__); -} - -static void GetAppMemorySizeAsyncComplete(napi_env env, napi_status status, void *data) -{ - HILOG_INFO("%{public}s, main event thread complete.", __func__); - CallbackInfo *cb = static_cast(data); - if (cb == nullptr) { - HILOG_ERROR("%{public}s, create cd failed.", __func__); - return; - } - const int errorCodeFailed = -1; - const int errorCodeSuccess = 0; - const unsigned int argsCount = 2; - const unsigned int paramFirst = 0; - const unsigned int paramSecond = 1; - napi_value result[argsCount] = {nullptr}; - if (cb->result == errorCodeFailed) { - napi_create_int32(env, 1, &result[paramFirst]); - napi_create_int32(env, cb->result, &result[paramSecond]); - } else { - napi_create_int32(env, errorCodeSuccess, &result[paramFirst]); - napi_create_int32(env, cb->result, &result[paramSecond]); - } - napi_value undefined = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_get_undefined(env, &undefined)); - napi_value callback = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, cb->callback, &callback)); - napi_value callResult = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_call_function(env, undefined, callback, argsCount, result, &callResult)); - if (cb->callback != nullptr) { - NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, cb->callback)); - } - NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, cb->asyncWork)); - if (cb != nullptr) { - delete cb; - cb = nullptr; - } - HILOG_INFO("%{public}s, main event thread complete end.", __func__); -} - -static napi_value GetAppMemorySizePromise(napi_env env) -{ - napi_value resourceName = nullptr; - napi_value retPromise = nullptr; - std::unique_ptr cb = std::make_unique(); - NAPI_CALL(env, napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName)); - NAPI_CALL(env, napi_create_promise(env, &cb->deferred, &retPromise)); - NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, GetAppMemorySizeExecute, - GetAppMemorySizePromiseComplete, (void *)cb.get(), &cb->asyncWork)); - NAPI_CALL(env, napi_queue_async_work(env, cb->asyncWork)); - - HILOG_INFO("%{public}s, promise end", __func__); - cb.release(); - return retPromise; -} - -static napi_value GetAppMemorySizeAsync(napi_env env, napi_value args) -{ - napi_value resourceName = nullptr; - napi_value retAsync = nullptr; - napi_valuetype valuetype = napi_undefined; - std::unique_ptr cb = std::make_unique(); - - NAPI_CALL(env, napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName)); - NAPI_CALL(env, napi_typeof(env, args, &valuetype)); - if (valuetype != napi_function) { - return retAsync; - } - NAPI_CALL(env, napi_create_reference(env, args, 1, &cb->callback)); - NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, GetAppMemorySizeExecute, - GetAppMemorySizeAsyncComplete, (void *)cb.get(), &cb->asyncWork)); - NAPI_CALL(env, napi_queue_async_work(env, cb->asyncWork)); - HILOG_INFO("%{public}s, async end", __func__); - cb.release(); - NAPI_CALL(env, napi_create_int32(env, 0, &retAsync)); - return retAsync; -} - -napi_value NAPI_GetAppMemorySize(napi_env env, napi_callback_info info) -{ - size_t argc = 1; - napi_value argv[1] = {nullptr}; - napi_value ret = nullptr; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); - HILOG_INFO("%{public}s argc = [%{public}zu]", __func__, argc); - if (argc == 0) { - // promiss - ret = GetAppMemorySizePromise(env); - } else if (argc == 1) { - // async - ret = GetAppMemorySizeAsync(env, argv[0]); - } else { - HILOG_ERROR("%{public}s js input param error", __func__); - NAPI_CALL(env, napi_get_null(env, &ret)); - } - HILOG_INFO("%{public}s end", __func__); - return ret; -} - -static void IsRamConstrainedDeviceExecute(napi_env env, void *data) -{ - CallbackInfo *cb = static_cast(data); - if (cb == nullptr) { - HILOG_ERROR("%{public}s, create cb failed.", __func__); - return; - } - cb->isRamConstrainedDevice = GetAbilityManagerInstance()->IsRamConstrainedDevice(); -} - -static void IsRamConstrainedDevicePromiseComplete(napi_env env, napi_status status, void *data) -{ - HILOG_INFO("%{public}s, main event thread complete.", __func__); - CallbackInfo *cb = static_cast(data); - if (cb == nullptr) { - HILOG_ERROR("%{public}s, create cb failed.", __func__); - return; - } - napi_value result = nullptr; - napi_get_boolean(env, cb->isRamConstrainedDevice, &result); - NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, cb->deferred, result)); - NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, cb->asyncWork)); - if (cb != nullptr) { - delete cb; - cb = nullptr; - } - HILOG_INFO("%{public}s, main event thread complete end.", __func__); -} - -static napi_value IsRamConstrainedDevicePromise(napi_env env) -{ - napi_value resourceName = nullptr; - napi_value retPromise = nullptr; - std::unique_ptr cb = std::make_unique(); - - NAPI_CALL(env, napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName)); - NAPI_CALL(env, napi_create_promise(env, &cb->deferred, &retPromise)); - NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, IsRamConstrainedDeviceExecute, - IsRamConstrainedDevicePromiseComplete, (void *)cb.get(), &cb->asyncWork)); - NAPI_CALL(env, napi_queue_async_work(env, cb->asyncWork)); - HILOG_INFO("%{public}s, promise end", __func__); - cb.release(); - return retPromise; -} - -static void IsRamConstrainedDeviceAsyncComplete(napi_env env, napi_status status, void *data) -{ - HILOG_INFO("%{public}s, main event thread complete.", __func__); - CallbackInfo *cb = static_cast(data); - if (cb == nullptr) { - HILOG_ERROR("%{public}s, create cd failed.", __func__); - return; - } - const int errorCodeSuccess = 0; - const unsigned int argsCount = 2; - const unsigned int paramFirst = 0; - const unsigned int paramSecond = 1; - napi_value result[argsCount] = {nullptr}; - napi_create_int32(env, errorCodeSuccess, &result[paramFirst]); - napi_get_boolean(env, cb->isRamConstrainedDevice, &result[paramSecond]); - napi_value undefined = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_get_undefined(env, &undefined)); - napi_value callback = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, cb->callback, &callback)); - napi_value callResult = nullptr; - NAPI_CALL_RETURN_VOID(env, napi_call_function(env, undefined, callback, argsCount, result, &callResult)); - if (cb->callback != nullptr) { - NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, cb->callback)); - } - NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, cb->asyncWork)); - if (cb != nullptr) { - delete cb; - cb = nullptr; - } - HILOG_INFO("%{public}s, main event thread complete end.", __func__); -} - -static napi_value IsRamConstrainedDeviceAsync(napi_env env, napi_value args) -{ - napi_value resourceName = nullptr; - napi_value retAsync = nullptr; - napi_valuetype valuetype = napi_undefined; - std::unique_ptr cb = std::make_unique(); - - NAPI_CALL(env, napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName)); - NAPI_CALL(env, napi_typeof(env, args, &valuetype)); - if (valuetype != napi_function) { - HILOG_ERROR("%{public}s, value type failed", __func__); - NAPI_CALL(env, napi_get_null(env, &retAsync)); - return retAsync; - } - NAPI_CALL(env, napi_create_reference(env, args, 1, &cb->callback)); - NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, IsRamConstrainedDeviceExecute, - IsRamConstrainedDeviceAsyncComplete, (void *)cb.get(), &cb->asyncWork)); - NAPI_CALL(env, napi_queue_async_work(env, cb->asyncWork)); - HILOG_INFO("%{public}s, async end", __func__); - cb.release(); - NAPI_CALL(env, napi_create_int32(env, 0, &retAsync)); - return retAsync; -} - -napi_value NAPI_IsRamConstrainedDevice(napi_env env, napi_callback_info info) -{ - size_t argc = 1; - napi_value argv[1] = {nullptr}; - napi_value ret = nullptr; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); - HILOG_INFO("%{public}s argc = [%{public}zu]", __func__, argc); - if (argc == 0) { - // promiss - ret = IsRamConstrainedDevicePromise(env); - } else if (argc == 1) { - // async - ret = IsRamConstrainedDeviceAsync(env, argv[0]); - } else { - HILOG_ERROR("%{public}s js input param error", __func__); - NAPI_CALL(env, napi_get_null(env, &ret)); - } - HILOG_INFO("%{public}s end", __func__); - return ret; -} -} // namespace AppExecFwk -} // namespace OHOS diff --git a/frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.h b/frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.h deleted file mode 100644 index 55756248aaf..00000000000 --- a/frameworks/js/napi/aafwk/abilityManager/napi_ability_manager.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef NAPI_ABILITY_MANAGER_H -#define NAPI_ABILITY_MANAGER_H - -#include - -#include "napi/native_api.h" -#include "napi/native_common.h" -#include "napi/native_node_api.h" -#ifdef SUPPORT_GRAPHICS -#include "pixel_map_napi.h" -#endif -#include "ability_manager_client.h" -#include "running_process_info.h" -#include "system_memory_attr.h" -#include "mission_snapshot.h" - -using RunningProcessInfo = OHOS::AppExecFwk::RunningProcessInfo; -using MissionSnapshot = OHOS::AAFwk::MissionSnapshot; - -namespace OHOS { -namespace AppExecFwk { -namespace NapiAbilityMgr { -const int BUFFER_LENGTH_MAX = 128; -const int DEFAULT_STACK_ID = 1; -const int DEFAULT_LAST_MEMORY_LEVEL = -1; -const int DEFAULT_WEIGHT = -1; -const int MAX_MISSION_NUM = 65535; -const int QUERY_RECENT_RUNNING_MISSION_INFO_TYPE = 2; -const int BUSINESS_ERROR_CODE_OK = 0; -} // namespace NapiAbilityMgr -const uint8_t NUMBER_OF_PARAMETERS_TWO = 2; -const uint8_t NUMBER_OF_PARAMETERS_THREE = 3; - -struct AsyncCallbackInfo { - napi_env env; - napi_async_work asyncWork; - napi_deferred deferred; - napi_ref callback[2] = {0}; - std::vector info; -}; - -struct AsyncClearMissionsCallbackInfo { - napi_env env; - napi_async_work asyncWork; - napi_deferred deferred; - napi_ref callback[2] = {0}; - int32_t result = -1; -}; - -struct AsyncKillProcessCallbackInfo { - napi_env env; - napi_async_work asyncWork; - napi_deferred deferred; - napi_ref callback[2] = {0}; - std::string bundleName; - int32_t result = -1; -}; - -struct AsyncClearUpApplicationDataCallbackInfo { - napi_env env; - napi_async_work asyncWork; - napi_deferred deferred; - napi_ref callback[2] = {0}; - std::string bundleName; - int32_t result = -1; -}; - -struct CallbackInfo { - napi_async_work asyncWork = nullptr; - napi_deferred deferred = nullptr; - napi_ref callback = nullptr; - int result = -1; - bool isRamConstrainedDevice = false; -}; - -napi_value NAPI_GetAllRunningProcesses(napi_env env, napi_callback_info info); -napi_value NAPI_GetActiveProcessInfos(napi_env env, napi_callback_info info); -napi_value NAPI_KillProcessesByBundleName(napi_env env, napi_callback_info info); -napi_value NAPI_ClearUpApplicationData(napi_env env, napi_callback_info info); -void CreateWeightReasonCodeObject(napi_env env, napi_value value); -napi_value GetCallbackErrorValue(napi_env env, int errCode); -napi_value NapiGetNull(napi_env env); -napi_value NAPI_GetSystemMemoryAttr(napi_env env, napi_callback_info); -napi_value NAPI_GetAppMemorySize(napi_env env, napi_callback_info info); -napi_value NAPI_IsRamConstrainedDevice(napi_env env, napi_callback_info info); -} // namespace AppExecFwk -} // namespace OHOS -#endif // NAPI_ABILITY_MANAGER_H diff --git a/frameworks/js/napi/aafwk/abilityManager/native_module.cpp b/frameworks/js/napi/aafwk/abilityManager/native_module.cpp deleted file mode 100644 index 7c066986f2c..00000000000 --- a/frameworks/js/napi/aafwk/abilityManager/native_module.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include - -#include "napi_ability_manager.h" -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -#include "hilog_wrapper.h" - -namespace OHOS { -namespace AppExecFwk { -EXTERN_C_START -/* - * function for module exports - */ -static napi_value Init(napi_env env, napi_value exports) -{ - HILOG_INFO("napi_moudule Init start..."); - - napi_value nWeightReasonCode = nullptr; - NAPI_CALL(env, napi_create_object(env, &nWeightReasonCode)); - CreateWeightReasonCodeObject(env, nWeightReasonCode); - - napi_property_descriptor desc[] = { - DECLARE_NAPI_FUNCTION("getAllRunningProcesses", NAPI_GetAllRunningProcesses), - DECLARE_NAPI_FUNCTION("getActiveProcessInfos", NAPI_GetActiveProcessInfos), - DECLARE_NAPI_FUNCTION("killProcessesByBundleName", NAPI_KillProcessesByBundleName), - DECLARE_NAPI_FUNCTION("clearUpApplicationData", NAPI_ClearUpApplicationData), - DECLARE_NAPI_PROPERTY("WeightReasonCode", nWeightReasonCode), - DECLARE_NAPI_FUNCTION("getAppMemorySize", NAPI_GetAppMemorySize), - DECLARE_NAPI_FUNCTION("isRamConstrainedDevice", NAPI_IsRamConstrainedDevice), - }; - - NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); - HILOG_INFO("napi_moudule Init end..."); - return exports; -} -EXTERN_C_END - -/* - * Module define - */ -static napi_module _module = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_register_func = Init, - .nm_modname = "app.abilityManager", - .nm_priv = ((void *)0), - .reserved = {0}, -}; - -/* - * Module register function - */ -extern "C" __attribute__((constructor)) void RegisterModule(void) -{ - napi_module_register(&_module); -} -} // namespace AppExecFwk -} // namespace OHOS \ No newline at end of file diff --git a/frameworks/js/napi/aafwk/app/app_manager/js_app_manager.cpp b/frameworks/js/napi/aafwk/app/app_manager/js_app_manager.cpp index 96895616471..a5622fb4969 100644 --- a/frameworks/js/napi/aafwk/app/app_manager/js_app_manager.cpp +++ b/frameworks/js/napi/aafwk/app/app_manager/js_app_manager.cpp @@ -39,6 +39,8 @@ constexpr int32_t ERROR_CODE_ONE = 1; constexpr size_t ARGC_ZERO = 0; constexpr size_t ARGC_ONE = 1; constexpr size_t ARGC_TWO = 2; +constexpr size_t ARGC_THREE = 3; +constexpr int32_t ERR_NOT_OK = -1; class JsAppManager final { public: @@ -92,7 +94,7 @@ public: static NativeValue* KillProcessesByBundleName(NativeEngine* engine, NativeCallbackInfo* info) { JsAppManager* me = CheckParamsAndGetThis(engine, info); - return (me != nullptr) ? me->OnkillProcess(*engine, *info) : nullptr; + return (me != nullptr) ? me->OnkillProcessByBundleName(*engine, *info) : nullptr; } static NativeValue* ClearUpApplicationData(NativeEngine* engine, NativeCallbackInfo* info) @@ -101,99 +103,106 @@ public: return (me != nullptr) ? me->OnClearUpApplicationData(*engine, *info) : nullptr; } + static NativeValue* GetAppMemorySize(NativeEngine* engine, NativeCallbackInfo* info) + { + JsAppManager* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnGetAppMemorySize(*engine, *info) : nullptr; + } + + static NativeValue* IsRamConstrainedDevice(NativeEngine* engine, NativeCallbackInfo* info) + { + JsAppManager* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnIsRamConstrainedDevice(*engine, *info) : nullptr; + } private: sptr appManager_ = nullptr; sptr abilityManager_ = nullptr; NativeValue* OnRegisterApplicationStateObserver(NativeEngine& engine, NativeCallbackInfo& info) { - HILOG_INFO("OnRegisterApplicationStateObserver is called"); - // only support one or two params + HILOG_INFO("%{public}s is called", __FUNCTION__); + // only support 1 params if (info.argc != ARGC_ONE) { HILOG_ERROR("Not enough params"); return engine.CreateUndefined(); } - + if (appManager_ == nullptr) { + HILOG_ERROR("appManager nullptr"); + return engine.CreateUndefined(); + } // unwarp observer sptr observer = new JSApplicationStateObserver(engine); observer->SetJsObserverObject(info.argv[0]); - int64_t observerId = serialNumber_; - observerIds_.emplace(observerId, observer); - if (serialNumber_ < INT64_MAX) { - serialNumber_++; + int32_t ret = appManager_->RegisterApplicationStateObserver(observer); + if (ret == 0) { + HILOG_INFO("RegisterApplicationStateObserver success."); + int64_t observerId = serialNumber_; + observerIds_.emplace(observerId, observer); + if (serialNumber_ < INT64_MAX) { + serialNumber_++; + } else { + serialNumber_ = 0; + } + return engine.CreateNumber(observerId); } else { - serialNumber_ = 0; + HILOG_ERROR("RegisterApplicationStateObserver failed error:%{public}d.", ret); + return engine.CreateUndefined(); } - HILOG_INFO("%{public}s create observer", __func__); - AsyncTask::CompleteCallback complete = - [appManager = appManager_, observer](NativeEngine& engine, AsyncTask& task, int32_t status) { - HILOG_INFO("RegisterApplicationStateObserver callback begin"); - if (appManager == nullptr) { - HILOG_ERROR("appManager nullptr"); - task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "appManager nullptr")); - return; - } - int32_t err = appManager->RegisterApplicationStateObserver(observer); - if (err == 0) { - HILOG_INFO("RegisterApplicationStateObserver success err 0"); - } else { - HILOG_ERROR("RegisterApplicationStateObserver failed error:%{public}d", err); - } - }; - - NativeValue* result = nullptr; - AsyncTask::Schedule("JSAppManager::OnRegisterApplicationStateObserver", - engine, CreateAsyncTaskWithLastParam(engine, nullptr, nullptr, std::move(complete), &result)); - return engine.CreateNumber(observerId); } NativeValue* OnUnregisterApplicationStateObserver(NativeEngine& engine, NativeCallbackInfo& info) { - HILOG_INFO("OnUnregisterApplicationStateObserver is called"); - // only support one or two params - if (info.argc != ARGC_ONE && info.argc != ARGC_TWO) { - HILOG_ERROR("Not enough params"); - return engine.CreateUndefined(); - } - - // unwrap connectId + HILOG_INFO("%{public}s is called", __FUNCTION__); + int32_t errCode = 0; int64_t observerId = -1; sptr observer = nullptr; - napi_get_value_int64(reinterpret_cast(&engine), - reinterpret_cast(info.argv[INDEX_ZERO]), &observerId); - HILOG_INFO("OnUnregisterApplicationStateObserver observer:%{public}d", (int32_t)observerId); - auto item = observerIds_.find(observerId); - if (item != observerIds_.end()) { - // match id - observer = item->second; - HILOG_INFO("%{public}s find observer exist", __func__); + + // only support 1 or 2 params + if (info.argc != ARGC_ONE && info.argc != ARGC_TWO) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; } else { - HILOG_INFO("%{public}s not find observer exist.", __func__); + // unwrap connectId + napi_get_value_int64(reinterpret_cast(&engine), + reinterpret_cast(info.argv[INDEX_ZERO]), &observerId); + HILOG_INFO("OnUnregisterApplicationStateObserver observer:%{public}d", (int32_t)observerId); + auto item = observerIds_.find(observerId); + if (item != observerIds_.end()) { + // match id + observer = item->second; + HILOG_INFO("%{public}s find observer exist", __func__); + } else { + HILOG_INFO("%{public}s not find observer exist.", __func__); + errCode = ERR_NOT_OK; + } } AsyncTask::CompleteCallback complete = - [appManager = appManager_, observer, observerId]( + [appManager = appManager_, observer, observerId, errCode]( NativeEngine& engine, AsyncTask& task, int32_t status) { - HILOG_INFO("OnUnregisterApplicationStateObserver begin"); + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } if (observer == nullptr || appManager == nullptr) { HILOG_ERROR("observer or appManager nullptr"); task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "observer or appManager nullptr")); return; } HILOG_INFO("observer->UnregisterApplicationStateObserver"); - int32_t err = appManager->UnregisterApplicationStateObserver(observer); - if (err == 0) { - HILOG_INFO("UnregisterApplicationStateObserver success err 0"); + int32_t ret = appManager->UnregisterApplicationStateObserver(observer); + if (ret == 0) { + HILOG_INFO("UnregisterApplicationStateObserver success."); task.Resolve(engine, engine.CreateUndefined()); observerIds_.erase(observerId); HILOG_INFO("UnregisterApplicationStateObserver erase size:%{public}zu", observerIds_.size()); } else { - HILOG_ERROR("UnregisterApplicationStateObserver failed error:%{public}d", err); - task.Reject(engine, CreateJsError(engine, err, "UnregisterApplicationStateObserver failed")); + HILOG_ERROR("UnregisterApplicationStateObserver failed error:%{public}d", ret); + task.Reject(engine, CreateJsError(engine, ret, "UnregisterApplicationStateObserver failed")); } }; - NativeValue* lastParam = (info.argc == ARGC_ONE) ? nullptr : info.argv[INDEX_ONE]; + NativeValue* lastParam = (info.argc == ARGC_TWO) ? info.argv[INDEX_ONE] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JSAppManager::OnUnregisterApplicationStateObserver", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); @@ -202,32 +211,37 @@ private: NativeValue* OnGetForegroundApplications(NativeEngine& engine, NativeCallbackInfo& info) { + HILOG_INFO("%{public}s is called", __FUNCTION__); + int32_t errCode = 0; + // only support 0 or 1 params - if (info.argc != ARGC_ONE && info.argc != ARGC_ZERO) { + if (info.argc != ARGC_ZERO && info.argc != ARGC_ONE) { HILOG_ERROR("Not enough params"); - return engine.CreateUndefined(); + errCode = ERR_NOT_OK; } AsyncTask::CompleteCallback complete = - [appManager = appManager_]( - NativeEngine& engine, AsyncTask& task, int32_t status) { - HILOG_INFO("OnGetForegroundApplications begin"); + [appManager = appManager_, errCode](NativeEngine& engine, AsyncTask& task, int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } if (appManager == nullptr) { HILOG_ERROR("appManager nullptr"); task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "appManager nullptr")); return; } std::vector list; - int32_t err = appManager->GetForegroundApplications(list); - if (err == 0) { - HILOG_INFO("OnGetForegroundApplications success err 0"); + int32_t ret = appManager->GetForegroundApplications(list); + if (ret == 0) { + HILOG_INFO("OnGetForegroundApplications success."); task.Resolve(engine, CreateJsAppStateDataArray(engine, list)); } else { - HILOG_ERROR("OnGetForegroundApplications failed error:%{public}d", err); - task.Reject(engine, CreateJsError(engine, err, "OnGetForegroundApplications failed")); + HILOG_ERROR("OnGetForegroundApplications failed error:%{public}d", ret); + task.Reject(engine, CreateJsError(engine, ret, "OnGetForegroundApplications failed")); } }; - NativeValue* lastParam = (info.argc == ARGC_ZERO) ? nullptr : info.argv[INDEX_ZERO]; + NativeValue* lastParam = (info.argc == ARGC_ONE) ? info.argv[INDEX_ZERO] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JSAppManager::OnGetForegroundApplications", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); @@ -236,19 +250,30 @@ private: NativeValue* OnGetProcessRunningInfos(NativeEngine &engine, NativeCallbackInfo &info) { + HILOG_INFO("%{public}s is called", __FUNCTION__); + int32_t errCode = 0; + + // only support 0 or 1 params + if (info.argc != ARGC_ZERO && info.argc != ARGC_ONE) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; + } AsyncTask::CompleteCallback complete = - [appManager = appManager_]( - NativeEngine &engine, AsyncTask &task, int32_t status) { + [appManager = appManager_, errCode](NativeEngine &engine, AsyncTask &task, int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } std::vector infos; - auto errcode = appManager->GetAllRunningProcesses(infos); - if (errcode == 0) { + auto ret = appManager->GetAllRunningProcesses(infos); + if (ret == 0) { task.Resolve(engine, CreateJsProcessRunningInfoArray(engine, infos)); } else { - task.Reject(engine, CreateJsError(engine, errcode, "Get mission infos failed.")); + task.Reject(engine, CreateJsError(engine, ret, "Get mission infos failed.")); } }; - NativeValue* lastParam = (info.argc == 0) ? nullptr : info.argv[0]; + NativeValue* lastParam = (info.argc == ARGC_ONE) ? info.argv[INDEX_ZERO] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JSAppManager::OnGetProcessRunningInfos", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); @@ -257,13 +282,20 @@ private: NativeValue* OnIsRunningInStabilityTest(NativeEngine& engine, NativeCallbackInfo& info) { + HILOG_INFO("%{public}s is called", __FUNCTION__); + int32_t errCode = 0; + // only support 0 or 1 params - if (info.argc != ARGC_ONE && info.argc != ARGC_ZERO) { + if (info.argc != ARGC_ZERO && info.argc != ARGC_ONE) { HILOG_ERROR("Not enough params"); - return engine.CreateUndefined(); + errCode = ERR_NOT_OK; } AsyncTask::CompleteCallback complete = - [abilityManager = abilityManager_](NativeEngine& engine, AsyncTask& task, int32_t status) { + [abilityManager = abilityManager_, errCode](NativeEngine& engine, AsyncTask& task, int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } if (abilityManager == nullptr) { HILOG_WARN("abilityManager nullptr"); task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "abilityManager nullptr")); @@ -275,46 +307,54 @@ private: task.Resolve(engine, CreateJsValue(engine, ret)); }; - NativeValue* lastParam = (info.argc == ARGC_ZERO) ? nullptr : info.argv[INDEX_ZERO]; + NativeValue* lastParam = (info.argc == ARGC_ONE) ? info.argv[INDEX_ZERO] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JSAppManager::OnIsRunningInStabilityTest", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); return result; } - NativeValue* OnkillProcess(NativeEngine &engine, NativeCallbackInfo &info) + NativeValue* OnkillProcessByBundleName(NativeEngine &engine, NativeCallbackInfo &info) { HILOG_INFO("%{public}s is called", __FUNCTION__); - if (info.argc == 0) { - HILOG_ERROR("Not enough params"); - return engine.CreateUndefined(); - } - + int32_t errCode = 0; std::string bundleName; - if (!ConvertFromJsValue(engine, info.argv[0], bundleName)) { - HILOG_ERROR("get bundleName failed!"); - return engine.CreateUndefined(); + + // only support 1 or 2 params + if (info.argc != ARGC_ONE && info.argc != ARGC_TWO) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; + } else { + if (!ConvertFromJsValue(engine, info.argv[0], bundleName)) { + HILOG_ERROR("get bundleName failed!"); + errCode = ERR_NOT_OK; + } } HILOG_INFO("kill process [%{public}s]", bundleName.c_str()); - AsyncTask::CompleteCallback complete = [bundleName, abilityManager = abilityManager_](NativeEngine& engine, - AsyncTask& task, int32_t status) { + AsyncTask::CompleteCallback complete = + [bundleName, abilityManager = abilityManager_, errCode](NativeEngine& engine, AsyncTask& task, + int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } if (abilityManager == nullptr) { HILOG_WARN("abilityManager nullptr"); task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "abilityManager nullptr")); return; } - auto errcode = abilityManager->KillProcess(bundleName); - if (errcode == 0) { - task.Resolve(engine, CreateJsValue(engine, errcode)); + auto ret = abilityManager->KillProcess(bundleName); + if (ret == 0) { + task.Resolve(engine, CreateJsValue(engine, ret)); } else { - task.Reject(engine, CreateJsError(engine, errcode, "kill process failed.")); + task.Reject(engine, CreateJsError(engine, ret, "kill process failed.")); } }; - NativeValue* lastParam = (info.argc == 1) ? nullptr : info.argv[1]; + NativeValue* lastParam = (info.argc == ARGC_TWO) ? info.argv[INDEX_ONE] : nullptr; NativeValue* result = nullptr; - AsyncTask::Schedule("JSAppManager::OnkillProcess", + AsyncTask::Schedule("JSAppManager::OnkillProcessByBundleName", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); return result; } @@ -322,34 +362,43 @@ private: NativeValue* OnClearUpApplicationData(NativeEngine &engine, NativeCallbackInfo &info) { HILOG_INFO("%{public}s is called", __FUNCTION__); - if (info.argc == 0) { - HILOG_ERROR("Not enough params"); - return engine.CreateUndefined(); - } - + int32_t errCode = 0; std::string bundleName; - if (!ConvertFromJsValue(engine, info.argv[0], bundleName)) { - HILOG_ERROR("get bundleName failed!"); - return engine.CreateUndefined(); + + // only support 1 or 2 params + if (info.argc != ARGC_ONE && info.argc != ARGC_TWO) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; + } else { + if (!ConvertFromJsValue(engine, info.argv[0], bundleName)) { + HILOG_ERROR("get bundleName failed!"); + errCode = ERR_NOT_OK; + } else { + HILOG_INFO("kill process [%{public}s]", bundleName.c_str()); + } } - HILOG_INFO("kill process [%{public}s]", bundleName.c_str()); - AsyncTask::CompleteCallback complete = [bundleName, abilityManager = abilityManager_](NativeEngine& engine, - AsyncTask& task, int32_t status) { + AsyncTask::CompleteCallback complete = + [bundleName, abilityManager = abilityManager_, errCode](NativeEngine& engine, AsyncTask& task, + int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } if (abilityManager == nullptr) { HILOG_WARN("abilityManager nullptr"); task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "abilityManager nullptr")); return; } - auto errcode = abilityManager->ClearUpApplicationData(bundleName); - if (errcode == 0) { - task.Resolve(engine, CreateJsValue(engine, errcode)); + auto ret = abilityManager->ClearUpApplicationData(bundleName); + if (ret == 0) { + task.Resolve(engine, CreateJsValue(engine, ret)); } else { - task.Reject(engine, CreateJsError(engine, errcode, "clear up application failed.")); + task.Reject(engine, CreateJsError(engine, ret, "clear up application failed.")); } }; - NativeValue* lastParam = (info.argc == 1) ? nullptr : info.argv[1]; + NativeValue* lastParam = (info.argc == ARGC_TWO) ? info.argv[INDEX_ONE] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JSAppManager::OnClearUpApplicationData", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); @@ -359,37 +408,112 @@ private: NativeValue* OnKillProcessWithAccount(NativeEngine &engine, NativeCallbackInfo &info) { HILOG_INFO("%{public}s is called", __FUNCTION__); - if (info.argc == 0) { - HILOG_ERROR("Not enough params"); - return engine.CreateUndefined(); - } - std::string bundleName; - if (!ConvertFromJsValue(engine, info.argv[0], bundleName)) { - HILOG_ERROR("Parse bundleName failed"); - return engine.CreateUndefined(); - } + int32_t errCode = 0; int accountId = -1; - if (!ConvertFromJsValue(engine, info.argv[1], accountId)) { - HILOG_ERROR("Parse userId failed"); - return engine.CreateUndefined(); + std::string bundleName; + + // only support 2 or 3 params + if (info.argc != ARGC_TWO && info.argc != ARGC_THREE) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; + } else { + if (!ConvertFromJsValue(engine, info.argv[0], bundleName)) { + HILOG_ERROR("Parse bundleName failed"); + errCode = ERR_NOT_OK; + } + if (!ConvertFromJsValue(engine, info.argv[1], accountId)) { + HILOG_ERROR("Parse userId failed"); + errCode = ERR_NOT_OK; + } } AsyncTask::CompleteCallback complete = - [appManager = appManager_, bundleName, accountId](NativeEngine &engine, AsyncTask &task, int32_t status) { - auto errcode = appManager->GetAmsMgr()->KillProcessWithAccount(bundleName, accountId); - if (errcode == 0) { + [appManager = appManager_, bundleName, accountId, errCode](NativeEngine &engine, AsyncTask &task, + int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } + auto ret = appManager->GetAmsMgr()->KillProcessWithAccount(bundleName, accountId); + if (ret == 0) { task.Resolve(engine, engine.CreateUndefined()); } else { - task.Reject(engine, CreateJsError(engine, errcode, "Kill processes failed.")); + task.Reject(engine, CreateJsError(engine, ret, "Kill processes failed.")); } }; - NativeValue* lastParam = (info.argc == ARGC_TWO) ? nullptr : info.argv[INDEX_TWO]; + NativeValue* lastParam = (info.argc == ARGC_THREE) ? info.argv[INDEX_TWO] : nullptr; NativeValue* result = nullptr; AsyncTask::Schedule("JSAppManager::OnKillProcessWithAccount", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); return result; } + + NativeValue* OnGetAppMemorySize(NativeEngine& engine, NativeCallbackInfo& info) + { + int32_t errCode = 0; + + // only support 0 or 1 params + if (info.argc != ARGC_ZERO && info.argc != ARGC_ONE) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; + } + AsyncTask::CompleteCallback complete = + [abilityManager = abilityManager_, errCode](NativeEngine& engine, AsyncTask& task, int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } + if (abilityManager == nullptr) { + HILOG_WARN("abilityManager nullptr"); + task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "abilityManager nullptr")); + return; + } + HILOG_INFO("GetAppMemorySize begin"); + int memorySize = abilityManager->GetAppMemorySize(); + HILOG_INFO("GetAppMemorySize memorySize:%{public}d", memorySize); + task.Resolve(engine, CreateJsValue(engine, memorySize)); + }; + + NativeValue* lastParam = (info.argc == ARGC_ONE) ? info.argv[INDEX_ZERO] : nullptr; + NativeValue* result = nullptr; + AsyncTask::Schedule("JSAppManager::OnGetAppMemorySize", + engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; + } + + NativeValue* OnIsRamConstrainedDevice(NativeEngine& engine, NativeCallbackInfo& info) + { + int32_t errCode = 0; + + // only support 0 or 1 params + if (info.argc != ARGC_ZERO && info.argc != ARGC_ONE) { + HILOG_ERROR("Not enough params"); + errCode = ERR_NOT_OK; + } + AsyncTask::CompleteCallback complete = + [abilityManager = abilityManager_, errCode](NativeEngine& engine, AsyncTask& task, int32_t status) { + if (errCode != 0) { + task.Reject(engine, CreateJsError(engine, errCode, "Invalidate params.")); + return; + } + if (abilityManager == nullptr) { + HILOG_WARN("abilityManager nullptr"); + task.Reject(engine, CreateJsError(engine, ERROR_CODE_ONE, "abilityManager nullptr")); + return; + } + HILOG_INFO("IsRamConstrainedDevice begin"); + bool ret = abilityManager->IsRamConstrainedDevice(); + HILOG_INFO("IsRamConstrainedDevice result:%{public}d", ret); + task.Resolve(engine, CreateJsValue(engine, ret)); + }; + + NativeValue* lastParam = (info.argc == ARGC_ONE) ? info.argv[INDEX_ZERO] : nullptr; + NativeValue* result = nullptr; + AsyncTask::Schedule("JSAppManager::OnIsRamConstrainedDevice", + engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; + } }; } // namespace @@ -449,6 +573,10 @@ NativeValue* JsAppManagerInit(NativeEngine* engine, NativeValue* exportObj) JsAppManager::KillProcessesByBundleName); BindNativeFunction(*engine, *object, "clearUpApplicationData", JsAppManager::ClearUpApplicationData); + BindNativeFunction(*engine, *object, "getAppMemorySize", + JsAppManager::GetAppMemorySize); + BindNativeFunction(*engine, *object, "isRamConstrainedDevice", + JsAppManager::IsRamConstrainedDevice); HILOG_INFO("JsAppManagerInit end"); return engine->CreateUndefined(); } -- Gitee