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