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