From 432b5e771e069171ed39512e9823132013db501b Mon Sep 17 00:00:00 2001 From: jsjzju Date: Fri, 28 Jul 2023 23:52:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0UIExtension=E6=AD=BB=E4=BA=A1?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jsjzju Change-Id: I4d4d31de39acc9570487b33880d635d2f212580c --- window_scene/session/host/include/session.h | 2 ++ .../host/include/zidl/session_interface.h | 4 +++- .../session/host/include/zidl/session_proxy.h | 1 + .../session/host/include/zidl/session_stub.h | 1 + window_scene/session/host/src/session.cpp | 10 ++++++++++ .../session/host/src/zidl/session_proxy.cpp | 16 ++++++++++++++++ .../session/host/src/zidl/session_stub.cpp | 11 ++++++++++- 7 files changed, 43 insertions(+), 2 deletions(-) diff --git a/window_scene/session/host/include/session.h b/window_scene/session/host/include/session.h index 75fb6b47d6..b60bda4f3e 100644 --- a/window_scene/session/host/include/session.h +++ b/window_scene/session/host/include/session.h @@ -62,6 +62,7 @@ public: virtual void OnForeground() = 0; virtual void OnBackground() = 0; virtual void OnDisconnect() = 0; + virtual void OnExtensionDied() = 0; }; class Session : public SessionStub, public virtual RefBase { @@ -105,6 +106,7 @@ public: WSError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) override; WSError TransferExtensionData(const AAFwk::WantParams& wantParams) override; void NotifyRemoteReady() override; + void NotifyExtensionDied() override; void NotifyConnect(); void NotifyForeground(); void NotifyBackground(); diff --git a/window_scene/session/host/include/zidl/session_interface.h b/window_scene/session/host/include/zidl/session_interface.h index f53fd15d3e..8190a1198d 100644 --- a/window_scene/session/host/include/zidl/session_interface.h +++ b/window_scene/session/host/include/zidl/session_interface.h @@ -63,7 +63,8 @@ public: // Extension TRANS_ID_TRANSFER_ABILITY_RESULT = 500, TRANS_ID_TRANSFER_EXTENSION_DATA = 501, - TRANS_ID_NOTIFY_REMOTE_READY = 502 + TRANS_ID_NOTIFY_REMOTE_READY = 502, + TRANS_ID_NOTIFY_EXTENSION_DIED = 503 }; virtual WSError Connect(const sptr& sessionStage, const sptr& eventChannel, const std::shared_ptr& surfaceNode, SystemSessionConfig& systemConfig, @@ -99,6 +100,7 @@ public: virtual WSError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) = 0; virtual WSError TransferExtensionData(const AAFwk::WantParams& wantParams) = 0; virtual void NotifyRemoteReady() = 0; + virtual void NotifyExtensionDied() = 0; }; } // namespace OHOS::Rosen #endif // OHOS_ROSEN_WINDOW_SCENE_SESSION_INTERFACE_H diff --git a/window_scene/session/host/include/zidl/session_proxy.h b/window_scene/session/host/include/zidl/session_proxy.h index f08f752a1c..f270e62cd7 100644 --- a/window_scene/session/host/include/zidl/session_proxy.h +++ b/window_scene/session/host/include/zidl/session_proxy.h @@ -56,6 +56,7 @@ public: WSError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) override; WSError TransferExtensionData(const AAFwk::WantParams& wantParams) override; void NotifyRemoteReady() override; + void NotifyExtensionDied() override; WSError UpdateWindowAnimationFlag(bool needDefaultAnimationFlag) override; private: static inline BrokerDelegator delegator_; diff --git a/window_scene/session/host/include/zidl/session_stub.h b/window_scene/session/host/include/zidl/session_stub.h index 7aef6e97a4..bb2b2ef2f3 100644 --- a/window_scene/session/host/include/zidl/session_stub.h +++ b/window_scene/session/host/include/zidl/session_stub.h @@ -64,6 +64,7 @@ private: int HandleTransferAbilityResult(MessageParcel& data, MessageParcel& reply); int HandleTransferExtensionData(MessageParcel& data, MessageParcel& reply); int HandleNotifyRemoteReady(MessageParcel& data, MessageParcel& reply); + int HandleNotifyExtensionDied(MessageParcel& data, MessageParcel& reply); }; } // namespace OHOS::Rosen #endif // OHOS_ROSEN_WINDOW_SCENE_SESSION_STUB_H diff --git a/window_scene/session/host/src/session.cpp b/window_scene/session/host/src/session.cpp index 6d1e78c10c..36e83072a2 100644 --- a/window_scene/session/host/src/session.cpp +++ b/window_scene/session/host/src/session.cpp @@ -152,6 +152,16 @@ void Session::NotifyDisconnect() } } +void Session::NotifyExtensionDied() +{ + auto lifecycleListeners = GetListeners(); + for (auto& listener : lifecycleListeners) { + if (!listener.expired()) { + listener.lock()->OnExtensionDied(); + } + } +} + float Session::GetAspectRatio() const { return aspectRatio_; diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index c7b9241121..a8047f0c57 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -732,6 +732,22 @@ void SessionProxy::NotifyRemoteReady() } } +void SessionProxy::NotifyExtensionDied() +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_ASYNC); + if (!data.WriteInterfaceToken(GetDescriptor())) { + WLOGFE("WriteInterfaceToken failed"); + return; + } + if (Remote()->SendRequest(static_cast(SessionMessage::TRANS_ID_NOTIFY_EXTENSION_DIED), + data, reply, option) != ERR_NONE) { + WLOGFE("SendRequest failed"); + return; + } +} + WSError SessionProxy::UpdateWindowAnimationFlag(bool needDefaultAnimationFlag) { MessageParcel data; diff --git a/window_scene/session/host/src/zidl/session_stub.cpp b/window_scene/session/host/src/zidl/session_stub.cpp index ff3f3772f8..23cdb68d42 100644 --- a/window_scene/session/host/src/zidl/session_stub.cpp +++ b/window_scene/session/host/src/zidl/session_stub.cpp @@ -74,7 +74,9 @@ const std::map SessionStub::stubFuncMap_{ std::make_pair(static_cast(SessionMessage::TRANS_ID_TRANSFER_EXTENSION_DATA), &SessionStub::HandleTransferExtensionData), std::make_pair(static_cast(SessionMessage::TRANS_ID_NOTIFY_REMOTE_READY), - &SessionStub::HandleNotifyRemoteReady) + &SessionStub::HandleNotifyRemoteReady), + std::make_pair(static_cast(SessionMessage::TRANS_ID_NOTIFY_EXTENSION_DIED), + &SessionStub::HandleNotifyExtensionDied) }; int SessionStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) @@ -424,4 +426,11 @@ int SessionStub::HandleNotifyRemoteReady(MessageParcel& data, MessageParcel& rep NotifyRemoteReady(); return ERR_NONE; } + +int SessionStub::HandleNotifyExtensionDied(MessageParcel& data, MessageParcel& reply) +{ + WLOGFD("called"); + NotifyExtensionDied(); + return ERR_NONE; +} } // namespace OHOS::Rosen -- Gitee