1 /*
2 * Copyright (c) 2021-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 "ability_info.h"
17
18 #include <errno.h>
19 #include <fcntl.h>
20 #include <string.h>
21 #include <unistd.h>
22
23 #include "bundle_constants.h"
24 #include "json_util.h"
25 #include "nlohmann/json.hpp"
26 #include "parcel_macro.h"
27 #include "string_ex.h"
28
29 namespace OHOS {
30 namespace AppExecFwk {
31 namespace {
32 const std::string JSON_KEY_PACKAGE = "package";
33 const std::string JSON_KEY_NAME = "name";
34 const std::string JSON_KEY_APPLICATION_NAME = "applicationName";
35 const std::string JSON_KEY_LABEL = "label";
36 const std::string JSON_KEY_DESCRIPTION = "description";
37 const std::string JSON_KEY_ICON_PATH = "iconPath";
38 const std::string JSON_KEY_THEME = "theme";
39 const std::string JSON_KEY_VISIBLE = "visible";
40 const std::string JSON_KEY_KIND = "kind";
41 const std::string JSON_KEY_TYPE = "type";
42 const std::string JSON_KEY_EXTENSION_ABILITY_TYPE = "extensionAbilityType";
43 const std::string JSON_KEY_ORIENTATION = "orientation";
44 const std::string JSON_KEY_LAUNCH_MODE = "launchMode";
45 const std::string JSON_KEY_CODE_PATH = "codePath";
46 const std::string JSON_KEY_RESOURCE_PATH = "resourcePath";
47 const std::string JSON_KEY_PERMISSIONS = "permissions";
48 const std::string JSON_KEY_PROCESS = "process";
49 const std::string JSON_KEY_DEVICE_TYPES = "deviceTypes";
50 const std::string JSON_KEY_DEVICE_CAPABILITIES = "deviceCapabilities";
51 const std::string JSON_KEY_URI = "uri";
52 const std::string JSON_KEY_IS_LAUNCHER_ABILITY = "isLauncherAbility";
53 const std::string JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE = "removeMissionAfterTerminate";
54 const std::string JSON_KEY_IS_NATIVE_ABILITY = "isNativeAbility";
55 const std::string JSON_KEY_ENABLED = "enabled";
56 const std::string JSON_KEY_SUPPORT_PIP_MODE = "supportPipMode";
57 const std::string JSON_KEY_TARGET_ABILITY = "targetAbility";
58 const std::string APPLICATION_INFO = "applicationInfo";
59 const std::string JSON_KEY_READ_PERMISSION = "readPermission";
60 const std::string JSON_KEY_WRITE_PERMISSION = "writePermission";
61 const std::string JSON_KEY_CONFIG_CHANGES = "configChanges";
62 const std::string JSON_KEY_FORM = "form";
63 const std::string JSON_KEY_FORM_ENTITY = "formEntity";
64 const std::string JSON_KEY_MIN_FORM_HEIGHT = "minFormHeight";
65 const std::string JSON_KEY_DEFAULT_FORM_HEIGHT = "defaultFormHeight";
66 const std::string JSON_KEY_MIN_FORM_WIDTH = "minFormWidth";
67 const std::string JSON_KEY_DEFAULT_FORM_WIDTH = "defaultFormWidth";
68 const std::string JSON_KEY_BACKGROUND_MODES = "backgroundModes";
69 const std::string JSON_KEY_CUSTOMIZE_DATA = "customizeData";
70 const std::string JSON_KEY_META_DATA = "metaData";
71 const std::string JSON_KEY_META_VALUE = "value";
72 const std::string JSON_KEY_META_EXTRA = "extra";
73 const std::string JSON_KEY_LABEL_ID = "labelId";
74 const std::string JSON_KEY_DESCRIPTION_ID = "descriptionId";
75 const std::string JSON_KEY_ICON_ID = "iconId";
76 const std::string JSON_KEY_FORM_ENABLED = "formEnabled";
77 const std::string JSON_KEY_SRC_PATH = "srcPath";
78 const std::string JSON_KEY_SRC_LANGUAGE = "srcLanguage";
79 const std::string JSON_KEY_START_WINDOW_ICON = "startWindowIcon";
80 const std::string JSON_KEY_START_WINDOW_ICON_ID = "startWindowIconId";
81 const std::string JSON_KEY_START_WINDOW_BACKGROUND = "startWindowBackground";
82 const std::string JSON_KEY_START_WINDOW_BACKGROUND_ID = "startWindowBackgroundId";
83 const std::string JSON_KEY_COMPILE_MODE = "compileMode";
84 const std::string META_DATA = "metadata";
85 const std::string META_DATA_NAME = "name";
86 const std::string META_DATA_VALUE = "value";
87 const std::string META_DATA_RESOURCE = "resource";
88 const std::string SRC_ENTRANCE = "srcEntrance";
89 const std::string IS_MODULE_JSON = "isModuleJson";
90 const std::string IS_STAGE_BASED_MODEL = "isStageBasedModel";
91 const std::string CONTINUABLE = "continuable";
92 const std::string PRIORITY = "priority";
93 const std::string JOSN_KEY_SUPPORT_WINDOW_MODE = "supportWindowMode";
94 const std::string JOSN_KEY_MAX_WINDOW_RATIO = "maxWindowRatio";
95 const std::string JOSN_KEY_MIN_WINDOW_RATIO = "minWindowRatio";
96 const std::string JOSN_KEY_MAX_WINDOW_WIDTH = "maxWindowWidth";
97 const std::string JOSN_KEY_MIN_WINDOW_WIDTH = "minWindowWidth";
98 const std::string JOSN_KEY_MAX_WINDOW_HEIGHT = "maxWindowHeight";
99 const std::string JOSN_KEY_MIN_WINDOW_HEIGHT = "minWindowHeight";
100 const std::string JOSN_KEY_UID = "uid";
101 const std::string JOSN_KEY_EXCLUDE_FROM_MISSIONS = "excludeFromMissions";
102 } // namespace
103
ReadFromParcel(Parcel & parcel)104 bool AbilityInfo::ReadFromParcel(Parcel &parcel)
105 {
106 name = Str16ToStr8(parcel.ReadString16());
107 label = Str16ToStr8(parcel.ReadString16());
108 description = Str16ToStr8(parcel.ReadString16());
109 iconPath = Str16ToStr8(parcel.ReadString16());
110 labelId = parcel.ReadInt32();
111 descriptionId = parcel.ReadInt32();
112 iconId = parcel.ReadInt32();
113 theme = Str16ToStr8(parcel.ReadString16());
114 visible = parcel.ReadBool();
115 kind = Str16ToStr8(parcel.ReadString16());
116 type = static_cast<AbilityType>(parcel.ReadInt32());
117 extensionAbilityType = static_cast<ExtensionAbilityType>(parcel.ReadInt32());
118 orientation = static_cast<DisplayOrientation>(parcel.ReadInt32());
119 launchMode = static_cast<LaunchMode>(parcel.ReadInt32());
120 srcPath = Str16ToStr8(parcel.ReadString16());
121 srcLanguage = Str16ToStr8(parcel.ReadString16());
122
123 int32_t permissionsSize;
124 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, permissionsSize);
125 for (auto i = 0; i < permissionsSize; i++) {
126 permissions.emplace_back(Str16ToStr8(parcel.ReadString16()));
127 }
128
129 process = Str16ToStr8(parcel.ReadString16());
130
131 int32_t deviceTypesSize;
132 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypesSize);
133 for (auto i = 0; i < deviceTypesSize; i++) {
134 deviceTypes.emplace_back(Str16ToStr8(parcel.ReadString16()));
135 }
136
137 int32_t deviceCapabilitiesSize;
138 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceCapabilitiesSize);
139 for (auto i = 0; i < deviceCapabilitiesSize; i++) {
140 deviceCapabilities.emplace_back(Str16ToStr8(parcel.ReadString16()));
141 }
142 uri = Str16ToStr8(parcel.ReadString16());
143 targetAbility = Str16ToStr8(parcel.ReadString16());
144
145 std::unique_ptr<ApplicationInfo> appInfo(parcel.ReadParcelable<ApplicationInfo>());
146 if (!appInfo) {
147 APP_LOGE("ReadParcelable<ApplicationInfo> failed");
148 return false;
149 }
150 applicationInfo = *appInfo;
151
152 isLauncherAbility = parcel.ReadBool();
153 isNativeAbility = parcel.ReadBool();
154 enabled = parcel.ReadBool();
155 supportPipMode = parcel.ReadBool();
156 formEnabled = parcel.ReadBool();
157 removeMissionAfterTerminate = parcel.ReadBool();
158
159 readPermission = Str16ToStr8(parcel.ReadString16());
160 writePermission = Str16ToStr8(parcel.ReadString16());
161 int32_t configChangesSize;
162 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, configChangesSize);
163 for (auto i = 0; i < configChangesSize; i++) {
164 configChanges.emplace_back(Str16ToStr8(parcel.ReadString16()));
165 }
166 formEntity = parcel.ReadUint32();
167 minFormHeight = parcel.ReadInt32();
168 defaultFormHeight = parcel.ReadInt32();
169 minFormWidth = parcel.ReadInt32();
170 defaultFormWidth = parcel.ReadInt32();
171 int32_t metaDataSize;
172 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metaDataSize);
173 for (auto i = 0; i < metaDataSize; i++) {
174 std::unique_ptr<CustomizeData> customizeDataPtr(parcel.ReadParcelable<CustomizeData>());
175 if (!customizeDataPtr) {
176 APP_LOGE("ReadParcelable<Metadata> failed");
177 return false;
178 }
179 metaData.customizeData.emplace_back(*customizeDataPtr);
180 }
181 backgroundModes = parcel.ReadUint32();
182
183 package = Str16ToStr8(parcel.ReadString16());
184 bundleName = Str16ToStr8(parcel.ReadString16());
185 moduleName = Str16ToStr8(parcel.ReadString16());
186 applicationName = Str16ToStr8(parcel.ReadString16());
187
188 codePath = Str16ToStr8(parcel.ReadString16());
189 resourcePath = Str16ToStr8(parcel.ReadString16());
190 hapPath = Str16ToStr8(parcel.ReadString16());
191
192 srcEntrance = Str16ToStr8(parcel.ReadString16());
193 int32_t metadataSize;
194 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadataSize);
195 for (auto i = 0; i < metadataSize; i++) {
196 std::unique_ptr<Metadata> metadataPtr(parcel.ReadParcelable<Metadata>());
197 if (!metadataPtr) {
198 APP_LOGE("ReadParcelable<Metadata> failed");
199 return false;
200 }
201 metadata.emplace_back(*metadataPtr);
202 }
203 isModuleJson = parcel.ReadBool();
204 isStageBasedModel = parcel.ReadBool();
205 continuable = parcel.ReadBool();
206 priority = parcel.ReadInt32();
207
208 startWindowIcon = Str16ToStr8(parcel.ReadString16());
209 startWindowIconId = parcel.ReadInt32();
210 startWindowBackground = Str16ToStr8(parcel.ReadString16());
211 startWindowBackgroundId = parcel.ReadInt32();
212
213 originalBundleName = Str16ToStr8(parcel.ReadString16());
214 appName = Str16ToStr8(parcel.ReadString16());
215 privacyUrl = Str16ToStr8(parcel.ReadString16());
216 privacyName = Str16ToStr8(parcel.ReadString16());
217 downloadUrl = Str16ToStr8(parcel.ReadString16());
218 versionName = Str16ToStr8(parcel.ReadString16());
219 className = Str16ToStr8(parcel.ReadString16());
220 originalClassName = Str16ToStr8(parcel.ReadString16());
221 uriPermissionMode = Str16ToStr8(parcel.ReadString16());
222 uriPermissionPath = Str16ToStr8(parcel.ReadString16());
223 packageSize = parcel.ReadUint32();
224 multiUserShared = parcel.ReadBool();
225 grantPermission = parcel.ReadBool();
226 directLaunch = parcel.ReadBool();
227 subType = static_cast<AbilitySubType>(parcel.ReadInt32());
228 libPath = Str16ToStr8(parcel.ReadString16());
229 deviceId = Str16ToStr8(parcel.ReadString16());
230 compileMode = static_cast<CompileMode>(parcel.ReadInt32());
231
232 int32_t windowModeSize = parcel.ReadInt32();
233 for (auto index = 0; index < windowModeSize; ++index) {
234 windowModes.emplace_back(static_cast<SupportWindowMode>(parcel.ReadInt32()));
235 }
236 maxWindowRatio = parcel.ReadDouble();
237 minWindowRatio = parcel.ReadDouble();
238 maxWindowWidth = parcel.ReadUint32();
239 minWindowWidth = parcel.ReadUint32();
240 maxWindowHeight = parcel.ReadUint32();
241 minWindowHeight = parcel.ReadUint32();
242 uid = parcel.ReadInt32();
243 return true;
244 }
245
Unmarshalling(Parcel & parcel)246 AbilityInfo *AbilityInfo::Unmarshalling(Parcel &parcel)
247 {
248 AbilityInfo *info = new (std::nothrow) AbilityInfo();
249 if (info && !info->ReadFromParcel(parcel)) {
250 APP_LOGW("read from parcel failed");
251 delete info;
252 info = nullptr;
253 }
254 return info;
255 }
256
Marshalling(Parcel & parcel) const257 bool AbilityInfo::Marshalling(Parcel &parcel) const
258 {
259 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
260 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(label));
261 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
262 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(iconPath));
263 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, labelId);
264 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, descriptionId);
265 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, iconId);
266 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(theme));
267 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, visible);
268 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(kind));
269 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(type));
270 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(extensionAbilityType));
271 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(orientation));
272 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(launchMode));
273 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcPath));
274 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcLanguage));
275 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, permissions.size());
276 for (auto &permission : permissions) {
277 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(permission));
278 }
279
280 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(process));
281 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypes.size());
282 for (auto &deviceType : deviceTypes) {
283 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceType));
284 }
285
286 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceCapabilities.size());
287 for (auto &deviceCapability : deviceCapabilities) {
288 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceCapability));
289 }
290 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri));
291 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(targetAbility));
292 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &applicationInfo);
293 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isLauncherAbility);
294 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isNativeAbility);
295 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, enabled);
296 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, supportPipMode);
297 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, formEnabled);
298 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, removeMissionAfterTerminate);
299 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(readPermission));
300 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(writePermission));
301 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, configChanges.size());
302 for (auto &configChange : configChanges) {
303 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(configChange));
304 }
305 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, formEntity);
306 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, minFormHeight);
307 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, defaultFormHeight);
308 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, minFormWidth);
309 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, defaultFormWidth);
310 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metaData.customizeData.size());
311 for (auto &meta : metaData.customizeData) {
312 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &meta);
313 }
314 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, backgroundModes);
315
316 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(package));
317 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
318 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
319 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(applicationName));
320 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(codePath));
321 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(resourcePath));
322 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hapPath));
323
324 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcEntrance));
325
326 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadata.size());
327 for (auto &meta : metadata) {
328 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &meta);
329 }
330
331 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isModuleJson);
332 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isStageBasedModel);
333 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, continuable);
334 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, priority);
335
336 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(startWindowIcon));
337 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, startWindowIconId);
338 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(startWindowBackground));
339 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, startWindowBackgroundId);
340
341 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(originalBundleName));
342 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(appName));
343 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(privacyUrl));
344 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(privacyName));
345 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(downloadUrl));
346 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(versionName));
347 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(className));
348 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(originalClassName));
349 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uriPermissionMode));
350 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uriPermissionPath));
351 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, packageSize);
352 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, multiUserShared);
353 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, grantPermission);
354 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, directLaunch);
355 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(subType));
356 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(libPath));
357 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceId));
358 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(compileMode));
359
360 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, windowModes.size());
361 for (auto &mode : windowModes) {
362 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(mode));
363 }
364 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Double, parcel, maxWindowRatio);
365 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Double, parcel, minWindowRatio);
366 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, maxWindowWidth);
367 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, minWindowWidth);
368 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, maxWindowHeight);
369 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, minWindowHeight);
370 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, uid);
371 return true;
372 }
373
Dump(std::string prefix,int fd)374 void AbilityInfo::Dump(std::string prefix, int fd)
375 {
376 APP_LOGI("called dump Abilityinfo");
377 if (fd < 0) {
378 APP_LOGE("dump Abilityinfo fd error");
379 return;
380 }
381 int flags = fcntl(fd, F_GETFL);
382 if (flags < 0) {
383 APP_LOGE("dump Abilityinfo fcntl error, errno : %{public}d", errno);
384 return;
385 }
386 uint uflags = static_cast<uint>(flags);
387 uflags &= O_ACCMODE;
388 if ((uflags == O_WRONLY) || (uflags == O_RDWR)) {
389 nlohmann::json jsonObject = *this;
390 std::string result;
391 result.append(prefix);
392 result.append(jsonObject.dump(Constants::DUMP_INDENT));
393 int ret = TEMP_FAILURE_RETRY(write(fd, result.c_str(), result.size()));
394 if (ret < 0) {
395 APP_LOGE("dump Abilityinfo write error, errno : %{public}d", errno);
396 }
397 }
398 return;
399 }
400
to_json(nlohmann::json & jsonObject,const CustomizeData & customizeData)401 void to_json(nlohmann::json &jsonObject, const CustomizeData &customizeData)
402 {
403 jsonObject = nlohmann::json {
404 {JSON_KEY_NAME, customizeData.name},
405 {JSON_KEY_META_VALUE, customizeData.value},
406 {JSON_KEY_META_EXTRA, customizeData.extra}
407 };
408 }
409
to_json(nlohmann::json & jsonObject,const MetaData & metaData)410 void to_json(nlohmann::json &jsonObject, const MetaData &metaData)
411 {
412 jsonObject = nlohmann::json {
413 {JSON_KEY_CUSTOMIZE_DATA, metaData.customizeData}
414 };
415 }
416
to_json(nlohmann::json & jsonObject,const Metadata & metadata)417 void to_json(nlohmann::json &jsonObject, const Metadata &metadata)
418 {
419 jsonObject = nlohmann::json {
420 {META_DATA_NAME, metadata.name},
421 {META_DATA_VALUE, metadata.value},
422 {META_DATA_RESOURCE, metadata.resource}
423 };
424 }
425
to_json(nlohmann::json & jsonObject,const AbilityInfo & abilityInfo)426 void to_json(nlohmann::json &jsonObject, const AbilityInfo &abilityInfo)
427 {
428 APP_LOGD("AbilityInfo to_json begin");
429 jsonObject = nlohmann::json {
430 {JSON_KEY_NAME, abilityInfo.name},
431 {JSON_KEY_LABEL, abilityInfo.label},
432 {JSON_KEY_DESCRIPTION, abilityInfo.description},
433 {JSON_KEY_ICON_PATH, abilityInfo.iconPath},
434 {JSON_KEY_LABEL_ID, abilityInfo.labelId},
435 {JSON_KEY_DESCRIPTION_ID, abilityInfo.descriptionId},
436 {JSON_KEY_ICON_ID, abilityInfo.iconId},
437 {JSON_KEY_THEME, abilityInfo.theme},
438 {JSON_KEY_VISIBLE, abilityInfo.visible},
439 {JSON_KEY_KIND, abilityInfo.kind},
440 {JSON_KEY_TYPE, abilityInfo.type},
441 {JSON_KEY_EXTENSION_ABILITY_TYPE, abilityInfo.extensionAbilityType},
442 {JSON_KEY_ORIENTATION, abilityInfo.orientation},
443 {JSON_KEY_LAUNCH_MODE, abilityInfo.launchMode},
444 {JSON_KEY_SRC_PATH, abilityInfo.srcPath},
445 {JSON_KEY_SRC_LANGUAGE, abilityInfo.srcLanguage},
446 {JSON_KEY_PERMISSIONS, abilityInfo.permissions},
447 {JSON_KEY_PROCESS, abilityInfo.process},
448 {JSON_KEY_DEVICE_TYPES, abilityInfo.deviceTypes},
449 {JSON_KEY_DEVICE_CAPABILITIES, abilityInfo.deviceCapabilities},
450 {JSON_KEY_URI, abilityInfo.uri},
451 {JSON_KEY_TARGET_ABILITY, abilityInfo.targetAbility},
452 {APPLICATION_INFO, abilityInfo.applicationInfo},
453 {JSON_KEY_IS_LAUNCHER_ABILITY, abilityInfo.isLauncherAbility},
454 {JSON_KEY_IS_NATIVE_ABILITY, abilityInfo.isNativeAbility},
455 {JSON_KEY_ENABLED, abilityInfo.enabled},
456 {JSON_KEY_SUPPORT_PIP_MODE, abilityInfo.supportPipMode},
457 {JSON_KEY_FORM_ENABLED, abilityInfo.formEnabled},
458 {JSON_KEY_READ_PERMISSION, abilityInfo.readPermission},
459 {JSON_KEY_WRITE_PERMISSION, abilityInfo.writePermission},
460 {JSON_KEY_CONFIG_CHANGES, abilityInfo.configChanges},
461 {JSON_KEY_FORM_ENTITY, abilityInfo.formEntity},
462 {JSON_KEY_MIN_FORM_HEIGHT, abilityInfo.minFormHeight},
463 {JSON_KEY_DEFAULT_FORM_HEIGHT, abilityInfo.defaultFormHeight},
464 {JSON_KEY_MIN_FORM_WIDTH, abilityInfo.minFormWidth},
465 {JSON_KEY_DEFAULT_FORM_WIDTH, abilityInfo.defaultFormWidth},
466 {JSON_KEY_META_DATA, abilityInfo.metaData},
467 {JSON_KEY_BACKGROUND_MODES, abilityInfo.backgroundModes},
468 {JSON_KEY_PACKAGE, abilityInfo.package},
469 {Constants::BUNDLE_NAME, abilityInfo.bundleName},
470 {Constants::MODULE_NAME, abilityInfo.moduleName},
471 {JSON_KEY_APPLICATION_NAME, abilityInfo.applicationName},
472 {JSON_KEY_CODE_PATH, abilityInfo.codePath},
473 {JSON_KEY_RESOURCE_PATH, abilityInfo.resourcePath},
474 {Constants::HAP_PATH, abilityInfo.hapPath},
475 {SRC_ENTRANCE, abilityInfo.srcEntrance},
476 {META_DATA, abilityInfo.metadata},
477 {IS_MODULE_JSON, abilityInfo.isModuleJson},
478 {IS_STAGE_BASED_MODEL, abilityInfo.isStageBasedModel},
479 {CONTINUABLE, abilityInfo.continuable},
480 {PRIORITY, abilityInfo.priority},
481 {JSON_KEY_START_WINDOW_ICON, abilityInfo.startWindowIcon},
482 {JSON_KEY_START_WINDOW_ICON_ID, abilityInfo.startWindowIconId},
483 {JSON_KEY_START_WINDOW_BACKGROUND, abilityInfo.startWindowBackground},
484 {JSON_KEY_START_WINDOW_BACKGROUND_ID, abilityInfo.startWindowBackgroundId},
485 {JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE, abilityInfo.removeMissionAfterTerminate},
486 {JSON_KEY_COMPILE_MODE, abilityInfo.compileMode},
487 {JOSN_KEY_SUPPORT_WINDOW_MODE, abilityInfo.windowModes},
488 {JOSN_KEY_MAX_WINDOW_WIDTH, abilityInfo.maxWindowWidth},
489 {JOSN_KEY_MIN_WINDOW_WIDTH, abilityInfo.minWindowWidth},
490 {JOSN_KEY_MAX_WINDOW_HEIGHT, abilityInfo.maxWindowHeight},
491 {JOSN_KEY_MIN_WINDOW_HEIGHT, abilityInfo.minWindowHeight},
492 {JOSN_KEY_UID, abilityInfo.uid},
493 {JOSN_KEY_EXCLUDE_FROM_MISSIONS, abilityInfo.excludeFromMissions}
494 };
495 if (abilityInfo.maxWindowRatio == 0) {
496 // maxWindowRatio in json string will be 0 instead of 0.0
497 jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = 0;
498 } else {
499 jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = abilityInfo.maxWindowRatio;
500 }
501
502 if (abilityInfo.minWindowRatio == 0) {
503 jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = 0;
504 } else {
505 jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = abilityInfo.minWindowRatio;
506 }
507 }
508
from_json(const nlohmann::json & jsonObject,CustomizeData & customizeData)509 void from_json(const nlohmann::json &jsonObject, CustomizeData &customizeData)
510 {
511 const auto &jsonObjectEnd = jsonObject.end();
512 int32_t parseResult = ERR_OK;
513 GetValueIfFindKey<std::string>(jsonObject,
514 jsonObjectEnd,
515 JSON_KEY_NAME,
516 customizeData.name,
517 JsonType::STRING,
518 false,
519 parseResult,
520 ArrayType::NOT_ARRAY);
521 GetValueIfFindKey<std::string>(jsonObject,
522 jsonObjectEnd,
523 JSON_KEY_META_VALUE,
524 customizeData.value,
525 JsonType::STRING,
526 false,
527 parseResult,
528 ArrayType::NOT_ARRAY);
529 GetValueIfFindKey<std::string>(jsonObject,
530 jsonObjectEnd,
531 JSON_KEY_META_EXTRA,
532 customizeData.extra,
533 JsonType::STRING,
534 false,
535 parseResult,
536 ArrayType::NOT_ARRAY);
537 }
538
from_json(const nlohmann::json & jsonObject,MetaData & metaData)539 void from_json(const nlohmann::json &jsonObject, MetaData &metaData)
540 {
541 const auto &jsonObjectEnd = jsonObject.end();
542 int32_t parseResult = ERR_OK;
543 GetValueIfFindKey<std::vector<CustomizeData>>(jsonObject,
544 jsonObjectEnd,
545 JSON_KEY_CUSTOMIZE_DATA,
546 metaData.customizeData,
547 JsonType::ARRAY,
548 false,
549 parseResult,
550 ArrayType::OBJECT);
551 }
552
from_json(const nlohmann::json & jsonObject,Metadata & metadata)553 void from_json(const nlohmann::json &jsonObject, Metadata &metadata)
554 {
555 const auto &jsonObjectEnd = jsonObject.end();
556 int32_t parseResult = ERR_OK;
557 GetValueIfFindKey<std::string>(jsonObject,
558 jsonObjectEnd,
559 META_DATA_NAME,
560 metadata.name,
561 JsonType::STRING,
562 false,
563 parseResult,
564 ArrayType::NOT_ARRAY);
565 GetValueIfFindKey<std::string>(jsonObject,
566 jsonObjectEnd,
567 META_DATA_VALUE,
568 metadata.value,
569 JsonType::STRING,
570 false,
571 parseResult,
572 ArrayType::NOT_ARRAY);
573 GetValueIfFindKey<std::string>(jsonObject,
574 jsonObjectEnd,
575 META_DATA_RESOURCE,
576 metadata.resource,
577 JsonType::STRING,
578 false,
579 parseResult,
580 ArrayType::NOT_ARRAY);
581 if (parseResult != ERR_OK) {
582 APP_LOGE("read Ability Metadata from database error, error code : %{public}d", parseResult);
583 }
584 }
585
from_json(const nlohmann::json & jsonObject,AbilityInfo & abilityInfo)586 void from_json(const nlohmann::json &jsonObject, AbilityInfo &abilityInfo)
587 {
588 APP_LOGD("AbilityInfo from_json begin");
589 const auto &jsonObjectEnd = jsonObject.end();
590 int32_t parseResult = ERR_OK;
591 GetValueIfFindKey<std::string>(jsonObject,
592 jsonObjectEnd,
593 JSON_KEY_NAME,
594 abilityInfo.name,
595 JsonType::STRING,
596 false,
597 parseResult,
598 ArrayType::NOT_ARRAY);
599 GetValueIfFindKey<std::string>(jsonObject,
600 jsonObjectEnd,
601 JSON_KEY_LABEL,
602 abilityInfo.label,
603 JsonType::STRING,
604 false,
605 parseResult,
606 ArrayType::NOT_ARRAY);
607 GetValueIfFindKey<std::string>(jsonObject,
608 jsonObjectEnd,
609 JSON_KEY_DESCRIPTION,
610 abilityInfo.description,
611 JsonType::STRING,
612 false,
613 parseResult,
614 ArrayType::NOT_ARRAY);
615 GetValueIfFindKey<std::string>(jsonObject,
616 jsonObjectEnd,
617 JSON_KEY_ICON_PATH,
618 abilityInfo.iconPath,
619 JsonType::STRING,
620 false,
621 parseResult,
622 ArrayType::NOT_ARRAY);
623 GetValueIfFindKey<int32_t>(jsonObject,
624 jsonObjectEnd,
625 JSON_KEY_LABEL_ID,
626 abilityInfo.labelId,
627 JsonType::NUMBER,
628 false,
629 parseResult,
630 ArrayType::NOT_ARRAY);
631 GetValueIfFindKey<int32_t>(jsonObject,
632 jsonObjectEnd,
633 JSON_KEY_DESCRIPTION_ID,
634 abilityInfo.descriptionId,
635 JsonType::NUMBER,
636 false,
637 parseResult,
638 ArrayType::NOT_ARRAY);
639 GetValueIfFindKey<int32_t>(jsonObject,
640 jsonObjectEnd,
641 JSON_KEY_ICON_ID,
642 abilityInfo.iconId,
643 JsonType::NUMBER,
644 false,
645 parseResult,
646 ArrayType::NOT_ARRAY);
647 GetValueIfFindKey<std::string>(jsonObject,
648 jsonObjectEnd,
649 JSON_KEY_THEME,
650 abilityInfo.theme,
651 JsonType::STRING,
652 false,
653 parseResult,
654 ArrayType::NOT_ARRAY);
655 GetValueIfFindKey<bool>(jsonObject,
656 jsonObjectEnd,
657 JSON_KEY_VISIBLE,
658 abilityInfo.visible,
659 JsonType::BOOLEAN,
660 false,
661 parseResult,
662 ArrayType::NOT_ARRAY);
663 GetValueIfFindKey<std::string>(jsonObject,
664 jsonObjectEnd,
665 JSON_KEY_KIND,
666 abilityInfo.kind,
667 JsonType::STRING,
668 false,
669 parseResult,
670 ArrayType::NOT_ARRAY);
671 GetValueIfFindKey<AbilityType>(jsonObject,
672 jsonObjectEnd,
673 JSON_KEY_TYPE,
674 abilityInfo.type,
675 JsonType::NUMBER,
676 false,
677 parseResult,
678 ArrayType::NOT_ARRAY);
679 GetValueIfFindKey<ExtensionAbilityType>(jsonObject,
680 jsonObjectEnd,
681 JSON_KEY_EXTENSION_ABILITY_TYPE,
682 abilityInfo.extensionAbilityType,
683 JsonType::NUMBER,
684 false,
685 parseResult,
686 ArrayType::NOT_ARRAY);
687 GetValueIfFindKey<DisplayOrientation>(jsonObject,
688 jsonObjectEnd,
689 JSON_KEY_ORIENTATION,
690 abilityInfo.orientation,
691 JsonType::NUMBER,
692 false,
693 parseResult,
694 ArrayType::NOT_ARRAY);
695 GetValueIfFindKey<LaunchMode>(jsonObject,
696 jsonObjectEnd,
697 JSON_KEY_LAUNCH_MODE,
698 abilityInfo.launchMode,
699 JsonType::NUMBER,
700 false,
701 parseResult,
702 ArrayType::NOT_ARRAY);
703 GetValueIfFindKey<std::string>(jsonObject,
704 jsonObjectEnd,
705 JSON_KEY_SRC_PATH,
706 abilityInfo.srcPath,
707 JsonType::STRING,
708 false,
709 parseResult,
710 ArrayType::NOT_ARRAY);
711 GetValueIfFindKey<std::string>(jsonObject,
712 jsonObjectEnd,
713 JSON_KEY_SRC_LANGUAGE,
714 abilityInfo.srcLanguage,
715 JsonType::STRING,
716 false,
717 parseResult,
718 ArrayType::NOT_ARRAY);
719 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
720 jsonObjectEnd,
721 JSON_KEY_PERMISSIONS,
722 abilityInfo.permissions,
723 JsonType::ARRAY,
724 false,
725 parseResult,
726 ArrayType::STRING);
727 GetValueIfFindKey<std::string>(jsonObject,
728 jsonObjectEnd,
729 JSON_KEY_PROCESS,
730 abilityInfo.process,
731 JsonType::STRING,
732 false,
733 parseResult,
734 ArrayType::NOT_ARRAY);
735 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
736 jsonObjectEnd,
737 JSON_KEY_DEVICE_TYPES,
738 abilityInfo.deviceTypes,
739 JsonType::ARRAY,
740 false,
741 parseResult,
742 ArrayType::STRING);
743 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
744 jsonObjectEnd,
745 JSON_KEY_DEVICE_CAPABILITIES,
746 abilityInfo.deviceCapabilities,
747 JsonType::ARRAY,
748 false,
749 parseResult,
750 ArrayType::STRING);
751 GetValueIfFindKey<std::string>(jsonObject,
752 jsonObjectEnd,
753 JSON_KEY_URI,
754 abilityInfo.uri,
755 JsonType::STRING,
756 false,
757 parseResult,
758 ArrayType::NOT_ARRAY);
759 GetValueIfFindKey<std::string>(jsonObject,
760 jsonObjectEnd,
761 JSON_KEY_TARGET_ABILITY,
762 abilityInfo.targetAbility,
763 JsonType::STRING,
764 false,
765 parseResult,
766 ArrayType::NOT_ARRAY);
767 GetValueIfFindKey<ApplicationInfo>(jsonObject,
768 jsonObjectEnd,
769 APPLICATION_INFO,
770 abilityInfo.applicationInfo,
771 JsonType::OBJECT,
772 false,
773 parseResult,
774 ArrayType::NOT_ARRAY);
775 GetValueIfFindKey<bool>(jsonObject,
776 jsonObjectEnd,
777 JSON_KEY_IS_LAUNCHER_ABILITY,
778 abilityInfo.isLauncherAbility,
779 JsonType::BOOLEAN,
780 false,
781 parseResult,
782 ArrayType::NOT_ARRAY);
783 GetValueIfFindKey<bool>(jsonObject,
784 jsonObjectEnd,
785 JSON_KEY_IS_NATIVE_ABILITY,
786 abilityInfo.isNativeAbility,
787 JsonType::BOOLEAN,
788 false,
789 parseResult,
790 ArrayType::NOT_ARRAY);
791 GetValueIfFindKey<bool>(jsonObject,
792 jsonObjectEnd,
793 JSON_KEY_ENABLED,
794 abilityInfo.enabled,
795 JsonType::BOOLEAN,
796 false,
797 parseResult,
798 ArrayType::NOT_ARRAY);
799 GetValueIfFindKey<bool>(jsonObject,
800 jsonObjectEnd,
801 JSON_KEY_SUPPORT_PIP_MODE,
802 abilityInfo.supportPipMode,
803 JsonType::BOOLEAN,
804 false,
805 parseResult,
806 ArrayType::NOT_ARRAY);
807 GetValueIfFindKey<bool>(jsonObject,
808 jsonObjectEnd,
809 JSON_KEY_FORM_ENABLED,
810 abilityInfo.formEnabled,
811 JsonType::BOOLEAN,
812 false,
813 parseResult,
814 ArrayType::NOT_ARRAY);
815 GetValueIfFindKey<std::string>(jsonObject,
816 jsonObjectEnd,
817 JSON_KEY_READ_PERMISSION,
818 abilityInfo.readPermission,
819 JsonType::STRING,
820 false,
821 parseResult,
822 ArrayType::NOT_ARRAY);
823 GetValueIfFindKey<std::string>(jsonObject,
824 jsonObjectEnd,
825 JSON_KEY_WRITE_PERMISSION,
826 abilityInfo.writePermission,
827 JsonType::STRING,
828 false,
829 parseResult,
830 ArrayType::NOT_ARRAY);
831 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
832 jsonObjectEnd,
833 JSON_KEY_CONFIG_CHANGES,
834 abilityInfo.configChanges,
835 JsonType::ARRAY,
836 false,
837 parseResult,
838 ArrayType::STRING);
839 GetValueIfFindKey<uint32_t>(jsonObject,
840 jsonObjectEnd,
841 JSON_KEY_FORM_ENTITY,
842 abilityInfo.formEntity,
843 JsonType::NUMBER,
844 false,
845 parseResult,
846 ArrayType::NOT_ARRAY);
847 GetValueIfFindKey<int32_t>(jsonObject,
848 jsonObjectEnd,
849 JSON_KEY_MIN_FORM_HEIGHT,
850 abilityInfo.minFormHeight,
851 JsonType::NUMBER,
852 false,
853 parseResult,
854 ArrayType::NOT_ARRAY);
855 GetValueIfFindKey<int32_t>(jsonObject,
856 jsonObjectEnd,
857 JSON_KEY_DEFAULT_FORM_HEIGHT,
858 abilityInfo.defaultFormHeight,
859 JsonType::NUMBER,
860 false,
861 parseResult,
862 ArrayType::NOT_ARRAY);
863 GetValueIfFindKey<int32_t>(jsonObject,
864 jsonObjectEnd,
865 JSON_KEY_MIN_FORM_WIDTH,
866 abilityInfo.minFormWidth,
867 JsonType::NUMBER,
868 false,
869 parseResult,
870 ArrayType::NOT_ARRAY);
871 GetValueIfFindKey<int32_t>(jsonObject,
872 jsonObjectEnd,
873 JSON_KEY_DEFAULT_FORM_WIDTH,
874 abilityInfo.defaultFormWidth,
875 JsonType::NUMBER,
876 false,
877 parseResult,
878 ArrayType::NOT_ARRAY);
879 GetValueIfFindKey<MetaData>(jsonObject,
880 jsonObjectEnd,
881 JSON_KEY_META_DATA,
882 abilityInfo.metaData,
883 JsonType::OBJECT,
884 false,
885 parseResult,
886 ArrayType::NOT_ARRAY);
887 GetValueIfFindKey<uint32_t>(jsonObject,
888 jsonObjectEnd,
889 JSON_KEY_BACKGROUND_MODES,
890 abilityInfo.backgroundModes,
891 JsonType::NUMBER,
892 false,
893 parseResult,
894 ArrayType::NOT_ARRAY);
895 GetValueIfFindKey<std::string>(jsonObject,
896 jsonObjectEnd,
897 JSON_KEY_PACKAGE,
898 abilityInfo.package,
899 JsonType::STRING,
900 false,
901 parseResult,
902 ArrayType::NOT_ARRAY);
903 GetValueIfFindKey<std::string>(jsonObject,
904 jsonObjectEnd,
905 Constants::BUNDLE_NAME,
906 abilityInfo.bundleName,
907 JsonType::STRING,
908 false,
909 parseResult,
910 ArrayType::NOT_ARRAY);
911 GetValueIfFindKey<std::string>(jsonObject,
912 jsonObjectEnd,
913 Constants::MODULE_NAME,
914 abilityInfo.moduleName,
915 JsonType::STRING,
916 false,
917 parseResult,
918 ArrayType::NOT_ARRAY);
919 GetValueIfFindKey<std::string>(jsonObject,
920 jsonObjectEnd,
921 JSON_KEY_APPLICATION_NAME,
922 abilityInfo.applicationName,
923 JsonType::STRING,
924 false,
925 parseResult,
926 ArrayType::NOT_ARRAY);
927 GetValueIfFindKey<std::string>(jsonObject,
928 jsonObjectEnd,
929 JSON_KEY_CODE_PATH,
930 abilityInfo.codePath,
931 JsonType::STRING,
932 false,
933 parseResult,
934 ArrayType::NOT_ARRAY);
935 GetValueIfFindKey<std::string>(jsonObject,
936 jsonObjectEnd,
937 JSON_KEY_RESOURCE_PATH,
938 abilityInfo.resourcePath,
939 JsonType::STRING,
940 false,
941 parseResult,
942 ArrayType::NOT_ARRAY);
943 GetValueIfFindKey<std::string>(jsonObject,
944 jsonObjectEnd,
945 Constants::HAP_PATH,
946 abilityInfo.hapPath,
947 JsonType::STRING,
948 false,
949 parseResult,
950 ArrayType::NOT_ARRAY);
951 GetValueIfFindKey<std::string>(jsonObject,
952 jsonObjectEnd,
953 SRC_ENTRANCE,
954 abilityInfo.srcEntrance,
955 JsonType::STRING,
956 false,
957 parseResult,
958 ArrayType::NOT_ARRAY);
959 GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
960 jsonObjectEnd,
961 META_DATA,
962 abilityInfo.metadata,
963 JsonType::ARRAY,
964 false,
965 parseResult,
966 ArrayType::OBJECT);
967 GetValueIfFindKey<bool>(jsonObject,
968 jsonObjectEnd,
969 IS_MODULE_JSON,
970 abilityInfo.isModuleJson,
971 JsonType::BOOLEAN,
972 false,
973 parseResult,
974 ArrayType::NOT_ARRAY);
975 GetValueIfFindKey<bool>(jsonObject,
976 jsonObjectEnd,
977 IS_STAGE_BASED_MODEL,
978 abilityInfo.isStageBasedModel,
979 JsonType::BOOLEAN,
980 false,
981 parseResult,
982 ArrayType::NOT_ARRAY);
983 GetValueIfFindKey<bool>(jsonObject,
984 jsonObjectEnd,
985 CONTINUABLE,
986 abilityInfo.continuable,
987 JsonType::BOOLEAN,
988 false,
989 parseResult,
990 ArrayType::NOT_ARRAY);
991 GetValueIfFindKey<int32_t>(jsonObject,
992 jsonObjectEnd,
993 PRIORITY,
994 abilityInfo.priority,
995 JsonType::NUMBER,
996 false,
997 parseResult,
998 ArrayType::NOT_ARRAY);
999 GetValueIfFindKey<std::string>(jsonObject,
1000 jsonObjectEnd,
1001 JSON_KEY_START_WINDOW_ICON,
1002 abilityInfo.startWindowIcon,
1003 JsonType::STRING,
1004 false,
1005 parseResult,
1006 ArrayType::NOT_ARRAY);
1007 GetValueIfFindKey<int32_t>(jsonObject,
1008 jsonObjectEnd,
1009 JSON_KEY_START_WINDOW_ICON_ID,
1010 abilityInfo.startWindowIconId,
1011 JsonType::NUMBER,
1012 false,
1013 parseResult,
1014 ArrayType::NOT_ARRAY);
1015 GetValueIfFindKey<std::string>(jsonObject,
1016 jsonObjectEnd,
1017 JSON_KEY_START_WINDOW_BACKGROUND,
1018 abilityInfo.startWindowBackground,
1019 JsonType::STRING,
1020 false,
1021 parseResult,
1022 ArrayType::NOT_ARRAY);
1023 GetValueIfFindKey<int32_t>(jsonObject,
1024 jsonObjectEnd,
1025 JSON_KEY_START_WINDOW_BACKGROUND_ID,
1026 abilityInfo.startWindowBackgroundId,
1027 JsonType::NUMBER,
1028 false,
1029 parseResult,
1030 ArrayType::NOT_ARRAY);
1031 GetValueIfFindKey<bool>(jsonObject,
1032 jsonObjectEnd,
1033 JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE,
1034 abilityInfo.removeMissionAfterTerminate,
1035 JsonType::BOOLEAN,
1036 false,
1037 parseResult,
1038 ArrayType::NOT_ARRAY);
1039 GetValueIfFindKey<CompileMode>(jsonObject,
1040 jsonObjectEnd,
1041 JSON_KEY_COMPILE_MODE,
1042 abilityInfo.compileMode,
1043 JsonType::NUMBER,
1044 false,
1045 parseResult,
1046 ArrayType::NOT_ARRAY);
1047 GetValueIfFindKey<std::vector<SupportWindowMode>>(jsonObject,
1048 jsonObjectEnd,
1049 JOSN_KEY_SUPPORT_WINDOW_MODE,
1050 abilityInfo.windowModes,
1051 JsonType::ARRAY,
1052 false,
1053 parseResult,
1054 ArrayType::NUMBER);
1055 GetValueIfFindKey<double>(jsonObject,
1056 jsonObjectEnd,
1057 JOSN_KEY_MAX_WINDOW_RATIO,
1058 abilityInfo.maxWindowRatio,
1059 JsonType::NUMBER,
1060 false,
1061 parseResult,
1062 ArrayType::NOT_ARRAY);
1063 GetValueIfFindKey<double>(jsonObject,
1064 jsonObjectEnd,
1065 JOSN_KEY_MIN_WINDOW_RATIO,
1066 abilityInfo.minWindowRatio,
1067 JsonType::NUMBER,
1068 false,
1069 parseResult,
1070 ArrayType::NOT_ARRAY);
1071 GetValueIfFindKey<uint32_t>(jsonObject,
1072 jsonObjectEnd,
1073 JOSN_KEY_MAX_WINDOW_WIDTH,
1074 abilityInfo.maxWindowWidth,
1075 JsonType::NUMBER,
1076 false,
1077 parseResult,
1078 ArrayType::NOT_ARRAY);
1079 GetValueIfFindKey<uint32_t>(jsonObject,
1080 jsonObjectEnd,
1081 JOSN_KEY_MIN_WINDOW_WIDTH,
1082 abilityInfo.minWindowWidth,
1083 JsonType::NUMBER,
1084 false,
1085 parseResult,
1086 ArrayType::NOT_ARRAY);
1087 GetValueIfFindKey<uint32_t>(jsonObject,
1088 jsonObjectEnd,
1089 JOSN_KEY_MAX_WINDOW_HEIGHT,
1090 abilityInfo.maxWindowHeight,
1091 JsonType::NUMBER,
1092 false,
1093 parseResult,
1094 ArrayType::NOT_ARRAY);
1095 GetValueIfFindKey<uint32_t>(jsonObject,
1096 jsonObjectEnd,
1097 JOSN_KEY_MIN_WINDOW_HEIGHT,
1098 abilityInfo.minWindowHeight,
1099 JsonType::NUMBER,
1100 false,
1101 parseResult,
1102 ArrayType::NOT_ARRAY);
1103 GetValueIfFindKey<int32_t>(jsonObject,
1104 jsonObjectEnd,
1105 JOSN_KEY_UID,
1106 abilityInfo.uid,
1107 JsonType::NUMBER,
1108 false,
1109 parseResult,
1110 ArrayType::NOT_ARRAY);
1111 GetValueIfFindKey<bool>(jsonObject,
1112 jsonObjectEnd,
1113 JOSN_KEY_EXCLUDE_FROM_MISSIONS,
1114 abilityInfo.excludeFromMissions,
1115 JsonType::BOOLEAN,
1116 false,
1117 parseResult,
1118 ArrayType::NOT_ARRAY);
1119 if (parseResult != ERR_OK) {
1120 APP_LOGE("AbilityInfo from_json error, error code : %{public}d", parseResult);
1121 }
1122 }
1123
ConvertToCompatiableAbilityInfo(CompatibleAbilityInfo & compatibleAbilityInfo) const1124 void AbilityInfo::ConvertToCompatiableAbilityInfo(CompatibleAbilityInfo& compatibleAbilityInfo) const
1125 {
1126 APP_LOGE("AbilityInfo::ConvertToCompatiableAbilityInfo called");
1127 compatibleAbilityInfo.package = package;
1128 compatibleAbilityInfo.name = name;
1129 compatibleAbilityInfo.label = label;
1130 compatibleAbilityInfo.description = description;
1131 compatibleAbilityInfo.iconPath = iconPath;
1132 compatibleAbilityInfo.uri = uri;
1133 compatibleAbilityInfo.moduleName = moduleName;
1134 compatibleAbilityInfo.process = process;
1135 compatibleAbilityInfo.targetAbility = targetAbility;
1136 compatibleAbilityInfo.appName = appName;
1137 compatibleAbilityInfo.privacyUrl = privacyUrl;
1138 compatibleAbilityInfo.privacyName = privacyName;
1139 compatibleAbilityInfo.downloadUrl = downloadUrl;
1140 compatibleAbilityInfo.versionName = versionName;
1141 compatibleAbilityInfo.backgroundModes = backgroundModes;
1142 compatibleAbilityInfo.packageSize = packageSize;
1143 compatibleAbilityInfo.visible = visible;
1144 compatibleAbilityInfo.formEnabled = formEnabled;
1145 compatibleAbilityInfo.multiUserShared = multiUserShared;
1146 compatibleAbilityInfo.type = type;
1147 compatibleAbilityInfo.subType = subType;
1148 compatibleAbilityInfo.orientation = orientation;
1149 compatibleAbilityInfo.launchMode = launchMode;
1150 compatibleAbilityInfo.permissions = permissions;
1151 compatibleAbilityInfo.deviceTypes = deviceTypes;
1152 compatibleAbilityInfo.deviceCapabilities = deviceCapabilities;
1153 compatibleAbilityInfo.supportPipMode = supportPipMode;
1154 compatibleAbilityInfo.grantPermission = grantPermission;
1155 compatibleAbilityInfo.readPermission = readPermission;
1156 compatibleAbilityInfo.writePermission = writePermission;
1157 compatibleAbilityInfo.uriPermissionMode = uriPermissionMode;
1158 compatibleAbilityInfo.uriPermissionPath = uriPermissionPath;
1159 compatibleAbilityInfo.directLaunch = directLaunch;
1160 compatibleAbilityInfo.bundleName = bundleName;
1161 compatibleAbilityInfo.className = className;
1162 compatibleAbilityInfo.originalClassName = originalClassName;
1163 compatibleAbilityInfo.deviceId = deviceId;
1164 CompatibleApplicationInfo convertedCompatibleApplicationInfo;
1165 applicationInfo.ConvertToCompatibleApplicationInfo(convertedCompatibleApplicationInfo);
1166 compatibleAbilityInfo.applicationInfo = convertedCompatibleApplicationInfo;
1167 compatibleAbilityInfo.formEntity = formEntity;
1168 compatibleAbilityInfo.minFormHeight = minFormHeight;
1169 compatibleAbilityInfo.defaultFormHeight = defaultFormHeight;
1170 compatibleAbilityInfo.minFormWidth = minFormWidth;
1171 compatibleAbilityInfo.defaultFormWidth = defaultFormWidth;
1172 compatibleAbilityInfo.iconId = iconId;
1173 compatibleAbilityInfo.labelId = labelId;
1174 compatibleAbilityInfo.descriptionId = descriptionId;
1175 compatibleAbilityInfo.enabled = enabled;
1176 }
1177 } // namespace AppExecFwk
1178 } // namespace OHOS
1179