• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 <fcntl.h>
19 #include <unistd.h>
20 #include <errno.h>
21 #include <string.h>
22 #include "json_serializer.h"
23 #include "nlohmann/json.hpp"
24 #include "string_ex.h"
25 #include "parcel_macro.h"
26 #include "app_log_wrapper.h"
27 #include "nlohmann/json.hpp"
28 #include "bundle_constants.h"
29 
30 namespace OHOS {
31 namespace AppExecFwk {
32 namespace {
33 const std::string JSON_KEY_COLOR_MODE = "colorMode";
34 const std::string JSON_KEY_PACKAGE = "package";
35 const std::string JSON_KEY_SUPPORT_DIMENSIONS = "supportDimensions";
36 const std::string JSON_KEY_DEFAULT_DIMENSION = "defaultDimension";
37 const std::string JSON_KEY_UPDATE_ENABLED = "updateEnabled";
38 const std::string JSON_KEY_SCHEDULED_UPDATE_TIME = "scheduledUpateTime";
39 const std::string JSON_KEY_UPDATE_DURATION = "updateDuration";
40 const std::string JSON_KEY_DEEP_LINK = "deepLink";
41 const std::string JSON_KEY_JS_COMPONENT_NAME = "jsComponentName";
42 const std::string JSON_KEY_VALUE = "value";
43 const std::string JSON_KEY_NAME = "name";
44 const std::string JSON_KEY_ABILITY_NAME = "abilityName";
45 const std::string JSON_KEY_BUNDLE_NAME = "bundleName";
46 const std::string JSON_KEY_MODULE_NAME = "moduleName";
47 const std::string JSON_KEY_ORIGINAL_BUNDLE_NAME = "originalBundleName";
48 const std::string JSON_KEY_CUSTOMIZE_DATA = "customizeData";
49 const std::string JSON_KEY_DESCRIPTION = "description";
50 const std::string JSON_KEY_DESCRIPTION_ID = "descriptionId";
51 const std::string JSON_KEY_TYPE = "type";
52 const std::string JSON_KEY_LANDSCAPE_LAYOUTS = "landscapeLayouts";
53 const std::string JSON_KEY_FORMCONFIG_ABILITY = "formConfigAbility";
54 const std::string JSON_KEY_FORM_VISIBLE_NOTIFY = "formVisibleNotify";
55 const std::string JSON_KEY_RELATED_BUNDLE_NAME = "relatedBundleName";
56 const std::string JSON_KEY_DEFAULT_FLAG = "defaultFlag";
57 const std::string JSON_KEY_PORTRAIT_LAYOUTS = "portraitLayouts";
58 }  // namespace
59 
ReadFromParcel(Parcel & parcel)60 bool FormInfo::ReadFromParcel(Parcel &parcel)
61 {
62     name = Str16ToStr8(parcel.ReadString16());
63     package = Str16ToStr8(parcel.ReadString16());
64     bundleName = Str16ToStr8(parcel.ReadString16());
65     moduleName = Str16ToStr8(parcel.ReadString16());
66     abilityName = Str16ToStr8(parcel.ReadString16());
67     description = Str16ToStr8(parcel.ReadString16());
68     formConfigAbility = Str16ToStr8(parcel.ReadString16());
69     scheduledUpateTime = Str16ToStr8(parcel.ReadString16());
70     jsComponentName = Str16ToStr8(parcel.ReadString16());
71     relatedBundleName = Str16ToStr8(parcel.ReadString16());
72     originalBundleName = Str16ToStr8(parcel.ReadString16());
73     deepLink = Str16ToStr8(parcel.ReadString16());
74     updateEnabled = parcel.ReadBool();
75     defaultFlag = parcel.ReadBool();
76     formVisibleNotify = parcel.ReadBool();
77     defaultDimension = parcel.ReadInt32();
78     descriptionId = parcel.ReadInt32();
79     updateDuration = parcel.ReadInt32();
80 
81     int32_t typeData;
82     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, typeData);
83     type = static_cast<FormType>(typeData);
84 
85     int32_t colorModeData;
86     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, colorModeData);
87     colorMode = static_cast<FormsColorMode>(colorModeData);
88 
89     int32_t supportDimensionSize;
90     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportDimensionSize);
91 
92     for (int32_t i = 0; i < supportDimensionSize; i++) {
93         supportDimensions.emplace_back(parcel.ReadInt32());
94     }
95 
96     int32_t landscapeLayoutsSize;
97     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, landscapeLayoutsSize);
98     for (auto i = 0; i < landscapeLayoutsSize; i++) {
99         landscapeLayouts.emplace_back(Str16ToStr8(parcel.ReadString16()));
100     }
101 
102     int32_t portraitLayoutsSize;
103     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, portraitLayoutsSize);
104     for (auto i = 0; i < portraitLayoutsSize; i++) {
105         portraitLayouts.emplace_back(Str16ToStr8(parcel.ReadString16()));
106     }
107 
108     int32_t customizeDataSize;
109     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, customizeDataSize);
110     for (auto i = 0; i < customizeDataSize; i++) {
111         FormCustomizeData customizeData;
112         std::string customizeName = Str16ToStr8(parcel.ReadString16());
113         std::string customizeValue = Str16ToStr8(parcel.ReadString16());
114         customizeData.name = customizeName;
115         customizeData.value = customizeValue;
116         customizeDatas.emplace_back(customizeData);
117     }
118     return true;
119 }
120 
Unmarshalling(Parcel & parcel)121 FormInfo *FormInfo::Unmarshalling(Parcel &parcel)
122 {
123     FormInfo *info = new FormInfo();
124     if (!info->ReadFromParcel(parcel)) {
125         APP_LOGW("read from parcel failed");
126         delete info;
127         info = nullptr;
128     }
129     return info;
130 }
131 
Marshalling(Parcel & parcel) const132 bool FormInfo::Marshalling(Parcel &parcel) const
133 {
134     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
135     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(package));
136     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
137     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
138     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(abilityName));
139     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
140     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(formConfigAbility));
141     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(scheduledUpateTime));
142     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(jsComponentName));
143     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(relatedBundleName));
144     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(originalBundleName));
145     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deepLink));
146     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, updateEnabled);
147     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, defaultFlag);
148     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, formVisibleNotify);
149     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, defaultDimension);
150     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, descriptionId);
151     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, updateDuration);
152     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(type));
153     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(colorMode));
154 
155     const auto supportDimensionSize = static_cast<int32_t>(supportDimensions.size());
156     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportDimensionSize);
157     for (auto i = 0; i < supportDimensionSize; i++) {
158         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, supportDimensions[i]);
159     }
160 
161     const auto landscapeLayoutsSize = static_cast<int32_t>(landscapeLayouts.size());
162     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, landscapeLayoutsSize);
163     for (auto i = 0; i < landscapeLayoutsSize; i++) {
164         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(landscapeLayouts[i]));
165     }
166 
167     const auto portraitLayoutsSize = static_cast<int32_t>(portraitLayouts.size());
168     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, portraitLayoutsSize);
169     for (auto i = 0; i < portraitLayoutsSize; i++) {
170         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(portraitLayouts[i]));
171     }
172 
173     const auto customizeDataSize = static_cast<int32_t>(customizeDatas.size());
174     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, customizeDataSize);
175     for (auto i = 0; i < customizeDataSize; i++) {
176         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(customizeDatas[i].name));
177         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(customizeDatas[i].value));
178     }
179     return true;
180 }
181 
to_json(nlohmann::json & jsonObject,const FormCustomizeData & customizeDatas)182 void to_json(nlohmann::json &jsonObject, const FormCustomizeData &customizeDatas)
183 {
184     jsonObject = nlohmann::json{
185         {JSON_KEY_NAME, customizeDatas.name},
186         {JSON_KEY_VALUE, customizeDatas.value}
187         };
188 }
189 
to_json(nlohmann::json & jsonObject,const FormInfo & formInfo)190 void to_json(nlohmann::json &jsonObject, const FormInfo &formInfo)
191 {
192     jsonObject = nlohmann::json{
193         {JSON_KEY_NAME, formInfo.name},
194         {JSON_KEY_PACKAGE, formInfo.package},
195         {JSON_KEY_BUNDLE_NAME, formInfo.bundleName},
196         {JSON_KEY_MODULE_NAME, formInfo.moduleName},
197         {JSON_KEY_ABILITY_NAME, formInfo.abilityName},
198         {JSON_KEY_DESCRIPTION, formInfo.description},
199         {JSON_KEY_RELATED_BUNDLE_NAME, formInfo.relatedBundleName},
200         {JSON_KEY_JS_COMPONENT_NAME, formInfo.jsComponentName},
201         {JSON_KEY_DEEP_LINK, formInfo.deepLink},
202         {JSON_KEY_FORMCONFIG_ABILITY, formInfo.formConfigAbility},
203         {JSON_KEY_SCHEDULED_UPDATE_TIME, formInfo.scheduledUpateTime},
204         {JSON_KEY_ORIGINAL_BUNDLE_NAME, formInfo.originalBundleName},
205         {JSON_KEY_DESCRIPTION_ID, formInfo.descriptionId},
206         {JSON_KEY_UPDATE_DURATION, formInfo.updateDuration},
207         {JSON_KEY_DEFAULT_DIMENSION, formInfo.defaultDimension},
208         {JSON_KEY_DEFAULT_FLAG, formInfo.defaultFlag},
209         {JSON_KEY_FORM_VISIBLE_NOTIFY, formInfo.formVisibleNotify},
210         {JSON_KEY_UPDATE_ENABLED, formInfo.updateEnabled},
211         {JSON_KEY_TYPE, formInfo.type},
212         {JSON_KEY_COLOR_MODE, formInfo.colorMode},
213         {JSON_KEY_SUPPORT_DIMENSIONS, formInfo.supportDimensions},
214         {JSON_KEY_CUSTOMIZE_DATA, formInfo.customizeDatas},
215         {JSON_KEY_LANDSCAPE_LAYOUTS, formInfo.landscapeLayouts},
216         {JSON_KEY_PORTRAIT_LAYOUTS, formInfo.portraitLayouts}
217         };
218 }
219 
from_json(const nlohmann::json & jsonObject,FormCustomizeData & customizeDatas)220 void from_json(const nlohmann::json &jsonObject, FormCustomizeData &customizeDatas)
221 {
222     customizeDatas.name = jsonObject.at(JSON_KEY_NAME).get<std::string>();
223     customizeDatas.value = jsonObject.at(JSON_KEY_VALUE).get<std::string>();
224 }
225 
from_json(const nlohmann::json & jsonObject,FormInfo & formInfo)226 void from_json(const nlohmann::json &jsonObject, FormInfo &formInfo)
227 {
228     formInfo.bundleName = jsonObject.at(JSON_KEY_BUNDLE_NAME).get<std::string>();
229     formInfo.package = jsonObject.at(JSON_KEY_PACKAGE).get<std::string>();
230     formInfo.moduleName = jsonObject.at(JSON_KEY_MODULE_NAME).get<std::string>();
231     formInfo.abilityName = jsonObject.at(JSON_KEY_ABILITY_NAME).get<std::string>();
232     formInfo.name = jsonObject.at(JSON_KEY_NAME).get<std::string>();
233     formInfo.description = jsonObject.at(JSON_KEY_DESCRIPTION).get<std::string>();
234     formInfo.relatedBundleName = jsonObject.at(JSON_KEY_RELATED_BUNDLE_NAME).get<std::string>();
235     formInfo.jsComponentName = jsonObject.at(JSON_KEY_JS_COMPONENT_NAME).get<std::string>();
236     formInfo.deepLink = jsonObject.at(JSON_KEY_DEEP_LINK).get<std::string>();
237     formInfo.formConfigAbility = jsonObject.at(JSON_KEY_FORMCONFIG_ABILITY).get<std::string>();
238     formInfo.scheduledUpateTime = jsonObject.at(JSON_KEY_SCHEDULED_UPDATE_TIME).get<std::string>();
239     formInfo.originalBundleName = jsonObject.at(JSON_KEY_ORIGINAL_BUNDLE_NAME).get<std::string>();
240     formInfo.descriptionId = jsonObject.at(JSON_KEY_DESCRIPTION_ID).get<int32_t>();
241     formInfo.updateDuration = jsonObject.at(JSON_KEY_UPDATE_DURATION).get<int32_t>();
242     formInfo.defaultDimension = jsonObject.at(JSON_KEY_DEFAULT_DIMENSION).get<int32_t>();
243     formInfo.defaultFlag = jsonObject.at(JSON_KEY_DEFAULT_FLAG).get<bool>();
244     formInfo.formVisibleNotify = jsonObject.at(JSON_KEY_FORM_VISIBLE_NOTIFY).get<bool>();
245     formInfo.updateEnabled = jsonObject.at(JSON_KEY_UPDATE_ENABLED).get<bool>();
246     formInfo.type = jsonObject.at(JSON_KEY_TYPE).get<FormType>();
247     formInfo.colorMode = jsonObject.at(JSON_KEY_COLOR_MODE).get<FormsColorMode>();
248     formInfo.supportDimensions = jsonObject.at(JSON_KEY_SUPPORT_DIMENSIONS).get<std::vector<int32_t>>();
249     formInfo.customizeDatas = jsonObject.at(JSON_KEY_CUSTOMIZE_DATA).get<std::vector<FormCustomizeData>>();
250     formInfo.landscapeLayouts = jsonObject.at(JSON_KEY_LANDSCAPE_LAYOUTS).get<std::vector<std::string>>();
251     formInfo.portraitLayouts = jsonObject.at(JSON_KEY_PORTRAIT_LAYOUTS).get<std::vector<std::string>>();
252 }
253 }  // namespace AppExecFwk
254 }  // namespace OHOS
255