diff --git a/window_scene/session/host/include/session.h b/window_scene/session/host/include/session.h index 75fb6b47d6713617eb3bd70c3b778f42a8c26ba0..b60bda4f3e9c311d2a2e1cdd90372398e0377d8e 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 f53fd15d3e4f8d20d8ba5931cbaf43880dff60ab..8190a1198dfe88f0b5a52f4216a1f67323129b6a 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 f08f752a1cf456158a47dec7c34c188123a2ab22..f270e62cd71a3a266f08a0de0326d132789c97b9 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 7aef6e97a45738a229c7899bedf285ade0899c6d..bb2b2ef2f3ab3db4a4b5bf3ce07c4ad175cb5716 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 6d1e78c10c156994e74b48643ac7c181fe385cc2..36e83072a2d09f823608eb118c4b2d9f9c479c25 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 c7b924112147479c62c54ac1e542493c61ff13a9..a8047f0c57031861e0579f5243433665f3f65a00 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 ff3f3772f8d6d933c98bb0c6fa8d4b408b0db254..23cdb68d4251147ec0d06997a5a0d068f36bcb03 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