1 /*
2 * Copyright (c) 2022 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 #include "js_ability_manager_utils.h"
17
18 #include <cstdint>
19
20 #include "ability_state.h"
21 #include "hilog_wrapper.h"
22 #include "napi_common_want.h"
23 #include "napi_remote_object.h"
24 #include "js_runtime.h"
25 #include "js_runtime_utils.h"
26
27 namespace OHOS {
28 namespace AbilityRuntime {
CreateJSToken(napi_env env,const sptr<IRemoteObject> target)29 napi_value CreateJSToken(napi_env env, const sptr<IRemoteObject> target)
30 {
31 napi_value tokenClass = nullptr;
32 auto constructorcb = [](napi_env env, napi_callback_info info) -> napi_value {
33 napi_value thisVar = nullptr;
34 napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
35 return thisVar;
36 };
37 napi_define_class(
38 env, "TokenClass", NAPI_AUTO_LENGTH, constructorcb, nullptr, 0, nullptr, &tokenClass);
39 napi_value jsToken = nullptr;
40 napi_new_instance(env, tokenClass, 0, nullptr, &jsToken);
41 auto finalizecb = [](napi_env env, void *data, void *hint) {};
42 napi_wrap(env, jsToken, static_cast<void *>(target.GetRefPtr()), finalizecb, nullptr, nullptr);
43 return jsToken;
44 }
45
CreateJsAbilityRunningInfoArray(NativeEngine & engine,const std::vector<AAFwk::AbilityRunningInfo> & infos)46 NativeValue* CreateJsAbilityRunningInfoArray(
47 NativeEngine &engine, const std::vector<AAFwk::AbilityRunningInfo> &infos)
48 {
49 NativeValue* arrayValue = engine.CreateArray(infos.size());
50 NativeArray* array = ConvertNativeValueTo<NativeArray>(arrayValue);
51 uint32_t index = 0;
52 for (const auto &runningInfo : infos) {
53 array->SetElement(index++, CreateJsAbilityRunningInfo(engine, runningInfo));
54 }
55 return arrayValue;
56 }
57
CreateJsElementName(NativeEngine & engine,const AppExecFwk::ElementName & elementName)58 NativeValue* CreateJsElementName(NativeEngine &engine, const AppExecFwk::ElementName &elementName)
59 {
60 napi_value napiElementName =
61 OHOS::AppExecFwk::WrapElementName(reinterpret_cast<napi_env>(&engine), elementName);
62 return reinterpret_cast<NativeValue*>(napiElementName);
63 }
64
CreateJsExtensionRunningInfoArray(NativeEngine & engine,const std::vector<AAFwk::ExtensionRunningInfo> & infos)65 NativeValue* CreateJsExtensionRunningInfoArray(
66 NativeEngine &engine, const std::vector<AAFwk::ExtensionRunningInfo> &infos)
67 {
68 NativeValue* arrayValue = engine.CreateArray(infos.size());
69 NativeArray* array = ConvertNativeValueTo<NativeArray>(arrayValue);
70 uint32_t index = 0;
71 for (const auto &runningInfo : infos) {
72 array->SetElement(index++, CreateJsExtensionRunningInfo(engine, runningInfo));
73 }
74 return arrayValue;
75 }
76
CreateJsAbilityRunningInfo(NativeEngine & engine,const AAFwk::AbilityRunningInfo & info)77 NativeValue* CreateJsAbilityRunningInfo(NativeEngine &engine, const AAFwk::AbilityRunningInfo &info)
78 {
79 NativeValue* objValue = engine.CreateObject();
80 NativeObject* object = ConvertNativeValueTo<NativeObject>(objValue);
81
82 napi_value napiElementName =
83 OHOS::AppExecFwk::WrapElementName(reinterpret_cast<napi_env>(&engine), info.ability);
84 object->SetProperty("ability", reinterpret_cast<NativeValue*>(napiElementName));
85 object->SetProperty("pid", CreateJsValue(engine, info.pid));
86 object->SetProperty("uid", CreateJsValue(engine, info.uid));
87 object->SetProperty("processName", CreateJsValue(engine, info.processName));
88 object->SetProperty("startTime", CreateJsValue(engine, info.startTime));
89 object->SetProperty("abilityState", CreateJsValue(engine, info.abilityState));
90 return objValue;
91 }
92
CreateJsExtensionRunningInfo(NativeEngine & engine,const AAFwk::ExtensionRunningInfo & info)93 NativeValue* CreateJsExtensionRunningInfo(NativeEngine &engine, const AAFwk::ExtensionRunningInfo &info)
94 {
95 NativeValue* objValue = engine.CreateObject();
96 NativeObject* object = ConvertNativeValueTo<NativeObject>(objValue);
97
98 napi_value napiElementName =
99 OHOS::AppExecFwk::WrapElementName(reinterpret_cast<napi_env>(&engine), info.extension);
100 object->SetProperty("extension", reinterpret_cast<NativeValue*>(napiElementName));
101 object->SetProperty("pid", CreateJsValue(engine, info.pid));
102 object->SetProperty("uid", CreateJsValue(engine, info.uid));
103 object->SetProperty("type", CreateJsValue(engine, info.type));
104 object->SetProperty("processName", CreateJsValue(engine, info.processName));
105 object->SetProperty("startTime", CreateJsValue(engine, info.startTime));
106 object->SetProperty("clientPackage", CreateNativeArray(engine, info.clientPackage));
107 return objValue;
108 }
109
AbilityStateInit(NativeEngine * engine)110 NativeValue *AbilityStateInit(NativeEngine *engine)
111 {
112 HILOG_INFO("enter");
113
114 if (engine == nullptr) {
115 HILOG_ERROR("Invalid input parameters");
116 return nullptr;
117 }
118
119 NativeValue *objValue = engine->CreateObject();
120 NativeObject *object = ConvertNativeValueTo<NativeObject>(objValue);
121
122 if (object == nullptr) {
123 HILOG_ERROR("Failed to get object");
124 return nullptr;
125 }
126
127 object->SetProperty("INITIAL", CreateJsValue(*engine, static_cast<int32_t>(AAFwk::AbilityState::INITIAL)));
128 object->SetProperty("FOCUS", CreateJsValue(*engine, static_cast<int32_t>(AAFwk::AbilityState::ACTIVE)));
129 object->SetProperty("FOREGROUND", CreateJsValue(*engine, static_cast<int32_t>(AAFwk::AbilityState::FOREGROUND)));
130 object->SetProperty("BACKGROUND", CreateJsValue(*engine, static_cast<int32_t>(AAFwk::AbilityState::BACKGROUND)));
131 object->SetProperty("FOREGROUNDING", CreateJsValue(*engine,
132 static_cast<int32_t>(AAFwk::AbilityState::FOREGROUNDING)));
133 object->SetProperty("BACKGROUNDING", CreateJsValue(*engine,
134 static_cast<int32_t>(AAFwk::AbilityState::BACKGROUNDING)));
135
136 return objValue;
137 }
138 } // namespace AbilityRuntime
139 } // namespace OHOS
140