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 uint64_t insightIntentId = 0;
86 try {
87 insightIntentId = std::stoull(wantParams.GetStringParam(INSIGHT_INTENT_EXECUTE_PARAM_ID));
88 } catch (...) {
89 TAG_LOGE(AAFwkTag::ABILITY, "invalid insight intent ID");
90 return false;
91 }
92
93 AppExecFwk::ElementName elementName = want.GetElement();
94 executeParam.bundleName_ = elementName.GetBundleName();
95 executeParam.moduleName_ = elementName.GetModuleName();
96 executeParam.abilityName_ = elementName.GetAbilityName();
97 executeParam.insightIntentName_ = wantParams.GetStringParam(INSIGHT_INTENT_EXECUTE_PARAM_NAME);
98 executeParam.insightIntentId_ = insightIntentId;
99 executeParam.executeMode_ = wantParams.GetIntParam(INSIGHT_INTENT_EXECUTE_PARAM_MODE, 0);
100
101 auto insightIntentParam = wantParams.GetWantParams(INSIGHT_INTENT_EXECUTE_PARAM_PARAM);
102 UpdateInsightIntentCallerInfo(wantParams, insightIntentParam);
103 executeParam.insightIntentParam_ = std::make_shared<WantParams>(insightIntentParam);
104
105 return true;
106 }
107
RemoveInsightIntent(AAFwk::Want &want)108 bool InsightIntentExecuteParam::RemoveInsightIntent(AAFwk::Want &want)
109 {
110 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
111 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_NAME)) {
112 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_NAME);
113 }
114 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_ID)) {
115 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_ID);
116 }
117 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_MODE)) {
118 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_MODE);
119 }
120 if (want.HasParameter(INSIGHT_INTENT_EXECUTE_PARAM_PARAM)) {
121 want.RemoveParam(INSIGHT_INTENT_EXECUTE_PARAM_PARAM);
122 }
123 if (want.HasParameter(INSIGHT_INTENT_SRC_ENTRY)) {
124 want.RemoveParam(INSIGHT_INTENT_SRC_ENTRY);
125 }
126 return true;
127 }
128
UpdateInsightIntentCallerInfo(const WantParams &wantParams, WantParams &insightIntentParam)129 void InsightIntentExecuteParam::UpdateInsightIntentCallerInfo(const WantParams &wantParams,
130 WantParams &insightIntentParam)
131 {
132 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_TOKEN);
133 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_TOKEN,
134 AAFwk::Integer::Box(wantParams.GetIntParam(AAFwk::Want::PARAM_RESV_CALLER_TOKEN, 0)));
135
136 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_UID);
137 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_UID,
138 AAFwk::Integer::Box(wantParams.GetIntParam(AAFwk::Want::PARAM_RESV_CALLER_UID, 0)));
139
140 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_PID);
141 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_PID,
142 AAFwk::Integer::Box(wantParams.GetIntParam(AAFwk::Want::PARAM_RESV_CALLER_PID, 0)));
143
144 insightIntentParam.Remove(AAFwk::Want::PARAM_RESV_CALLER_BUNDLE_NAME);
145 insightIntentParam.SetParam(AAFwk::Want::PARAM_RESV_CALLER_BUNDLE_NAME,
146 AAFwk::String::Box(wantParams.GetStringParam(AAFwk::Want::PARAM_RESV_CALLER_BUNDLE_NAME)));
147 }
148 } // namespace AppExecFwk
149 } // namespace OHOS
150