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