1 /*
2  * Copyright (c) 2023-2024 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 "ecological_rule/ability_ecological_rule_mgr_service_param.h"
17 
18 #include "hilog_tag_wrapper.h"
19 
20 namespace OHOS {
21 namespace EcologicalRuleMgrService {
22 #define TAG "ERMS_PARAM"
23 
Unmarshalling(Parcel & in)24 AbilityExperienceRule *AbilityExperienceRule::Unmarshalling(Parcel &in)
25 {
26     auto *rule = new (std::nothrow) AbilityExperienceRule();
27     if (rule == nullptr) {
28         return nullptr;
29     }
30 
31     if (!in.ReadInt32(rule->resultCode)) {
32         delete rule;
33         return nullptr;
34     }
35 
36     if (!in.ReadString(rule->sceneCode)) {
37         delete rule;
38         return nullptr;
39     }
40 
41     rule->replaceWant = in.ReadParcelable<Want>();
42 
43     if (!in.ReadBool(rule->isBackSkuExempt)) {
44         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read isBackSkuExempt failed");
45         rule->isBackSkuExempt = true;
46     }
47 
48     return rule;
49 }
50 
Marshalling(Parcel & parcel) const51 bool AbilityExperienceRule::Marshalling(Parcel &parcel) const
52 {
53     if (!parcel.WriteInt32(resultCode)) {
54         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write resultCode failed");
55         return false;
56     }
57 
58     if (!parcel.WriteString(sceneCode)) {
59         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write sceneCode failed");
60         return false;
61     }
62     if (!parcel.WriteParcelable(replaceWant)) {
63         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write replaceWant failed");
64         return false;
65     }
66 
67     if (!parcel.WriteBool(isBackSkuExempt)) {
68         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write isBackSkuExempt failed");
69     }
70 
71     return true;
72 }
73 
ReadFromParcel(Parcel & parcel)74 bool AbilityCallerInfo::ReadFromParcel(Parcel &parcel)
75 {
76     TAG_LOGD(AAFwkTag::ECOLOGICAL_RULE, "read from parcel");
77     return true;
78 }
79 
Unmarshalling(Parcel & in)80 AbilityCallerInfo *AbilityCallerInfo::Unmarshalling(Parcel &in)
81 {
82     auto *info = new (std::nothrow) AbilityCallerInfo();
83     if (info == nullptr) {
84         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "info null");
85         return nullptr;
86     }
87 
88     info->packageName = in.ReadString();
89     TAG_LOGD(AAFwkTag::ECOLOGICAL_RULE, "read packageName result: %{public}s", info->packageName.c_str());
90 
91     if (!in.ReadInt32(info->uid)) {
92         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read uid failed");
93         delete info;
94         return nullptr;
95     }
96 
97     if (!in.ReadInt32(info->pid)) {
98         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read pid failed");
99         delete info;
100         return nullptr;
101     }
102 
103     if (!in.ReadInt32(info->callerAppType)) {
104         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read callerAppType failed");
105         delete info;
106         return nullptr;
107     }
108 
109     if (!in.ReadInt32(info->targetAppType)) {
110         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read targetAppType failed");
111         delete info;
112         return nullptr;
113     }
114 
115     if (!in.ReadInt32(info->callerModelType)) {
116         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read callerModelType failed");
117         delete info;
118         return nullptr;
119     }
120 
121     info->targetAppDistType = in.ReadString();
122     info->targetLinkFeature = in.ReadString();
123 
124     if (!in.ReadInt32(info->targetLinkType)) {
125         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "read targetLinkType failed");
126         delete info;
127         return nullptr;
128     }
129 
130     info->callerAbilityType = static_cast<AppExecFwk::AbilityType>(in.ReadInt32());
131 
132     info->embedded = in.ReadInt32();
133     info->callerAppProvisionType = in.ReadString();
134     info->targetAppProvisionType = in.ReadString();
135     info->callerExtensionAbilityType = static_cast<AppExecFwk::ExtensionAbilityType>(in.ReadInt32());
136     info->targetAbilityType = static_cast<AppExecFwk::AbilityType>(in.ReadInt32());
137     info->targetExtensionAbilityType = static_cast<AppExecFwk::ExtensionAbilityType>(in.ReadInt32());
138     return info;
139 }
140 
Marshalling(Parcel & parcel) const141 bool AbilityCallerInfo::Marshalling(Parcel &parcel) const
142 {
143     if (!DoMarshallingOne(parcel)) {
144         return false;
145     }
146 
147     if (!parcel.WriteInt32(embedded)) {
148         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write embedded failed");
149         return false;
150     }
151 
152     if (!parcel.WriteString(callerAppProvisionType)) {
153         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write callerAppProvisionType failed");
154         return false;
155     }
156 
157     if (!parcel.WriteString(targetAppProvisionType)) {
158         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetAppProvisionType failed");
159         return false;
160     }
161 
162     if (!parcel.WriteInt32(static_cast<int32_t>(callerExtensionAbilityType))) {
163         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write callerExtensionAbilityType failed");
164         return false;
165     }
166 
167     if (!parcel.WriteInt32(static_cast<int32_t>(targetAbilityType))) {
168         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetAbilityType failed");
169         return false;
170     }
171 
172     if (!parcel.WriteInt32(static_cast<int32_t>(targetExtensionAbilityType))) {
173         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetExtensionAbilityType failed");
174         return false;
175     }
176 
177     if (!parcel.WriteInt32(userId)) {
178         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write userId failed");
179         return false;
180     }
181     return true;
182 }
183 
DoMarshallingOne(Parcel & parcel) const184 bool AbilityCallerInfo::DoMarshallingOne(Parcel &parcel) const
185 {
186     if (!parcel.WriteString(packageName)) {
187         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write packageName failed");
188         return false;
189     }
190 
191     if (!parcel.WriteInt32(uid)) {
192         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write uid failed");
193         return false;
194     }
195 
196     if (!parcel.WriteInt32(pid)) {
197         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write pid failed");
198         return false;
199     }
200 
201     if (!parcel.WriteInt32(callerAppType)) {
202         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write callerAppType failed");
203         return false;
204     }
205 
206     if (!parcel.WriteInt32(targetAppType)) {
207         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetAppType failed");
208         return false;
209     }
210 
211     if (!parcel.WriteInt32(callerModelType)) {
212         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write callerModelType failed");
213         return false;
214     }
215 
216     if (!parcel.WriteString(targetAppDistType)) {
217         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetAppDistType failed");
218         return false;
219     }
220 
221     if (!parcel.WriteString(targetLinkFeature)) {
222         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetLinkFeature failed");
223         return false;
224     }
225 
226     if (!parcel.WriteInt32(targetLinkType)) {
227         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write targetLinkType failed");
228         return false;
229     }
230 
231     if (!parcel.WriteInt32(static_cast<int32_t>(callerAbilityType))) {
232         TAG_LOGE(AAFwkTag::ECOLOGICAL_RULE, "write callerAbilityType failed");
233         return false;
234     }
235 
236     return true;
237 }
238 
ToString() const239 std::string AbilityCallerInfo::ToString() const
240 {
241     std::string str = "CallerInfo{packageName:" + packageName + ",uid:" + std::to_string(uid) +
242         ",pid:" + std::to_string(pid) + ",callerAppType:" + std::to_string(callerAppType) +
243         ",targetAppType:" + std::to_string(targetAppType) + ",callerModelType:" + std::to_string(callerModelType) +
244         ",targetAppDistType:" + targetAppDistType + ",targetLinkFeature:" + targetLinkFeature + ",targetLinkType:" +
245         std::to_string(targetLinkType) + ",callerAbilityType:" +
246         std::to_string(static_cast<int32_t>(callerAbilityType)) + ",callerExtensionAbilityType:" +
247         std::to_string(static_cast<int32_t>(callerExtensionAbilityType)) + ",embedded:" +
248         std::to_string(embedded) + ",callerAppProvisionType:" + callerAppProvisionType + ",targetAppProvisionType:" +
249         targetAppProvisionType + ",targetAbilityType:" +
250         std::to_string(static_cast<int32_t>(targetAbilityType)) + ",targetExtensionAbilityType:" +
251         std::to_string(static_cast<int32_t>(targetExtensionAbilityType)) + "}";
252     return str;
253 }
254 } // namespace EcologicalRuleMgrService
255 } // namespace OHOS
256