1 /*
2 * Copyright (c) 2021-2023 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 "form_info.h"
17
18 #include <errno.h>
19 #include <fcntl.h>
20 #include <string.h>
21 #include <unistd.h>
22
23 #include "app_log_wrapper.h"
24 #include "bundle_constants.h"
25 #include "json_serializer.h"
26 #include "json_util.h"
27 #include "nlohmann/json.hpp"
28 #include "parcel_macro.h"
29 #include "string_ex.h"
30
31 namespace OHOS {
32 namespace AppExecFwk {
33 namespace {
34 const char* JSON_KEY_COLOR_MODE = "colorMode";
35 const char* JSON_KEY_RENDERING_MODE = "renderingMode";
36 const char* JSON_KEY_PACKAGE = "package";
37 const char* JSON_KEY_SUPPORT_DIMENSIONS = "supportDimensions";
38 const char* JSON_KEY_DEFAULT_DIMENSION = "defaultDimension";
39 const char* JSON_KEY_UPDATE_ENABLED = "updateEnabled";
40 const char* JSON_KEY_SCHEDULED_UPDATE_TIME = "scheduledUpdateTime";
41 const char* JSON_KEY_MULTI_SCHEDULED_UPDATE_TIME = "multiScheduledUpdateTime";
42 const char* JSON_KEY_CONDITION_UPDATE = "conditionUpdate";
43 const char* JSON_KEY_UPDATE_DURATION = "updateDuration";
44 const char* JSON_KEY_DEEP_LINK = "deepLink";
45 const char* JSON_KEY_JS_COMPONENT_NAME = "jsComponentName";
46 const char* JSON_KEY_VALUE = "value";
47 const char* JSON_KEY_NAME = "name";
48 const char* JSON_KEY_ORIGINAL_BUNDLE_NAME = "originalBundleName";
49 const char* JSON_KEY_CUSTOMIZE_DATA = "customizeData";
50 const char* JSON_KEY_DISPLAY_NAME = "displayName";
51 const char* JSON_KEY_DISPLAY_NAME_ID = "displayNameId";
52 const char* JSON_KEY_DESCRIPTION = "description";
53 const char* JSON_KEY_DESCRIPTION_ID = "descriptionId";
54 const char* JSON_KEY_TYPE = "type";
55 const char* JSON_KEY_UI_SYNTAX = "uiSyntax";
56 const char* JSON_KEY_LANDSCAPE_LAYOUTS = "landscapeLayouts";
57 const char* JSON_KEY_FORMCONFIG_ABILITY = "formConfigAbility";
58 const char* JSON_KEY_FORM_VISIBLE_NOTIFY = "formVisibleNotify";
59 const char* JSON_KEY_RELATED_BUNDLE_NAME = "relatedBundleName";
60 const char* JSON_KEY_DEFAULT_FLAG = "defaultFlag";
61 const char* JSON_KEY_PORTRAIT_LAYOUTS = "portraitLayouts";
62 const char* JSON_KEY_SRC = "src";
63 const char* JSON_KEY_WINDOW = "window";
64 const char* JSON_KEY_DESIGN_WIDTH = "designWidth";
65 const char* JSON_KEY_AUTO_DESIGN_WIDTH = "autoDesignWidth";
66 const char* JSON_KEY_IS_STATIC = "isStatic";
67 const char* JSON_KEY_DATA_PROXY_ENABLED = "dataProxyEnabled";
68 const char* JSON_KEY_IS_DYNAMIC = "isDynamic";
69 const char* JSON_KEY_TRANSPARENCY_ENABLED = "transparencyEnabled";
70 const char* JSON_KEY_PRIVACY_LEVEL = "privacyLevel";
71 const char* JSON_KEY_FONT_SCALE_FOLLOW_SYSTEM = "fontScaleFollowSystem";
72 const char* JSON_KEY_SUPPORT_SHAPES = "supportShapes";
73 const char* JSON_KEY_VERSION_CODE = "versionCode";
74 const char* JSON_KEY_BUNDLE_TYPE = "bundleType";
75 const char* JSON_KEY_PREVIEW_IMAGES = "previewImages";
76 const char* JSON_KEY_ENABLE_BLUR_BACKGROUND = "enableBlurBackground";
77 } // namespace
78
FormInfo(const ExtensionAbilityInfo & abilityInfo,const ExtensionFormInfo & formInfo)79 FormInfo::FormInfo(const ExtensionAbilityInfo &abilityInfo, const ExtensionFormInfo &formInfo)
80 {
81 SetInfoByAbility(abilityInfo);
82 name = formInfo.name;
83 displayName = formInfo.displayName;
84 description = formInfo.description;
85 jsComponentName = "";
86 deepLink = "";
87 formConfigAbility = formInfo.formConfigAbility;
88 scheduledUpdateTime = formInfo.scheduledUpdateTime;
89 multiScheduledUpdateTime = formInfo.multiScheduledUpdateTime;
90 src = formInfo.src;
91 window.designWidth = formInfo.window.designWidth;
92 window.autoDesignWidth = formInfo.window.autoDesignWidth;
93 std::size_t pos = formInfo.displayName.find(':');
94 if (pos != std::string::npos) {
95 displayNameId = static_cast<uint32_t>(
96 atoi(formInfo.displayName.substr(pos + 1, formInfo.displayName.length() - pos - 1).c_str()));
97 }
98 pos = formInfo.description.find(':');
99 if (pos != std::string::npos) {
100 descriptionId = static_cast<uint32_t>(
101 atoi(formInfo.description.substr(pos + 1, formInfo.description.length() - pos - 1).c_str()));
102 }
103 updateDuration = formInfo.updateDuration;
104 defaultDimension = formInfo.defaultDimension;
105 defaultFlag = formInfo.isDefault;
106 formVisibleNotify = formInfo.formVisibleNotify;
107 updateEnabled = formInfo.updateEnabled;
108 type = formInfo.type;
109 uiSyntax = formInfo.uiSyntax;
110 colorMode = formInfo.colorMode;
111 renderingMode = formInfo.renderingMode;
112 for (const auto &dimension : formInfo.supportDimensions) {
113 supportDimensions.push_back(dimension);
114 }
115 for (const auto &metadata : formInfo.metadata) {
116 customizeDatas.push_back(metadata);
117 }
118 SetInfoByFormExt(formInfo);
119 }
120
SetInfoByAbility(const ExtensionAbilityInfo & abilityInfo)121 void FormInfo::SetInfoByAbility(const ExtensionAbilityInfo &abilityInfo)
122 {
123 package = abilityInfo.bundleName + abilityInfo.moduleName;
124 bundleName = abilityInfo.bundleName;
125 originalBundleName = abilityInfo.bundleName;
126 relatedBundleName = abilityInfo.bundleName;
127 moduleName = abilityInfo.moduleName;
128 abilityName = abilityInfo.name;
129 }
130
SetInfoByFormExt(const ExtensionFormInfo & formInfo)131 void FormInfo::SetInfoByFormExt(const ExtensionFormInfo &formInfo)
132 {
133 for (const auto &previewImage : formInfo.previewImages) {
134 formPreviewImages.push_back(previewImage);
135 }
136 for (const auto &conditionUpdateType : formInfo.conditionUpdate) {
137 conditionUpdate.push_back(conditionUpdateType);
138 }
139 dataProxyEnabled = formInfo.dataProxyEnabled;
140 isDynamic = formInfo.isDynamic;
141 transparencyEnabled = formInfo.transparencyEnabled;
142 fontScaleFollowSystem = formInfo.fontScaleFollowSystem;
143 for (const auto &shape : formInfo.supportShapes) {
144 supportShapes.push_back(shape);
145 }
146 enableBlurBackground = formInfo.enableBlurBackground;
147 }
148
ReadCustomizeData(Parcel & parcel)149 bool FormInfo::ReadCustomizeData(Parcel &parcel)
150 {
151 int32_t customizeDataSize = 0;
152 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, customizeDataSize);
153 CONTAINER_SECURITY_VERIFY(parcel, customizeDataSize, &customizeDatas);
154 for (auto i = 0; i < customizeDataSize; ++i) {
155 FormCustomizeData customizeData;
156 std::string customizeName = Str16ToStr8(parcel.ReadString16());
157 std::string customizeValue = Str16ToStr8(parcel.ReadString16());
158 customizeData.name = customizeName;
159 customizeData.value = customizeValue;
160 customizeDatas.emplace_back(customizeData);
161 }
162 return true;
163 }
164
ReadFromParcel(Parcel & parcel)165 bool FormInfo::ReadFromParcel(Parcel &parcel)
166 {
167 name = Str16ToStr8(parcel.ReadString16());
168 package = Str16ToStr8(parcel.ReadString16());
169 bundleName = Str16ToStr8(parcel.ReadString16());
170 moduleName = Str16ToStr8(parcel.ReadString16());
171 abilityName = Str16ToStr8(parcel.ReadString16());
172 displayName = Str16ToStr8(parcel.ReadString16());
173 description = Str16ToStr8(parcel.ReadString16());
174 formConfigAbility = Str16ToStr8(parcel.ReadString16());
175 scheduledUpdateTime = Str16ToStr8(parcel.ReadString16());
176 multiScheduledUpdateTime = Str16ToStr8(parcel.ReadString16());
177 jsComponentName = Str16ToStr8(parcel.ReadString16());
178 relatedBundleName = Str16ToStr8(parcel.ReadString16());
179 originalBundleName = Str16ToStr8(parcel.ReadString16());
180 deepLink = Str16ToStr8(parcel.ReadString16());
181 src = Str16ToStr8(parcel.ReadString16());
182 updateEnabled = parcel.ReadBool();
183 defaultFlag = parcel.ReadBool();
184 formVisibleNotify = parcel.ReadBool();
185 isStatic = parcel.ReadBool();
186 defaultDimension = parcel.ReadInt32();
187 displayNameId = parcel.ReadUint32();
188 descriptionId = parcel.ReadUint32();
189 updateDuration = parcel.ReadInt32();
190
191 int32_t typeData;
192 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, typeData);
193 type = static_cast<FormType>(typeData);
194
195 int32_t uiSyntaxData;
196 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, uiSyntaxData);
197 uiSyntax = static_cast<FormType>(uiSyntaxData);
198
199 int32_t colorModeData;
200 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, colorModeData);
201 colorMode = static_cast<FormsColorMode>(colorModeData);
202
203 int32_t renderingModeData;
204 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, renderingModeData);
205 renderingMode = static_cast<FormsRenderingMode>(renderingModeData);
206
207 int32_t supportDimensionSize;
208 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportDimensionSize);
209 CONTAINER_SECURITY_VERIFY(parcel, supportDimensionSize, &supportDimensions);
210 for (int32_t i = 0; i < supportDimensionSize; i++) {
211 supportDimensions.emplace_back(parcel.ReadInt32());
212 }
213
214 int32_t landscapeLayoutsSize;
215 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, landscapeLayoutsSize);
216 CONTAINER_SECURITY_VERIFY(parcel, landscapeLayoutsSize, &landscapeLayouts);
217 for (auto i = 0; i < landscapeLayoutsSize; i++) {
218 landscapeLayouts.emplace_back(Str16ToStr8(parcel.ReadString16()));
219 }
220
221 int32_t portraitLayoutsSize;
222 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, portraitLayoutsSize);
223 CONTAINER_SECURITY_VERIFY(parcel, portraitLayoutsSize, &portraitLayouts);
224 for (auto i = 0; i < portraitLayoutsSize; i++) {
225 portraitLayouts.emplace_back(Str16ToStr8(parcel.ReadString16()));
226 }
227
228 if (!ReadCustomizeData(parcel)) {
229 return false;
230 }
231
232 window.designWidth = parcel.ReadInt32();
233 window.autoDesignWidth = parcel.ReadBool();
234 dataProxyEnabled = parcel.ReadBool();
235 isDynamic = parcel.ReadBool();
236 transparencyEnabled = parcel.ReadBool();
237 privacyLevel = parcel.ReadInt32();
238 fontScaleFollowSystem = parcel.ReadBool();
239
240 int32_t supportShapeSize;
241 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportShapeSize);
242 CONTAINER_SECURITY_VERIFY(parcel, supportShapeSize, &supportShapes);
243 for (int32_t i = 0; i < supportShapeSize; i++) {
244 supportShapes.emplace_back(parcel.ReadInt32());
245 }
246 int32_t conditionUpdateSize;
247 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, conditionUpdateSize);
248 CONTAINER_SECURITY_VERIFY(parcel, conditionUpdateSize, &conditionUpdate);
249 for (int32_t i = 0; i < conditionUpdateSize; i++) {
250 conditionUpdate.emplace_back(parcel.ReadInt32());
251 }
252 versionCode = parcel.ReadUint32();
253 int32_t bundleTypeData;
254 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, bundleTypeData);
255 bundleType = static_cast<BundleType>(bundleTypeData);
256
257 int32_t formPreviewImagesSize;
258 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, formPreviewImagesSize);
259 CONTAINER_SECURITY_VERIFY(parcel, formPreviewImagesSize, &formPreviewImages);
260 for (int32_t i = 0; i < formPreviewImagesSize; i++) {
261 formPreviewImages.emplace_back(parcel.ReadUint32());
262 }
263 enableBlurBackground = parcel.ReadBool();
264 return true;
265 }
266
Unmarshalling(Parcel & parcel)267 FormInfo *FormInfo::Unmarshalling(Parcel &parcel)
268 {
269 std::unique_ptr<FormInfo> info = std::make_unique<FormInfo>();
270 if (!info->ReadFromParcel(parcel)) {
271 APP_LOGW("read from parcel failed");
272 info = nullptr;
273 }
274 return info.release();
275 }
276
Marshalling(Parcel & parcel) const277 bool FormInfo::Marshalling(Parcel &parcel) const
278 {
279 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
280 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(package));
281 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
282 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
283 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(abilityName));
284 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(displayName));
285 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
286 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(formConfigAbility));
287 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(scheduledUpdateTime));
288 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(multiScheduledUpdateTime));
289 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(jsComponentName));
290 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(relatedBundleName));
291 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(originalBundleName));
292 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deepLink));
293 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(src));
294 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, updateEnabled);
295 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, defaultFlag);
296 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, formVisibleNotify);
297 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isStatic);
298 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, defaultDimension);
299 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, displayNameId);
300 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, descriptionId);
301 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, updateDuration);
302 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(type));
303 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(uiSyntax));
304 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(colorMode));
305 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(renderingMode));
306
307 const auto supportDimensionSize = static_cast<int32_t>(supportDimensions.size());
308 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportDimensionSize);
309 for (auto i = 0; i < supportDimensionSize; i++) {
310 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportDimensions[i]);
311 }
312
313 const auto landscapeLayoutsSize = static_cast<int32_t>(landscapeLayouts.size());
314 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, landscapeLayoutsSize);
315 for (auto i = 0; i < landscapeLayoutsSize; i++) {
316 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(landscapeLayouts[i]));
317 }
318
319 const auto portraitLayoutsSize = static_cast<int32_t>(portraitLayouts.size());
320 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, portraitLayoutsSize);
321 for (auto i = 0; i < portraitLayoutsSize; i++) {
322 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(portraitLayouts[i]));
323 }
324
325 const auto customizeDataSize = static_cast<int32_t>(customizeDatas.size());
326 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, customizeDataSize);
327 for (auto i = 0; i < customizeDataSize; i++) {
328 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(customizeDatas[i].name));
329 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(customizeDatas[i].value));
330 }
331
332 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, window.designWidth);
333 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, window.autoDesignWidth);
334 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, dataProxyEnabled);
335 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isDynamic);
336 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, transparencyEnabled);
337 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, privacyLevel);
338 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, fontScaleFollowSystem);
339
340 const auto supportShapeSize = static_cast<int32_t>(supportShapes.size());
341 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportShapeSize);
342 for (auto i = 0; i < supportShapeSize; i++) {
343 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportShapes[i]);
344 }
345 const auto conditionUpdateSize = static_cast<int32_t>(conditionUpdate.size());
346 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, conditionUpdateSize);
347 for (auto i = 0; i < conditionUpdateSize; i++) {
348 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, conditionUpdate[i]);
349 }
350 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, versionCode);
351 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(bundleType));
352
353 const auto formPreviewImagesSize = static_cast<int32_t>(formPreviewImages.size());
354 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, formPreviewImagesSize);
355 for (auto i = 0; i < formPreviewImagesSize; i++) {
356 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, formPreviewImages[i]);
357 }
358 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, enableBlurBackground);
359 return true;
360 }
361
IsValid() const362 bool FormInfo::IsValid() const
363 {
364 if (!window.autoDesignWidth && window.designWidth <= 0) {
365 APP_LOGW("Invalid FormInfo, window.designWidth <= 0");
366 return false;
367 }
368 return true;
369 }
370
to_json(nlohmann::json & jsonObject,const FormCustomizeData & customizeDatas)371 void to_json(nlohmann::json &jsonObject, const FormCustomizeData &customizeDatas)
372 {
373 jsonObject = nlohmann::json{
374 {JSON_KEY_NAME, customizeDatas.name},
375 {JSON_KEY_VALUE, customizeDatas.value}
376 };
377 }
378
to_json(nlohmann::json & jsonObject,const FormWindow & formWindow)379 void to_json(nlohmann::json &jsonObject, const FormWindow &formWindow)
380 {
381 jsonObject[JSON_KEY_DESIGN_WIDTH] = formWindow.designWidth;
382 jsonObject[JSON_KEY_AUTO_DESIGN_WIDTH] = formWindow.autoDesignWidth;
383 }
384
to_json(nlohmann::json & jsonObject,const FormInfo & formInfo)385 void to_json(nlohmann::json &jsonObject, const FormInfo &formInfo)
386 {
387 jsonObject = nlohmann::json{
388 {JSON_KEY_NAME, formInfo.name},
389 {JSON_KEY_PACKAGE, formInfo.package},
390 {Constants::BUNDLE_NAME, formInfo.bundleName},
391 {Constants::MODULE_NAME, formInfo.moduleName},
392 {Constants::ABILITY_NAME, formInfo.abilityName},
393 {JSON_KEY_DISPLAY_NAME, formInfo.displayName},
394 {JSON_KEY_DESCRIPTION, formInfo.description},
395 {JSON_KEY_RELATED_BUNDLE_NAME, formInfo.relatedBundleName},
396 {JSON_KEY_JS_COMPONENT_NAME, formInfo.jsComponentName},
397 {JSON_KEY_DEEP_LINK, formInfo.deepLink},
398 {JSON_KEY_SRC, formInfo.src},
399 {JSON_KEY_FORMCONFIG_ABILITY, formInfo.formConfigAbility},
400 {JSON_KEY_SCHEDULED_UPDATE_TIME, formInfo.scheduledUpdateTime},
401 {JSON_KEY_MULTI_SCHEDULED_UPDATE_TIME, formInfo.multiScheduledUpdateTime},
402 {JSON_KEY_CONDITION_UPDATE, formInfo.conditionUpdate},
403 {JSON_KEY_ORIGINAL_BUNDLE_NAME, formInfo.originalBundleName},
404 {JSON_KEY_DISPLAY_NAME_ID, formInfo.displayNameId},
405 {JSON_KEY_DESCRIPTION_ID, formInfo.descriptionId},
406 {JSON_KEY_UPDATE_DURATION, formInfo.updateDuration},
407 {JSON_KEY_DEFAULT_DIMENSION, formInfo.defaultDimension},
408 {JSON_KEY_DEFAULT_FLAG, formInfo.defaultFlag},
409 {JSON_KEY_FORM_VISIBLE_NOTIFY, formInfo.formVisibleNotify},
410 {JSON_KEY_UPDATE_ENABLED, formInfo.updateEnabled},
411 {JSON_KEY_IS_STATIC, formInfo.isStatic},
412 {JSON_KEY_TYPE, formInfo.type},
413 {JSON_KEY_UI_SYNTAX, formInfo.uiSyntax},
414 {JSON_KEY_COLOR_MODE, formInfo.colorMode},
415 {JSON_KEY_RENDERING_MODE, formInfo.renderingMode},
416 {JSON_KEY_SUPPORT_DIMENSIONS, formInfo.supportDimensions},
417 {JSON_KEY_CUSTOMIZE_DATA, formInfo.customizeDatas},
418 {JSON_KEY_LANDSCAPE_LAYOUTS, formInfo.landscapeLayouts},
419 {JSON_KEY_PORTRAIT_LAYOUTS, formInfo.portraitLayouts},
420 {JSON_KEY_WINDOW, formInfo.window},
421 {JSON_KEY_DATA_PROXY_ENABLED, formInfo.dataProxyEnabled},
422 {JSON_KEY_IS_DYNAMIC, formInfo.isDynamic},
423 {JSON_KEY_TRANSPARENCY_ENABLED, formInfo.transparencyEnabled},
424 {JSON_KEY_PRIVACY_LEVEL, formInfo.privacyLevel},
425 {JSON_KEY_FONT_SCALE_FOLLOW_SYSTEM, formInfo.fontScaleFollowSystem},
426 {JSON_KEY_SUPPORT_SHAPES, formInfo.supportShapes},
427 {JSON_KEY_VERSION_CODE, formInfo.versionCode},
428 {JSON_KEY_BUNDLE_TYPE, formInfo.bundleType},
429 {JSON_KEY_PREVIEW_IMAGES, formInfo.formPreviewImages},
430 {JSON_KEY_ENABLE_BLUR_BACKGROUND, formInfo.enableBlurBackground}
431 };
432 }
433
from_json(const nlohmann::json & jsonObject,FormCustomizeData & customizeDatas)434 void from_json(const nlohmann::json &jsonObject, FormCustomizeData &customizeDatas)
435 {
436 const auto &jsonObjectEnd = jsonObject.end();
437 int32_t parseResult = ERR_OK;
438 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
439 jsonObjectEnd,
440 JSON_KEY_NAME,
441 customizeDatas.name,
442 false,
443 parseResult);
444 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
445 jsonObjectEnd,
446 JSON_KEY_VALUE,
447 customizeDatas.value,
448 false,
449 parseResult);
450 if (parseResult != ERR_OK) {
451 APP_LOGE("read customizeDatas jsonObject error : %{public}d", parseResult);
452 }
453 }
454
from_json(const nlohmann::json & jsonObject,FormWindow & formWindow)455 void from_json(const nlohmann::json &jsonObject, FormWindow &formWindow)
456 {
457 const auto &jsonObjectEnd = jsonObject.end();
458 int32_t parseResult = ERR_OK;
459 GetValueIfFindKey<int32_t>(jsonObject,
460 jsonObjectEnd,
461 JSON_KEY_DESIGN_WIDTH,
462 formWindow.designWidth,
463 JsonType::NUMBER,
464 false,
465 parseResult,
466 ArrayType::NOT_ARRAY);
467 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
468 jsonObjectEnd,
469 JSON_KEY_AUTO_DESIGN_WIDTH,
470 formWindow.autoDesignWidth,
471 false,
472 parseResult);
473 if (parseResult != ERR_OK) {
474 APP_LOGE("read formWindow jsonObject error : %{public}d", parseResult);
475 }
476 }
477
from_json(const nlohmann::json & jsonObject,FormInfo & formInfo)478 void from_json(const nlohmann::json &jsonObject, FormInfo &formInfo)
479 {
480 int32_t parseResult = ERR_OK;
481 const auto &jsonObjectEnd = jsonObject.end();
482 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
483 jsonObjectEnd,
484 Constants::BUNDLE_NAME,
485 formInfo.bundleName,
486 false,
487 parseResult);
488 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
489 jsonObjectEnd,
490 JSON_KEY_PACKAGE,
491 formInfo.package,
492 false,
493 parseResult);
494 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
495 jsonObjectEnd,
496 Constants::MODULE_NAME,
497 formInfo.moduleName,
498 false,
499 parseResult);
500 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
501 jsonObjectEnd,
502 Constants::ABILITY_NAME,
503 formInfo.abilityName,
504 false,
505 parseResult);
506 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
507 jsonObjectEnd,
508 JSON_KEY_NAME,
509 formInfo.name,
510 false,
511 parseResult);
512 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
513 jsonObjectEnd,
514 JSON_KEY_DISPLAY_NAME,
515 formInfo.displayName,
516 false,
517 parseResult);
518 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
519 jsonObjectEnd,
520 JSON_KEY_DESCRIPTION,
521 formInfo.description,
522 false,
523 parseResult);
524 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
525 jsonObjectEnd,
526 JSON_KEY_RELATED_BUNDLE_NAME,
527 formInfo.relatedBundleName,
528 false,
529 parseResult);
530 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
531 jsonObjectEnd,
532 JSON_KEY_JS_COMPONENT_NAME,
533 formInfo.jsComponentName,
534 false,
535 parseResult);
536 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
537 jsonObjectEnd,
538 JSON_KEY_DEEP_LINK,
539 formInfo.deepLink,
540 false,
541 parseResult);
542 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
543 jsonObjectEnd,
544 JSON_KEY_FORMCONFIG_ABILITY,
545 formInfo.formConfigAbility,
546 false,
547 parseResult);
548 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
549 jsonObjectEnd,
550 JSON_KEY_SCHEDULED_UPDATE_TIME,
551 formInfo.scheduledUpdateTime,
552 false,
553 parseResult);
554 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
555 jsonObjectEnd,
556 JSON_KEY_MULTI_SCHEDULED_UPDATE_TIME,
557 formInfo.multiScheduledUpdateTime,
558 false,
559 parseResult);
560 GetValueIfFindKey<std::vector<int32_t>>(jsonObject,
561 jsonObjectEnd,
562 JSON_KEY_CONDITION_UPDATE,
563 formInfo.conditionUpdate,
564 JsonType::ARRAY,
565 false,
566 parseResult,
567 ArrayType::NUMBER);
568 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
569 jsonObjectEnd,
570 JSON_KEY_SRC,
571 formInfo.src,
572 false,
573 parseResult);
574 BMSJsonUtil::GetStrValueIfFindKey(jsonObject,
575 jsonObjectEnd,
576 JSON_KEY_ORIGINAL_BUNDLE_NAME,
577 formInfo.originalBundleName,
578 false,
579 parseResult);
580 GetValueIfFindKey<uint32_t>(jsonObject,
581 jsonObjectEnd,
582 JSON_KEY_DISPLAY_NAME_ID,
583 formInfo.displayNameId,
584 JsonType::NUMBER,
585 false,
586 parseResult,
587 ArrayType::NOT_ARRAY);
588 GetValueIfFindKey<uint32_t>(jsonObject,
589 jsonObjectEnd,
590 JSON_KEY_DESCRIPTION_ID,
591 formInfo.descriptionId,
592 JsonType::NUMBER,
593 false,
594 parseResult,
595 ArrayType::NOT_ARRAY);
596 GetValueIfFindKey<int32_t>(jsonObject,
597 jsonObjectEnd,
598 JSON_KEY_UPDATE_DURATION,
599 formInfo.updateDuration,
600 JsonType::NUMBER,
601 false,
602 parseResult,
603 ArrayType::NOT_ARRAY);
604 GetValueIfFindKey<int32_t>(jsonObject,
605 jsonObjectEnd,
606 JSON_KEY_DEFAULT_DIMENSION,
607 formInfo.defaultDimension,
608 JsonType::NUMBER,
609 false,
610 parseResult,
611 ArrayType::NOT_ARRAY);
612 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
613 jsonObjectEnd,
614 JSON_KEY_DEFAULT_FLAG,
615 formInfo.defaultFlag,
616 false,
617 parseResult);
618 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
619 jsonObjectEnd,
620 JSON_KEY_FORM_VISIBLE_NOTIFY,
621 formInfo.formVisibleNotify,
622 false,
623 parseResult);
624 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
625 jsonObjectEnd,
626 JSON_KEY_UPDATE_ENABLED,
627 formInfo.updateEnabled,
628 false,
629 parseResult);
630 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
631 jsonObjectEnd,
632 JSON_KEY_IS_STATIC,
633 formInfo.isStatic,
634 false,
635 parseResult);
636 GetValueIfFindKey<FormType>(jsonObject,
637 jsonObjectEnd,
638 JSON_KEY_TYPE,
639 formInfo.type,
640 JsonType::NUMBER,
641 false,
642 parseResult,
643 ArrayType::NOT_ARRAY);
644 GetValueIfFindKey<FormsColorMode>(jsonObject,
645 jsonObjectEnd,
646 JSON_KEY_COLOR_MODE,
647 formInfo.colorMode,
648 JsonType::NUMBER,
649 false,
650 parseResult,
651 ArrayType::NOT_ARRAY);
652 GetValueIfFindKey<FormsRenderingMode>(jsonObject,
653 jsonObjectEnd,
654 JSON_KEY_RENDERING_MODE,
655 formInfo.renderingMode,
656 JsonType::NUMBER,
657 false,
658 parseResult,
659 ArrayType::NOT_ARRAY);
660 GetValueIfFindKey<std::vector<int32_t>>(jsonObject,
661 jsonObjectEnd,
662 JSON_KEY_SUPPORT_DIMENSIONS,
663 formInfo.supportDimensions,
664 JsonType::ARRAY,
665 false,
666 parseResult,
667 ArrayType::NUMBER);
668 GetValueIfFindKey<std::vector<FormCustomizeData>>(jsonObject,
669 jsonObjectEnd,
670 JSON_KEY_CUSTOMIZE_DATA,
671 formInfo.customizeDatas,
672 JsonType::ARRAY,
673 false,
674 parseResult,
675 ArrayType::OBJECT);
676 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
677 jsonObjectEnd,
678 JSON_KEY_LANDSCAPE_LAYOUTS,
679 formInfo.landscapeLayouts,
680 JsonType::ARRAY,
681 false,
682 parseResult,
683 ArrayType::STRING);
684 GetValueIfFindKey<std::vector<std::string>>(jsonObject,
685 jsonObjectEnd,
686 JSON_KEY_PORTRAIT_LAYOUTS,
687 formInfo.portraitLayouts,
688 JsonType::ARRAY,
689 false,
690 parseResult,
691 ArrayType::STRING);
692 GetValueIfFindKey<FormWindow>(jsonObject,
693 jsonObjectEnd,
694 JSON_KEY_WINDOW,
695 formInfo.window,
696 JsonType::OBJECT,
697 false,
698 parseResult,
699 ArrayType::NOT_ARRAY);
700 GetValueIfFindKey<FormType>(jsonObject,
701 jsonObjectEnd,
702 JSON_KEY_UI_SYNTAX,
703 formInfo.uiSyntax,
704 JsonType::NUMBER,
705 false,
706 parseResult,
707 ArrayType::NOT_ARRAY);
708 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
709 jsonObjectEnd,
710 JSON_KEY_DATA_PROXY_ENABLED,
711 formInfo.dataProxyEnabled,
712 false,
713 parseResult);
714 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
715 jsonObjectEnd,
716 JSON_KEY_IS_DYNAMIC,
717 formInfo.isDynamic,
718 false,
719 parseResult);
720 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
721 jsonObjectEnd,
722 JSON_KEY_TRANSPARENCY_ENABLED,
723 formInfo.transparencyEnabled,
724 false,
725 parseResult);
726 GetValueIfFindKey<int32_t>(jsonObject,
727 jsonObjectEnd,
728 JSON_KEY_PRIVACY_LEVEL,
729 formInfo.privacyLevel,
730 JsonType::NUMBER,
731 false,
732 parseResult,
733 ArrayType::NOT_ARRAY);
734 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
735 jsonObjectEnd,
736 JSON_KEY_FONT_SCALE_FOLLOW_SYSTEM,
737 formInfo.fontScaleFollowSystem,
738 false,
739 parseResult);
740 GetValueIfFindKey<std::vector<int32_t>>(jsonObject,
741 jsonObjectEnd,
742 JSON_KEY_SUPPORT_SHAPES,
743 formInfo.supportShapes,
744 JsonType::ARRAY,
745 false,
746 parseResult,
747 ArrayType::NUMBER);
748 GetValueIfFindKey<uint32_t>(jsonObject,
749 jsonObjectEnd,
750 JSON_KEY_VERSION_CODE,
751 formInfo.versionCode,
752 JsonType::NUMBER,
753 false,
754 parseResult,
755 ArrayType::NOT_ARRAY);
756 GetValueIfFindKey<BundleType>(jsonObject,
757 jsonObjectEnd,
758 JSON_KEY_BUNDLE_TYPE,
759 formInfo.bundleType,
760 JsonType::NUMBER,
761 false,
762 parseResult,
763 ArrayType::NOT_ARRAY);
764 GetValueIfFindKey<std::vector<uint32_t>>(jsonObject,
765 jsonObjectEnd,
766 JSON_KEY_PREVIEW_IMAGES,
767 formInfo.formPreviewImages,
768 JsonType::ARRAY,
769 false,
770 parseResult,
771 ArrayType::NUMBER);
772 BMSJsonUtil::GetBoolValueIfFindKey(jsonObject,
773 jsonObjectEnd,
774 JSON_KEY_ENABLE_BLUR_BACKGROUND,
775 formInfo.enableBlurBackground,
776 false,
777 parseResult);
778 if (parseResult != ERR_OK) {
779 APP_LOGE("read formInfo jsonObject error : %{public}d", parseResult);
780 }
781 }
782 } // namespace AppExecFwk
783 } // namespace OHOS
784