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