1 /*
2 * Copyright (c) 2023-2024 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 "hilog_tag_wrapper.h"
25 #include "json_util.h"
26 #include "nlohmann/json.hpp"
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 JSON_KEY_READ_PERMISSION = "readPermission";
59 const std::string JSON_KEY_WRITE_PERMISSION = "writePermission";
60 const std::string JSON_KEY_CONFIG_CHANGES = "configChanges";
61 const std::string JSON_KEY_FORM = "form";
62 const std::string JSON_KEY_FORM_ENTITY = "formEntity";
63 const std::string JSON_KEY_MIN_FORM_HEIGHT = "minFormHeight";
64 const std::string JSON_KEY_DEFAULT_FORM_HEIGHT = "defaultFormHeight";
65 const std::string JSON_KEY_MIN_FORM_WIDTH = "minFormWidth";
66 const std::string JSON_KEY_DEFAULT_FORM_WIDTH = "defaultFormWidth";
67 const std::string JSON_KEY_BACKGROUND_MODES = "backgroundModes";
68 const std::string JSON_KEY_CUSTOMIZE_DATA = "customizeData";
69 const std::string JSON_KEY_META_DATA = "metaData";
70 const std::string JSON_KEY_META_VALUE = "value";
71 const std::string JSON_KEY_META_EXTRA = "extra";
72 const std::string JSON_KEY_LABEL_ID = "labelId";
73 const std::string JSON_KEY_DESCRIPTION_ID = "descriptionId";
74 const std::string JSON_KEY_ICON_ID = "iconId";
75 const std::string JSON_KEY_FORM_ENABLED = "formEnabled";
76 const std::string JSON_KEY_SRC_PATH = "srcPath";
77 const std::string JSON_KEY_SRC_LANGUAGE = "srcLanguage";
78 const std::string JSON_KEY_START_WINDOW_ICON = "startWindowIcon";
79 const std::string JSON_KEY_START_WINDOW_ICON_ID = "startWindowIconId";
80 const std::string JSON_KEY_START_WINDOW_BACKGROUND = "startWindowBackground";
81 const std::string JSON_KEY_START_WINDOW_BACKGROUND_ID = "startWindowBackgroundId";
82 const std::string JSON_KEY_COMPILE_MODE = "compileMode";
83 const std::string META_DATA = "metadata";
84 const std::string META_DATA_NAME = "name";
85 const std::string META_DATA_VALUE = "value";
86 const std::string META_DATA_RESOURCE = "resource";
87 const std::string SRC_ENTRANCE = "srcEntrance";
88 const std::string IS_MODULE_JSON = "isModuleJson";
89 const std::string IS_STAGE_BASED_MODEL = "isStageBasedModel";
90 const std::string CONTINUABLE = "continuable";
91 const std::string PRIORITY = "priority";
92 const std::string JOSN_KEY_SUPPORT_WINDOW_MODE = "supportWindowMode";
93 const std::string JOSN_KEY_MAX_WINDOW_RATIO = "maxWindowRatio";
94 const std::string JOSN_KEY_MIN_WINDOW_RATIO = "minWindowRatio";
95 const std::string JOSN_KEY_MAX_WINDOW_WIDTH = "maxWindowWidth";
96 const std::string JOSN_KEY_MIN_WINDOW_WIDTH = "minWindowWidth";
97 const std::string JOSN_KEY_MAX_WINDOW_HEIGHT = "maxWindowHeight";
98 const std::string JOSN_KEY_MIN_WINDOW_HEIGHT = "minWindowHeight";
99 const std::string JOSN_KEY_UID = "uid";
100 const std::string JOSN_KEY_EXCLUDE_FROM_MISSIONS = "excludeFromMissions";
101 const std::string JOSN_KEY_UNCLEARABLE_MISSION = "unclearableMission";
102 const std::string JSON_KEY_RECOVERABLE = "recoverable";
103 const std::string JSON_KEY_SUPPORT_EXT_NAMES = "supportExtNames";
104 const std::string JSON_KEY_SUPPORT_MIME_TYPES = "supportMimeTypes";
105 } // namespace
to_json(nlohmann::json & jsonObject,const CustomizeData & customizeData)106 void to_json(nlohmann::json &jsonObject, const CustomizeData &customizeData)
107 {
108 jsonObject = nlohmann::json {
109 {JSON_KEY_NAME, customizeData.name},
110 {JSON_KEY_META_VALUE, customizeData.value},
111 {JSON_KEY_META_EXTRA, customizeData.extra}
112 };
113 }
114
to_json(nlohmann::json & jsonObject,const MetaData & metaData)115 void to_json(nlohmann::json &jsonObject, const MetaData &metaData)
116 {
117 jsonObject = nlohmann::json {
118 {JSON_KEY_CUSTOMIZE_DATA, metaData.customizeData}
119 };
120 }
121
to_json(nlohmann::json & jsonObject,const Metadata & metadata)122 void to_json(nlohmann::json &jsonObject, const Metadata &metadata)
123 {
124 jsonObject = nlohmann::json {
125 {META_DATA_NAME, metadata.name},
126 {META_DATA_VALUE, metadata.value},
127 {META_DATA_RESOURCE, metadata.resource}
128 };
129 }
130
to_json(nlohmann::json & jsonObject,const AbilityInfo & abilityInfo)131 void to_json(nlohmann::json &jsonObject, const AbilityInfo &abilityInfo)
132 {
133 TAG_LOGD(AAFwkTag::ABILITY_SIM, "called");
134 jsonObject = nlohmann::json {
135 {JSON_KEY_NAME, abilityInfo.name},
136 {JSON_KEY_LABEL, abilityInfo.label},
137 {JSON_KEY_DESCRIPTION, abilityInfo.description},
138 {JSON_KEY_ICON_PATH, abilityInfo.iconPath},
139 {JSON_KEY_LABEL_ID, abilityInfo.labelId},
140 {JSON_KEY_DESCRIPTION_ID, abilityInfo.descriptionId},
141 {JSON_KEY_ICON_ID, abilityInfo.iconId},
142 {JSON_KEY_THEME, abilityInfo.theme},
143 {JSON_KEY_VISIBLE, abilityInfo.visible},
144 {JSON_KEY_KIND, abilityInfo.kind},
145 {JSON_KEY_TYPE, abilityInfo.type},
146 {JSON_KEY_EXTENSION_ABILITY_TYPE, abilityInfo.extensionAbilityType},
147 {JSON_KEY_ORIENTATION, abilityInfo.orientation},
148 {JSON_KEY_LAUNCH_MODE, abilityInfo.launchMode},
149 {JSON_KEY_SRC_PATH, abilityInfo.srcPath},
150 {JSON_KEY_SRC_LANGUAGE, abilityInfo.srcLanguage},
151 {JSON_KEY_PERMISSIONS, abilityInfo.permissions},
152 {JSON_KEY_PROCESS, abilityInfo.process},
153 {JSON_KEY_DEVICE_TYPES, abilityInfo.deviceTypes},
154 {JSON_KEY_DEVICE_CAPABILITIES, abilityInfo.deviceCapabilities},
155 {JSON_KEY_URI, abilityInfo.uri},
156 {JSON_KEY_TARGET_ABILITY, abilityInfo.targetAbility},
157 {JSON_KEY_IS_LAUNCHER_ABILITY, abilityInfo.isLauncherAbility},
158 {JSON_KEY_IS_NATIVE_ABILITY, abilityInfo.isNativeAbility},
159 {JSON_KEY_ENABLED, abilityInfo.enabled},
160 {JSON_KEY_SUPPORT_PIP_MODE, abilityInfo.supportPipMode},
161 {JSON_KEY_FORM_ENABLED, abilityInfo.formEnabled},
162 {JSON_KEY_READ_PERMISSION, abilityInfo.readPermission},
163 {JSON_KEY_WRITE_PERMISSION, abilityInfo.writePermission},
164 {JSON_KEY_CONFIG_CHANGES, abilityInfo.configChanges},
165 {JSON_KEY_FORM_ENTITY, abilityInfo.formEntity},
166 {JSON_KEY_MIN_FORM_HEIGHT, abilityInfo.minFormHeight},
167 {JSON_KEY_DEFAULT_FORM_HEIGHT, abilityInfo.defaultFormHeight},
168 {JSON_KEY_MIN_FORM_WIDTH, abilityInfo.minFormWidth},
169 {JSON_KEY_DEFAULT_FORM_WIDTH, abilityInfo.defaultFormWidth},
170 {JSON_KEY_META_DATA, abilityInfo.metaData},
171 {JSON_KEY_BACKGROUND_MODES, abilityInfo.backgroundModes},
172 {JSON_KEY_PACKAGE, abilityInfo.package},
173 {Constants::BUNDLE_NAME, abilityInfo.bundleName},
174 {Constants::MODULE_NAME, abilityInfo.moduleName},
175 {JSON_KEY_APPLICATION_NAME, abilityInfo.applicationName},
176 {JSON_KEY_CODE_PATH, abilityInfo.codePath},
177 {JSON_KEY_RESOURCE_PATH, abilityInfo.resourcePath},
178 {Constants::HAP_PATH, abilityInfo.hapPath},
179 {SRC_ENTRANCE, abilityInfo.srcEntrance},
180 {META_DATA, abilityInfo.metadata},
181 {IS_MODULE_JSON, abilityInfo.isModuleJson},
182 {IS_STAGE_BASED_MODEL, abilityInfo.isStageBasedModel},
183 {CONTINUABLE, abilityInfo.continuable},
184 {PRIORITY, abilityInfo.priority},
185 {JSON_KEY_START_WINDOW_ICON, abilityInfo.startWindowIcon},
186 {JSON_KEY_START_WINDOW_ICON_ID, abilityInfo.startWindowIconId},
187 {JSON_KEY_START_WINDOW_BACKGROUND, abilityInfo.startWindowBackground},
188 {JSON_KEY_START_WINDOW_BACKGROUND_ID, abilityInfo.startWindowBackgroundId},
189 {JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE, abilityInfo.removeMissionAfterTerminate},
190 {JSON_KEY_COMPILE_MODE, abilityInfo.compileMode},
191 {JOSN_KEY_SUPPORT_WINDOW_MODE, abilityInfo.windowModes},
192 {JOSN_KEY_MAX_WINDOW_WIDTH, abilityInfo.maxWindowWidth},
193 {JOSN_KEY_MIN_WINDOW_WIDTH, abilityInfo.minWindowWidth},
194 {JOSN_KEY_MAX_WINDOW_HEIGHT, abilityInfo.maxWindowHeight},
195 {JOSN_KEY_MIN_WINDOW_HEIGHT, abilityInfo.minWindowHeight},
196 {JOSN_KEY_UID, abilityInfo.uid},
197 {JOSN_KEY_EXCLUDE_FROM_MISSIONS, abilityInfo.excludeFromMissions},
198 {JOSN_KEY_UNCLEARABLE_MISSION, abilityInfo.unclearableMission},
199 {JSON_KEY_RECOVERABLE, abilityInfo.recoverable},
200 {JSON_KEY_SUPPORT_EXT_NAMES, abilityInfo.supportExtNames},
201 {JSON_KEY_SUPPORT_MIME_TYPES, abilityInfo.supportMimeTypes},
202 };
203 if (abilityInfo.maxWindowRatio == 0) {
204 // maxWindowRatio in json string will be 0 instead of 0.0
205 jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = 0;
206 } else {
207 jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = abilityInfo.maxWindowRatio;
208 }
209
210 if (abilityInfo.minWindowRatio == 0) {
211 jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = 0;
212 } else {
213 jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = abilityInfo.minWindowRatio;
214 }
215 }
216
from_json(const nlohmann::json & jsonObject,CustomizeData & customizeData)217 void from_json(const nlohmann::json &jsonObject, CustomizeData &customizeData)
218 {
219 const auto &jsonObjectEnd = jsonObject.end();
220 int32_t parseResult = ERR_OK;
221 GetValueIfFindKey<std::string>(jsonObject,
222 jsonObjectEnd,
223 JSON_KEY_NAME,
224 customizeData.name,
225 JsonType::STRING,
226 false,
227 parseResult,
228 ArrayType::NOT_ARRAY);
229 GetValueIfFindKey<std::string>(jsonObject,
230 jsonObjectEnd,
231 JSON_KEY_META_VALUE,
232 customizeData.value,
233 JsonType::STRING,
234 false,
235 parseResult,
236 ArrayType::NOT_ARRAY);
237 GetValueIfFindKey<std::string>(jsonObject,
238 jsonObjectEnd,
239 JSON_KEY_META_EXTRA,
240 customizeData.extra,
241 JsonType::STRING,
242 false,
243 parseResult,
244 ArrayType::NOT_ARRAY);
245 }
246
from_json(const nlohmann::json & jsonObject,MetaData & metaData)247 void from_json(const nlohmann::json &jsonObject, MetaData &metaData)
248 {
249 const auto &jsonObjectEnd = jsonObject.end();
250 int32_t parseResult = ERR_OK;
251 GetValueIfFindKey<std::vector<CustomizeData>>(jsonObject,
252 jsonObjectEnd,
253 JSON_KEY_CUSTOMIZE_DATA,
254 metaData.customizeData,
255 JsonType::ARRAY,
256 false,
257 parseResult,
258 ArrayType::OBJECT);
259 }
260
from_json(const nlohmann::json & jsonObject,Metadata & metadata)261 void from_json(const nlohmann::json &jsonObject, Metadata &metadata)
262 {
263 const auto &jsonObjectEnd = jsonObject.end();
264 int32_t parseResult = ERR_OK;
265 GetValueIfFindKey<std::string>(jsonObject,
266 jsonObjectEnd,
267 META_DATA_NAME,
268 metadata.name,
269 JsonType::STRING,
270 false,
271 parseResult,
272 ArrayType::NOT_ARRAY);
273 GetValueIfFindKey<std::string>(jsonObject,
274 jsonObjectEnd,
275 META_DATA_VALUE,
276 metadata.value,
277 JsonType::STRING,
278 false,
279 parseResult,
280 ArrayType::NOT_ARRAY);
281 GetValueIfFindKey<std::string>(jsonObject,
282 jsonObjectEnd,
283 META_DATA_RESOURCE,
284 metadata.resource,
285 JsonType::STRING,
286 false,
287 parseResult,
288 ArrayType::NOT_ARRAY);
289 if (parseResult != ERR_OK) {
290 TAG_LOGD(
291 AAFwkTag::ABILITY_SIM, "read Ability Metadata error:%{public}d", parseResult);
292 }
293 }
294
from_json(const nlohmann::json & jsonObject,AbilityInfo & abilityInfo)295 void from_json(const nlohmann::json &jsonObject, AbilityInfo &abilityInfo)
296 {
297 TAG_LOGD(AAFwkTag::ABILITY_SIM, "called");
298 const auto &jsonObjectEnd = jsonObject.end();
299 int32_t parseResult = ERR_OK;
300 GetValueIfFindKey<std::string>(jsonObject,
301 jsonObjectEnd,
302 JSON_KEY_NAME,
303 abilityInfo.name,
304 JsonType::STRING,
305 false,
306 parseResult,
307 ArrayType::NOT_ARRAY);
308 GetValueIfFindKey<std::string>(jsonObject,
309 jsonObjectEnd,
310 JSON_KEY_LABEL,
311 abilityInfo.label,
312 JsonType::STRING,
313 false,
314 parseResult,
315 ArrayType::NOT_ARRAY);
316 GetValueIfFindKey<std::string>(jsonObject,
317 jsonObjectEnd,
318 JSON_KEY_DESCRIPTION,
319 abilityInfo.description,
320 JsonType::STRING,
321 false,
322 parseResult,
323 ArrayType::NOT_ARRAY);
324 GetValueIfFindKey<std::string>(jsonObject,
325 jsonObjectEnd,
326 JSON_KEY_ICON_PATH,
327 abilityInfo.iconPath,
328 JsonType::STRING,
329 false,
330 parseResult,
331 ArrayType::NOT_ARRAY);
332 GetValueIfFindKey<int32_t>(jsonObject,
333 jsonObjectEnd,
334 JSON_KEY_LABEL_ID,
335 abilityInfo.labelId,
336 JsonType::NUMBER,
337 false,
338 parseResult,
339 ArrayType::NOT_ARRAY);
340 GetValueIfFindKey<int32_t>(jsonObject,
341 jsonObjectEnd,
342 JSON_KEY_DESCRIPTION_ID,
343 abilityInfo.descriptionId,
344 JsonType::NUMBER,
345 false,
346 parseResult,
347 ArrayType::NOT_ARRAY);
348 GetValueIfFindKey<int32_t>(jsonObject,
349 jsonObjectEnd,
350 JSON_KEY_ICON_ID,
351 abilityInfo.iconId,
352 JsonType::NUMBER,
353 false,
354 parseResult,
355 ArrayType::NOT_ARRAY);
356 GetValueIfFindKey<std::string>(jsonObject,
357 jsonObjectEnd,
358 JSON_KEY_THEME,
359 abilityInfo.theme,
360 JsonType::STRING,
361 false,
362 parseResult,
363 ArrayType::NOT_ARRAY);
364 GetValueIfFindKey<bool>(jsonObject,
365 jsonObjectEnd,
366 JSON_KEY_VISIBLE,
367 abilityInfo.visible,
368 JsonType::BOOLEAN,
369 false,
370 parseResult,
371 ArrayType::NOT_ARRAY);
372 GetValueIfFindKey<std::string>(jsonObject,
373 jsonObjectEnd,
374 JSON_KEY_KIND,
375 abilityInfo.kind,
376 JsonType::STRING,
377 false,
378 parseResult,
379 ArrayType::NOT_ARRAY);
380 GetValueIfFindKey<AbilityType>(jsonObject,
381 jsonObjectEnd,
382 JSON_KEY_TYPE,
383 abilityInfo.type,
384 JsonType::NUMBER,
385 false,
386 parseResult,
387 ArrayType::NOT_ARRAY);
388 GetValueIfFindKey<ExtensionAbilityType>(jsonObject,
389 jsonObjectEnd,
390 JSON_KEY_EXTENSION_ABILITY_TYPE,
391 abilityInfo.extensionAbilityType,
392 JsonType::NUMBER,
393 false,
394 parseResult,
395 ArrayType::NOT_ARRAY);
396 GetValueIfFindKey<DisplayOrientation>(jsonObject,
397 jsonObjectEnd,
398 JSON_KEY_ORIENTATION,
399 abilityInfo.orientation,
400 JsonType::NUMBER,
401 false,
402 parseResult,
403 ArrayType::NOT_ARRAY);
404 GetValueIfFindKey<LaunchMode>(jsonObject,
405 jsonObjectEnd,
406 JSON_KEY_LAUNCH_MODE,
407 abilityInfo.launchMode,
408 JsonType::NUMBER,
409 false,
410 parseResult,
411 ArrayType::NOT_ARRAY);
412 GetValueIfFindKey<std::string>(jsonObject,
413 jsonObjectEnd,
414 JSON_KEY_SRC_PATH,
415 abilityInfo.srcPath,
416 JsonType::STRING,
417 false,
418 parseResult,
419 ArrayType::NOT_ARRAY);
420 GetValueIfFindKey<std::string>(jsonObject,
421 jsonObjectEnd,
422 JSON_KEY_SRC_LANGUAGE,
423 abilityInfo.srcLanguage,
424 JsonType::STRING,
425 false,
426 parseResult,
427 ArrayType::NOT_ARRAY);
428 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
429 jsonObjectEnd,
430 JSON_KEY_PERMISSIONS,
431 abilityInfo.permissions,
432 JsonType::ARRAY,
433 false,
434 parseResult,
435 ArrayType::STRING);
436 GetValueIfFindKey<std::string>(jsonObject,
437 jsonObjectEnd,
438 JSON_KEY_PROCESS,
439 abilityInfo.process,
440 JsonType::STRING,
441 false,
442 parseResult,
443 ArrayType::NOT_ARRAY);
444 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
445 jsonObjectEnd,
446 JSON_KEY_DEVICE_TYPES,
447 abilityInfo.deviceTypes,
448 JsonType::ARRAY,
449 false,
450 parseResult,
451 ArrayType::STRING);
452 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
453 jsonObjectEnd,
454 JSON_KEY_DEVICE_CAPABILITIES,
455 abilityInfo.deviceCapabilities,
456 JsonType::ARRAY,
457 false,
458 parseResult,
459 ArrayType::STRING);
460 GetValueIfFindKey<std::string>(jsonObject,
461 jsonObjectEnd,
462 JSON_KEY_URI,
463 abilityInfo.uri,
464 JsonType::STRING,
465 false,
466 parseResult,
467 ArrayType::NOT_ARRAY);
468 GetValueIfFindKey<std::string>(jsonObject,
469 jsonObjectEnd,
470 JSON_KEY_TARGET_ABILITY,
471 abilityInfo.targetAbility,
472 JsonType::STRING,
473 false,
474 parseResult,
475 ArrayType::NOT_ARRAY);
476 GetValueIfFindKey<bool>(jsonObject,
477 jsonObjectEnd,
478 JSON_KEY_IS_LAUNCHER_ABILITY,
479 abilityInfo.isLauncherAbility,
480 JsonType::BOOLEAN,
481 false,
482 parseResult,
483 ArrayType::NOT_ARRAY);
484 GetValueIfFindKey<bool>(jsonObject,
485 jsonObjectEnd,
486 JSON_KEY_IS_NATIVE_ABILITY,
487 abilityInfo.isNativeAbility,
488 JsonType::BOOLEAN,
489 false,
490 parseResult,
491 ArrayType::NOT_ARRAY);
492 GetValueIfFindKey<bool>(jsonObject,
493 jsonObjectEnd,
494 JSON_KEY_ENABLED,
495 abilityInfo.enabled,
496 JsonType::BOOLEAN,
497 false,
498 parseResult,
499 ArrayType::NOT_ARRAY);
500 GetValueIfFindKey<bool>(jsonObject,
501 jsonObjectEnd,
502 JSON_KEY_SUPPORT_PIP_MODE,
503 abilityInfo.supportPipMode,
504 JsonType::BOOLEAN,
505 false,
506 parseResult,
507 ArrayType::NOT_ARRAY);
508 GetValueIfFindKey<bool>(jsonObject,
509 jsonObjectEnd,
510 JSON_KEY_FORM_ENABLED,
511 abilityInfo.formEnabled,
512 JsonType::BOOLEAN,
513 false,
514 parseResult,
515 ArrayType::NOT_ARRAY);
516 GetValueIfFindKey<std::string>(jsonObject,
517 jsonObjectEnd,
518 JSON_KEY_READ_PERMISSION,
519 abilityInfo.readPermission,
520 JsonType::STRING,
521 false,
522 parseResult,
523 ArrayType::NOT_ARRAY);
524 GetValueIfFindKey<std::string>(jsonObject,
525 jsonObjectEnd,
526 JSON_KEY_WRITE_PERMISSION,
527 abilityInfo.writePermission,
528 JsonType::STRING,
529 false,
530 parseResult,
531 ArrayType::NOT_ARRAY);
532 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
533 jsonObjectEnd,
534 JSON_KEY_CONFIG_CHANGES,
535 abilityInfo.configChanges,
536 JsonType::ARRAY,
537 false,
538 parseResult,
539 ArrayType::STRING);
540 GetValueIfFindKey<uint32_t>(jsonObject,
541 jsonObjectEnd,
542 JSON_KEY_FORM_ENTITY,
543 abilityInfo.formEntity,
544 JsonType::NUMBER,
545 false,
546 parseResult,
547 ArrayType::NOT_ARRAY);
548 GetValueIfFindKey<int32_t>(jsonObject,
549 jsonObjectEnd,
550 JSON_KEY_MIN_FORM_HEIGHT,
551 abilityInfo.minFormHeight,
552 JsonType::NUMBER,
553 false,
554 parseResult,
555 ArrayType::NOT_ARRAY);
556 GetValueIfFindKey<int32_t>(jsonObject,
557 jsonObjectEnd,
558 JSON_KEY_DEFAULT_FORM_HEIGHT,
559 abilityInfo.defaultFormHeight,
560 JsonType::NUMBER,
561 false,
562 parseResult,
563 ArrayType::NOT_ARRAY);
564 GetValueIfFindKey<int32_t>(jsonObject,
565 jsonObjectEnd,
566 JSON_KEY_MIN_FORM_WIDTH,
567 abilityInfo.minFormWidth,
568 JsonType::NUMBER,
569 false,
570 parseResult,
571 ArrayType::NOT_ARRAY);
572 GetValueIfFindKey<int32_t>(jsonObject,
573 jsonObjectEnd,
574 JSON_KEY_DEFAULT_FORM_WIDTH,
575 abilityInfo.defaultFormWidth,
576 JsonType::NUMBER,
577 false,
578 parseResult,
579 ArrayType::NOT_ARRAY);
580 GetValueIfFindKey<MetaData>(jsonObject,
581 jsonObjectEnd,
582 JSON_KEY_META_DATA,
583 abilityInfo.metaData,
584 JsonType::OBJECT,
585 false,
586 parseResult,
587 ArrayType::NOT_ARRAY);
588 GetValueIfFindKey<uint32_t>(jsonObject,
589 jsonObjectEnd,
590 JSON_KEY_BACKGROUND_MODES,
591 abilityInfo.backgroundModes,
592 JsonType::NUMBER,
593 false,
594 parseResult,
595 ArrayType::NOT_ARRAY);
596 GetValueIfFindKey<std::string>(jsonObject,
597 jsonObjectEnd,
598 JSON_KEY_PACKAGE,
599 abilityInfo.package,
600 JsonType::STRING,
601 false,
602 parseResult,
603 ArrayType::NOT_ARRAY);
604 GetValueIfFindKey<std::string>(jsonObject,
605 jsonObjectEnd,
606 Constants::BUNDLE_NAME,
607 abilityInfo.bundleName,
608 JsonType::STRING,
609 false,
610 parseResult,
611 ArrayType::NOT_ARRAY);
612 GetValueIfFindKey<std::string>(jsonObject,
613 jsonObjectEnd,
614 Constants::MODULE_NAME,
615 abilityInfo.moduleName,
616 JsonType::STRING,
617 false,
618 parseResult,
619 ArrayType::NOT_ARRAY);
620 GetValueIfFindKey<std::string>(jsonObject,
621 jsonObjectEnd,
622 JSON_KEY_APPLICATION_NAME,
623 abilityInfo.applicationName,
624 JsonType::STRING,
625 false,
626 parseResult,
627 ArrayType::NOT_ARRAY);
628 GetValueIfFindKey<std::string>(jsonObject,
629 jsonObjectEnd,
630 JSON_KEY_CODE_PATH,
631 abilityInfo.codePath,
632 JsonType::STRING,
633 false,
634 parseResult,
635 ArrayType::NOT_ARRAY);
636 GetValueIfFindKey<std::string>(jsonObject,
637 jsonObjectEnd,
638 JSON_KEY_RESOURCE_PATH,
639 abilityInfo.resourcePath,
640 JsonType::STRING,
641 false,
642 parseResult,
643 ArrayType::NOT_ARRAY);
644 GetValueIfFindKey<std::string>(jsonObject,
645 jsonObjectEnd,
646 Constants::HAP_PATH,
647 abilityInfo.hapPath,
648 JsonType::STRING,
649 false,
650 parseResult,
651 ArrayType::NOT_ARRAY);
652 GetValueIfFindKey<std::string>(jsonObject,
653 jsonObjectEnd,
654 SRC_ENTRANCE,
655 abilityInfo.srcEntrance,
656 JsonType::STRING,
657 false,
658 parseResult,
659 ArrayType::NOT_ARRAY);
660 GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
661 jsonObjectEnd,
662 META_DATA,
663 abilityInfo.metadata,
664 JsonType::ARRAY,
665 false,
666 parseResult,
667 ArrayType::OBJECT);
668 GetValueIfFindKey<bool>(jsonObject,
669 jsonObjectEnd,
670 IS_MODULE_JSON,
671 abilityInfo.isModuleJson,
672 JsonType::BOOLEAN,
673 false,
674 parseResult,
675 ArrayType::NOT_ARRAY);
676 GetValueIfFindKey<bool>(jsonObject,
677 jsonObjectEnd,
678 IS_STAGE_BASED_MODEL,
679 abilityInfo.isStageBasedModel,
680 JsonType::BOOLEAN,
681 false,
682 parseResult,
683 ArrayType::NOT_ARRAY);
684 GetValueIfFindKey<bool>(jsonObject,
685 jsonObjectEnd,
686 CONTINUABLE,
687 abilityInfo.continuable,
688 JsonType::BOOLEAN,
689 false,
690 parseResult,
691 ArrayType::NOT_ARRAY);
692 GetValueIfFindKey<int32_t>(jsonObject,
693 jsonObjectEnd,
694 PRIORITY,
695 abilityInfo.priority,
696 JsonType::NUMBER,
697 false,
698 parseResult,
699 ArrayType::NOT_ARRAY);
700 GetValueIfFindKey<std::string>(jsonObject,
701 jsonObjectEnd,
702 JSON_KEY_START_WINDOW_ICON,
703 abilityInfo.startWindowIcon,
704 JsonType::STRING,
705 false,
706 parseResult,
707 ArrayType::NOT_ARRAY);
708 GetValueIfFindKey<int32_t>(jsonObject,
709 jsonObjectEnd,
710 JSON_KEY_START_WINDOW_ICON_ID,
711 abilityInfo.startWindowIconId,
712 JsonType::NUMBER,
713 false,
714 parseResult,
715 ArrayType::NOT_ARRAY);
716 GetValueIfFindKey<std::string>(jsonObject,
717 jsonObjectEnd,
718 JSON_KEY_START_WINDOW_BACKGROUND,
719 abilityInfo.startWindowBackground,
720 JsonType::STRING,
721 false,
722 parseResult,
723 ArrayType::NOT_ARRAY);
724 GetValueIfFindKey<int32_t>(jsonObject,
725 jsonObjectEnd,
726 JSON_KEY_START_WINDOW_BACKGROUND_ID,
727 abilityInfo.startWindowBackgroundId,
728 JsonType::NUMBER,
729 false,
730 parseResult,
731 ArrayType::NOT_ARRAY);
732 GetValueIfFindKey<bool>(jsonObject,
733 jsonObjectEnd,
734 JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE,
735 abilityInfo.removeMissionAfterTerminate,
736 JsonType::BOOLEAN,
737 false,
738 parseResult,
739 ArrayType::NOT_ARRAY);
740 GetValueIfFindKey<CompileMode>(jsonObject,
741 jsonObjectEnd,
742 JSON_KEY_COMPILE_MODE,
743 abilityInfo.compileMode,
744 JsonType::NUMBER,
745 false,
746 parseResult,
747 ArrayType::NOT_ARRAY);
748 GetValueIfFindKey<std::vector<SupportWindowMode>>(jsonObject,
749 jsonObjectEnd,
750 JOSN_KEY_SUPPORT_WINDOW_MODE,
751 abilityInfo.windowModes,
752 JsonType::ARRAY,
753 false,
754 parseResult,
755 ArrayType::NUMBER);
756 GetValueIfFindKey<double>(jsonObject,
757 jsonObjectEnd,
758 JOSN_KEY_MAX_WINDOW_RATIO,
759 abilityInfo.maxWindowRatio,
760 JsonType::NUMBER,
761 false,
762 parseResult,
763 ArrayType::NOT_ARRAY);
764 GetValueIfFindKey<double>(jsonObject,
765 jsonObjectEnd,
766 JOSN_KEY_MIN_WINDOW_RATIO,
767 abilityInfo.minWindowRatio,
768 JsonType::NUMBER,
769 false,
770 parseResult,
771 ArrayType::NOT_ARRAY);
772 GetValueIfFindKey<uint32_t>(jsonObject,
773 jsonObjectEnd,
774 JOSN_KEY_MAX_WINDOW_WIDTH,
775 abilityInfo.maxWindowWidth,
776 JsonType::NUMBER,
777 false,
778 parseResult,
779 ArrayType::NOT_ARRAY);
780 GetValueIfFindKey<uint32_t>(jsonObject,
781 jsonObjectEnd,
782 JOSN_KEY_MIN_WINDOW_WIDTH,
783 abilityInfo.minWindowWidth,
784 JsonType::NUMBER,
785 false,
786 parseResult,
787 ArrayType::NOT_ARRAY);
788 GetValueIfFindKey<uint32_t>(jsonObject,
789 jsonObjectEnd,
790 JOSN_KEY_MAX_WINDOW_HEIGHT,
791 abilityInfo.maxWindowHeight,
792 JsonType::NUMBER,
793 false,
794 parseResult,
795 ArrayType::NOT_ARRAY);
796 GetValueIfFindKey<uint32_t>(jsonObject,
797 jsonObjectEnd,
798 JOSN_KEY_MIN_WINDOW_HEIGHT,
799 abilityInfo.minWindowHeight,
800 JsonType::NUMBER,
801 false,
802 parseResult,
803 ArrayType::NOT_ARRAY);
804 GetValueIfFindKey<int32_t>(jsonObject,
805 jsonObjectEnd,
806 JOSN_KEY_UID,
807 abilityInfo.uid,
808 JsonType::NUMBER,
809 false,
810 parseResult,
811 ArrayType::NOT_ARRAY);
812 GetValueIfFindKey<bool>(jsonObject,
813 jsonObjectEnd,
814 JOSN_KEY_EXCLUDE_FROM_MISSIONS,
815 abilityInfo.excludeFromMissions,
816 JsonType::BOOLEAN,
817 false,
818 parseResult,
819 ArrayType::NOT_ARRAY);
820 GetValueIfFindKey<bool>(jsonObject,
821 jsonObjectEnd,
822 JOSN_KEY_UNCLEARABLE_MISSION,
823 abilityInfo.unclearableMission,
824 JsonType::BOOLEAN,
825 false,
826 parseResult,
827 ArrayType::NOT_ARRAY);
828 GetValueIfFindKey<bool>(jsonObject,
829 jsonObjectEnd,
830 JSON_KEY_RECOVERABLE,
831 abilityInfo.recoverable,
832 JsonType::BOOLEAN,
833 false,
834 parseResult,
835 ArrayType::NOT_ARRAY);
836 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
837 jsonObjectEnd,
838 JSON_KEY_SUPPORT_EXT_NAMES,
839 abilityInfo.supportExtNames,
840 JsonType::ARRAY,
841 false,
842 parseResult,
843 ArrayType::STRING);
844 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
845 jsonObjectEnd,
846 JSON_KEY_SUPPORT_MIME_TYPES,
847 abilityInfo.supportMimeTypes,
848 JsonType::ARRAY,
849 false,
850 parseResult,
851 ArrayType::STRING);
852 if (parseResult != ERR_OK) {
853 TAG_LOGE(AAFwkTag::ABILITY_SIM, "AbilityInfo from_json error:%{public}d", parseResult);
854 }
855 }
856 } // namespace AppExecFwk
857 } // namespace OHOS
858