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