已开启
sessionUpdate #838
已开启
xhz-sz创建于 7月10日
2 个文件变更+60-2
@@ -41,6 +41,12 @@ enum class CallerTypeForAnco : int32_t {
41 QUERY = 241 QUERY = 2
42};42};
43 43 
44+struct OriginalCallerInfo {
45+ sptr<IRemoteObject> callerToken = nullptr;
46+ int32_t persistentId = 0;
47+ uint64_t uiExtensionComponentId = 0;
48+};
49+ 
44class SessionInfo : public Parcelable {50class SessionInfo : public Parcelable {
45public:51public:
46 SessionInfo() = default;52 SessionInfo() = default;
@@ -111,6 +117,7 @@ public:
111 int32_t specifiedReason = 0;117 int32_t specifiedReason = 0;
112 int32_t frameNum = 0;118 int32_t frameNum = 0;
113 bool nativeHideWindow = false;119 bool nativeHideWindow = false;
120+ OriginalCallerInfo originalCallerInfo {};
114 121 
115private:122private:
116 bool DoMarshallingOne(Parcel& parcel) const;123 bool DoMarshallingOne(Parcel& parcel) const;
@@ -120,9 +127,19 @@ private:
120 bool DoMarshallingFive(Parcel& parcel) const;127 bool DoMarshallingFive(Parcel& parcel) const;
121 bool DoMarshallingSix(Parcel& parcel) const;128 bool DoMarshallingSix(Parcel& parcel) const;
122 bool DoMarshallingSeven(Parcel& parcel) const;129 bool DoMarshallingSeven(Parcel& parcel) const;
130+ bool DoMarshallingEight(Parcel& parcel) const;
123 static SessionInfo* ReadParcelOne(SessionInfo* info, Parcel& parcel);131 static SessionInfo* ReadParcelOne(SessionInfo* info, Parcel& parcel);
124 static SessionInfo* ReadParcelTwo(SessionInfo* info, Parcel& parcel);132 static SessionInfo* ReadParcelTwo(SessionInfo* info, Parcel& parcel);
133+ static SessionInfo* ReadParcelThree(SessionInfo* info, Parcel& parcel);
125};134};
126} // namespace AAFwk135} // namespace AAFwk
136+ 
137+inline uint64_t GetEffectiveComponentId(const sptr<AAFwk::SessionInfo> &sessionInfo)
138+{
139+ if (sessionInfo && sessionInfo->originalCallerInfo.uiExtensionComponentId != 0) {
140+ return sessionInfo->originalCallerInfo.uiExtensionComponentId;
141+ }
142+ return sessionInfo ? sessionInfo->uiExtensionComponentId : 0;
143+}
127} // namespace OHOS144} // namespace OHOS
128#endif // OHOS_ABILITY_SESSION_INFO_H145#endif // OHOS_ABILITY_SESSION_INFO_H
@@ -50,8 +50,12 @@ bool SessionInfo::Marshalling(Parcel& parcel) const
50 if (!DoMarshallingSix(parcel)) {50 if (!DoMarshallingSix(parcel)) {
51 return false;51 return false;
52 }52 }
53- 53+ 
54- return DoMarshallingSeven(parcel);54+ if (!DoMarshallingSeven(parcel)) {
55+ return false;
56+ }
57+ 
58+ return DoMarshallingEight(parcel);
55}59}
56 60 
57bool SessionInfo::DoMarshallingOne(Parcel& parcel) const61bool SessionInfo::DoMarshallingOne(Parcel& parcel) const
@@ -393,6 +397,32 @@ bool SessionInfo::DoMarshallingSeven(Parcel& parcel) const
393 return true;397 return true;
394}398}
395 399 
400+bool SessionInfo::DoMarshallingEight(Parcel& parcel) const
401+{
402+ if (originalCallerInfo.callerToken) {
403+ if (!parcel.WriteBool(true) ||
404+ !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(originalCallerInfo.callerToken)) {
405+ ABILITYBASE_LOGE("Write original caller token failed");
406+ return false;
407+ }
408+ } else {
409+ if (!parcel.WriteBool(false)) {
410+ return false;
411+ }
412+ }
413+ 
414+ if (!parcel.WriteInt32(originalCallerInfo.persistentId)) {
415+ ABILITYBASE_LOGE("Write original persistent id failed");
416+ return false;
417+ }
418+ 
419+ if (!parcel.WriteUint64(originalCallerInfo.uiExtensionComponentId)) {
420+ ABILITYBASE_LOGE("Write original uiExtensionComponentId failed");
421+ return false;
422+ }
423+ return true;
424+}
425+ 
396SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel)426SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel)
397{427{
398 SessionInfo* info = new (std::nothrow) SessionInfo();428 SessionInfo* info = new (std::nothrow) SessionInfo();
@@ -417,6 +447,7 @@ SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel)
417 }447 }
418 ReadParcelOne(info, parcel);448 ReadParcelOne(info, parcel);
419 ReadParcelTwo(info, parcel);449 ReadParcelTwo(info, parcel);
450+ ReadParcelThree(info, parcel);
420 return info;451 return info;
421}452}
422 453 
@@ -490,5 +521,15 @@ SessionInfo* SessionInfo::ReadParcelTwo(SessionInfo* info, Parcel& parcel)
490 }521 }
491 return info;522 return info;
492}523}
524+ 
525+SessionInfo* SessionInfo::ReadParcelThree(SessionInfo* info, Parcel& parcel)
526+{
527+ if (parcel.ReadBool()) {
528+ info->originalCallerInfo.callerToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject();
529+ }
530+ info->originalCallerInfo.persistentId = parcel.ReadInt32();
531+ info->originalCallerInfo.uiExtensionComponentId = parcel.ReadUint64();
532+ return info;
533+}
493} // namespace AAFwk534} // namespace AAFwk
494} // namespace OHOS535} // namespace OHOS