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 "insight_intent_execute_param.h"
17 #include "hilog_tag_wrapper.h"
18 #include "hitrace_meter.h"
19 #include "int_wrapper.h"
20 #include "string_wrapper.h"
21
22 namespace OHOS {
23 namespace AppExecFwk {
24 using WantParams = OHOS::AAFwk::WantParams;
ReadFromParcel(Parcel & parcel)25 bool InsightIntentExecuteParam::ReadFromParcel(Parcel &parcel)
26 {
27 bundleName_ = Str16ToStr8(parcel.ReadString16());
28 moduleName_ = Str16ToStr8(parcel.ReadString16());
29 abilityName_ = Str16ToStr8(parcel.ReadString16());
30 insightIntentName_ = Str16ToStr8(parcel.ReadString16());
31 std::shared_ptr<WantParams> wantParams(parcel.ReadParcelable<WantParams>());
32 if (wantParams == nullptr) {
33 return false;
34 }
35 insightIntentParam_ = wantParams;
36 executeMode_ = parcel.ReadInt32();
37 insightIntentId_ = parcel.ReadUint64();
38 displayId_ = parcel.ReadInt32();
39 return true;
40 }
41
Unmarshalling(Parcel & parcel)42 InsightIntentExecuteParam *InsightIntentExecuteParam::Unmarshalling(Parcel &parcel)
43 {
44 InsightIntentExecuteParam *param = new (std::nothrow) InsightIntentExecuteParam();
45 if (param == nullptr) {
46 return nullptr;
47 }
48
49 if (!param->ReadFromParcel(parcel)) {
50 delete param;
51 param = nullptr;
52 }
53 return param;
54 }
55
Marshalling(Parcel & parcel) const56 bool InsightIntentExecuteParam::Marshalling(Parcel &parcel) const
57 {
58 parcel.WriteString16(Str8ToStr16(bundleName_));
59 parcel.WriteString16(Str8ToStr16(moduleName_));
60 parcel.WriteString16(Str8ToStr16(abilityName_));
61 parcel.WriteString16(Str8ToStr16(insightIntentName_));
62 parcel.WriteParcelable(insightIntentParam_.get());
63 parcel.WriteInt32(executeMode_);
64 parcel.WriteUint64(insightIntentId_);
65 parcel.WriteInt32(displayId_);
66 return true;
67 }
68
IsInsightIntentExecute(const AAFwk::Want & want)69 bool InsightIntentExecuteParam::IsInsightIntentExecute(const AAFwk::Want &want)
70 {
71 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_NAME)) {
72 return true;
73 }
74 return false;
75 }
76
GenerateFromWant(const AAFwk::Want & want,InsightIntentExecuteParam & executeParam)77 bool InsightIntentExecuteParam::GenerateFromWant(const AAFwk::Want &want,
78 InsightIntentExecuteParam &executeParam)
79 {
80 const WantParams &wantParams = want.GetParams();
81 if (!wantParams.HasParam(INSIGHT_INTENT_EXECUTE_PARAM_NAME)) {
82 TAG_LOGE(AAFwkTag::INTENT, "empty want");
83 return false;
84 }
85
86 AppExecFwk::ElementName elementName = want.GetElement();
87 executeParam.bundleName_ = elementName.GetBundleName();
88 executeParam.moduleName_ = elementName.GetModuleName();
89 executeParam.abilityName_ = elementName.GetAbilityName();
90 executeParam.insightIntentName_ = wantParams.GetStringParam(INSIGHT_INTENT_EXECUTE_PARAM_NAME);
91 executeParam.insightIntentId_ = std::stoull(wantParams.GetStringParam(INSIGHT_INTENT_EXECUTE_PARAM_ID));
92 executeParam.executeMode_ = wantParams.GetIntParam(INSIGHT_INTENT_EXECUTE_PARAM_MODE, 0);
93
94 auto insightIntentParam = wantParams.GetWantParams(INSIGHT_INTENT_EXECUTE_PARAM_PARAM);
95 UpdateInsightIntentCallerInfo(wantParams, insightIntentParam);
96 executeParam.insightIntentParam_ = std::make_shared<WantParams>(insightIntentParam);
97
98 return true;
99 }
100
RemoveInsightIntent(AAFwk::Want & want)101 bool InsightIntentExecuteParam::RemoveInsightIntent(AAFwk::Want &want)
102 {
103 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
104 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_NAME)) {
105 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_NAME);
106 }
107 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_ID)) {
108 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_ID);
109 }
110 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_MODE)) {
111 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_MODE);
112 }
113 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_PARAM)) {
114 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_PARAM);
115 }
116 if (want.HasParameter(INSIGHT_INTENT_SRC_ENTRY)) {
117 want.RemoveParam(INSIGHT_INTENT_SRC_ENTRY);
118 }
119 return true;
120 }
121
UpdateInsightIntentCallerInfo(const WantParams & wantParams,WantParams & insightIntentParam)122 void InsightIntentExecuteParam::UpdateInsightIntentCallerInfo(const WantParams &wantParams,
123 WantParams &insightIntentParam)
124 {
125 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_TOKEN);
126 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_TOKEN,
127 AAFwk::Integer::Box(wantParams.GetIntParam(AAFwk::Want::PARAM_RESV_CALLER_TOKEN, 0)));
128
129 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_UID);
130 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_UID,
131 AAFwk::Integer::Box(wantParams.GetIntParam(AAFwk::Want::PARAM_RESV_CALLER_UID, 0)));
132
133 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_PID);
134 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_PID,
135 AAFwk::Integer::Box(wantParams.GetIntParam(AAFwk::Want::PARAM_RESV_CALLER_PID, 0)));
136
137 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_BUNDLE_NAME);
138 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_BUNDLE_NAME,
139 AAFwk::String::Box(wantParams.GetStringParam(AAFwk::Want::PARAM_RESV_CALLER_BUNDLE_NAME)));
140 }
141 } // namespace AppExecFwk
142 } // namespace OHOS
143