diff --git a/window_scene/interfaces/include/ws_common.h b/window_scene/interfaces/include/ws_common.h index 14eb63b51a48d28ac82621567d5457d48f2ac1c9..6e5e9e6c7e2dd0aa363953cd53b9d2d76a0e8f17 100644 --- a/window_scene/interfaces/include/ws_common.h +++ b/window_scene/interfaces/include/ws_common.h @@ -53,6 +53,7 @@ constexpr uint32_t COLOR_WHITE = 0xffffffff; constexpr uint32_t COLOR_BLACK = 0xff000000; const std::string WINDOW_SCREEN_LOCK_PREFIX = "windowLock_"; const std::string VIEW_SCREEN_LOCK_PREFIX = "viewLock_"; +constexpr int32_t DEFAULT_INVALID_WINDOW_MODE = 0; enum class WSError : int32_t { WS_OK = 0, diff --git a/window_scene/session/host/include/session.h b/window_scene/session/host/include/session.h index c896e372cac1c5cc5e8d288e0237cbfc6b0fbd56..af0878411c1cf96b1ca9f4a2a0932e8fb2dd0861 100644 --- a/window_scene/session/host/include/session.h +++ b/window_scene/session/host/include/session.h @@ -319,6 +319,7 @@ public: void GetCloseAbilityWantAndClean(AAFwk::Want& outWant); void SetSessionInfo(const SessionInfo& info); void SetSessionInfoWindowInputType(uint32_t windowInputType); + void SetSessionInfoWindowMode(int32_t windowMode); const SessionInfo& GetSessionInfo() const; SessionInfo& EditSessionInfo(); DisplayId GetScreenId() const; diff --git a/window_scene/session/host/src/session.cpp b/window_scene/session/host/src/session.cpp index 6fddb97ae78bb393ac171632ce076a47515c0af4..73239122a540e5b8bc78cb1da61e9dee1e42d8a7 100644 --- a/window_scene/session/host/src/session.cpp +++ b/window_scene/session/host/src/session.cpp @@ -350,6 +350,11 @@ void Session::SetSessionInfoWindowInputType(uint32_t windowInputType) NotifySessionInfoChange(); } +void Session::SetSessionInfoWindowMode(int32_t windowMode) +{ + sessionInfo_.windowMode = windowMode; +} + DisplayId Session::GetScreenId() const { return sessionInfo_.screenId_; diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 8756d85edaf42a09dd328991d9270346b106e17c..72dce37d0350a9d03b71160d82061da7ee28dce9 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -723,7 +723,8 @@ public: void StartAbilityBySpecified(const SessionInfo& sessionInfo); void NotifyWindowStateErrorFromMMI(int32_t pid, int32_t persistentId); void RemoveLifeCycleTaskByPersistentId(int32_t persistentId, const LifeCycleTaskType taskType); - WSError PendingSessionToForeground(const sptr& token) override; + WSError PendingSessionToForeground(const sptr& token, + int32_t windowMode = DEFAULT_INVALID_WINDOW_MODE) override; WSError PendingSessionToBackground(const sptr& token, const BackgroundParams& params); WSError PendingSessionToBackgroundForDelegator(const sptr& token, bool shouldBackToCaller = true) override; diff --git a/window_scene/session_manager/include/scene_session_manager_lite.h b/window_scene/session_manager/include/scene_session_manager_lite.h index 9d32ee1aaf480b887a4b0911b9f10fac12fe1639..a09661fd02fbd306e318dcd4d762312b806c0934 100644 --- a/window_scene/session_manager/include/scene_session_manager_lite.h +++ b/window_scene/session_manager/include/scene_session_manager_lite.h @@ -27,7 +27,8 @@ public: WSError SetSessionLabel(const sptr& token, const std::string& label) override; WSError SetSessionIcon(const sptr& token, const std::shared_ptr& icon) override; WSError IsValidSessionIds(const std::vector& sessionIds, std::vector& results) override; - WSError PendingSessionToForeground(const sptr& token) override; + WSError PendingSessionToForeground(const sptr& token, + int32_t windowMode = DEFAULT_INVALID_WINDOW_MODE) override; WSError PendingSessionToBackground(const sptr& token, const BackgroundParams& params) override; WSError PendingSessionToBackgroundForDelegator(const sptr& token, bool shouldBackToCaller = true) override; diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h index d6d0ebe6d48057e858bcdb117148b68a534952ce..8af9a8d0b3cda199844e7c369495ae94719e5f34 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_interface.h @@ -161,7 +161,8 @@ public: virtual WSError SetSessionLabel(const sptr& token, const std::string& label) = 0; virtual WSError SetSessionIcon(const sptr& token, const std::shared_ptr& icon) = 0; virtual WSError IsValidSessionIds(const std::vector& sessionIds, std::vector& results) = 0; - virtual WSError PendingSessionToForeground(const sptr& token) = 0; + virtual WSError PendingSessionToForeground(const sptr& token, + int32_t windowMode = DEFAULT_INVALID_WINDOW_MODE) = 0; virtual WSError PendingSessionToBackgroundForDelegator(const sptr& token, bool shouldBackToCaller = true) = 0; virtual WSError GetFocusSessionToken(sptr& token, DisplayId displayId = DEFAULT_DISPLAY_ID) = 0; diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_lite_interface.h b/window_scene/session_manager/include/zidl/scene_session_manager_lite_interface.h index 8ca7a44755d400f8a450079c8d144fed3622172e..369233df9389bd28f5d868c6afdfbf53cf551b53 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_lite_interface.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_lite_interface.h @@ -119,7 +119,8 @@ public: /* * Window Lifecycle */ - virtual WSError PendingSessionToForeground(const sptr& token) = 0; + virtual WSError PendingSessionToForeground(const sptr& token, + int32_t windowMode = DEFAULT_INVALID_WINDOW_MODE) = 0; virtual WSError PendingSessionToBackground(const sptr& token, const BackgroundParams& params) = 0; virtual WSError PendingSessionToBackgroundForDelegator(const sptr& token, bool shouldBackToCaller = true) = 0; diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_lite_proxy.h b/window_scene/session_manager/include/zidl/scene_session_manager_lite_proxy.h index 1e1c8c66958a5bceff07a4df16b1f6e8e2835b10..46dbc73f6bb9c0167130b94cadcdd25b3fbc51e3 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_lite_proxy.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_lite_proxy.h @@ -30,7 +30,8 @@ public: WSError SetSessionLabel(const sptr& token, const std::string& label) override; WSError SetSessionIcon(const sptr& token, const std::shared_ptr& icon) override; WSError IsValidSessionIds(const std::vector& sessionIds, std::vector& results) override; - WSError PendingSessionToForeground(const sptr& token) override; + WSError PendingSessionToForeground(const sptr& token, + int32_t windowMode = DEFAULT_INVALID_WINDOW_MODE) override; WSError PendingSessionToBackground(const sptr& token, const BackgroundParams& params) override; WSError PendingSessionToBackgroundForDelegator(const sptr& token, bool shouldBackToCaller = true) override; diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h b/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h index 4355649822b08d8bd7dfe679af75ef4db54b3f41..285e7f6ac81855e9513b833c80bc496a72f9eb96 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_proxy.h @@ -64,7 +64,8 @@ public: WSError IsValidSessionIds(const std::vector& sessionIds, std::vector& results) override; WMError GetAccessibilityWindowInfo(std::vector>& infos) override; WMError GetUnreliableWindowInfo(int32_t windowId, std::vector>& infos) override; - WSError PendingSessionToForeground(const sptr& token) override; + WSError PendingSessionToForeground(const sptr& token, + int32_t windowMode = DEFAULT_INVALID_WINDOW_MODE) override; WSError PendingSessionToBackgroundForDelegator(const sptr& token, bool shouldBackToCaller = true) override; WMError GetSessionSnapshotById(int32_t persistentId, SessionSnapshot& snapshot) override; diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index f2164634178a45bd4e82f2531489177f5db245e2..9db5ba08a8cbb6213b99410b945173aeac793faf 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -11794,7 +11794,7 @@ void SceneSessionManager::PreloadInLakeApp(const std::string& bundleName) } } -WSError SceneSessionManager::PendingSessionToForeground(const sptr& token) +WSError SceneSessionManager::PendingSessionToForeground(const sptr& token, int32_t windowMode) { TLOGI(WmsLogTag::WMS_LIFE, "in"); auto pid = IPCSkeleton::GetCallingRealPid(); @@ -11803,8 +11803,12 @@ WSError SceneSessionManager::PendingSessionToForeground(const sptrPostSyncTask([this, &token]() { + return taskScheduler_->PostSyncTask([this, &token, windowMode]() { if (auto session = FindSessionByToken(token)) { + if (windowMode != DEFAULT_INVALID_WINDOW_MODE) { + TLOGI(WmsLogTag::WMS_LIFE, "Modify window mode: %{public}d", windowMode); + session->SetSessionInfoWindowMode(windowMode); + } return session->PendingSessionToForeground(); } TLOGNE(WmsLogTag::DEFAULT, "PendingForeground: fail to find token"); diff --git a/window_scene/session_manager/src/scene_session_manager_lite.cpp b/window_scene/session_manager/src/scene_session_manager_lite.cpp index ec5e425f6e63feb1e90b68c10aa7a4807a0306f3..a80235646a4f7de2f371c6f1269bd8549a2ba419 100644 --- a/window_scene/session_manager/src/scene_session_manager_lite.cpp +++ b/window_scene/session_manager/src/scene_session_manager_lite.cpp @@ -106,10 +106,10 @@ WSError SceneSessionManagerLite::GetSessionSnapshot(const std::string& deviceId, return SceneSessionManager::GetInstance().GetSessionSnapshot(deviceId, persistentId, snapshot, isLowResolution); } -WSError SceneSessionManagerLite::PendingSessionToForeground(const sptr& token) +WSError SceneSessionManagerLite::PendingSessionToForeground(const sptr& token, int32_t windowMode) { WLOGFD("in"); - return SceneSessionManager::GetInstance().PendingSessionToForeground(token); + return SceneSessionManager::GetInstance().PendingSessionToForeground(token, windowMode); } WSError SceneSessionManagerLite::PendingSessionToBackground(const sptr& token, diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_lite_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_lite_proxy.cpp index bae1f8a0d555d0804759d8444493dffd9a73ac9d..f291e1e11ef73fd11fd6a46abcba8c289d0e2445 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_lite_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_lite_proxy.cpp @@ -122,7 +122,7 @@ WSError SceneSessionManagerLiteProxy::IsValidSessionIds( return static_cast(reply.ReadInt32()); } -WSError SceneSessionManagerLiteProxy::PendingSessionToForeground(const sptr& token) +WSError SceneSessionManagerLiteProxy::PendingSessionToForeground(const sptr& token, int32_t windowMode) { WLOGFD("run SceneSessionManagerLiteProxy::PendingSessionToForeground"); MessageParcel data; @@ -138,6 +138,11 @@ WSError SceneSessionManagerLiteProxy::PendingSessionToForeground(const sptr remote = Remote(); if (remote == nullptr) { WLOGFE("remote is null"); diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_lite_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_lite_stub.cpp index 9794d60a5e6ab3a5896dde8b8fd73feb1a86f5a5..e89225ace89eb578560614c83d7564a9de60ddc5 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_lite_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_lite_stub.cpp @@ -228,7 +228,12 @@ int SceneSessionManagerLiteStub::HandlePendingSessionToForeground(MessageParcel& WLOGFE("token is nullptr"); return ERR_INVALID_DATA; } - WSError errCode = PendingSessionToForeground(token); + int32_t windowMode = 0; + if (!data.ReadInt32(windowMode)) { + TLOGE(WmsLogTag::WMS_LIFE, "read windowMode fail"); + return ERR_INVALID_DATA; + } + WSError errCode = PendingSessionToForeground(token, windowMode); reply.WriteUint32(static_cast(errCode)); return ERR_NONE; } diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp index 6c750ea09f1e3a90828f6de53b0d53bd891f96c6..95a6343478e2687c91ce3d59f247bfc289eb907f 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_proxy.cpp @@ -1064,7 +1064,7 @@ WMError SceneSessionManagerProxy::GetUnreliableWindowInfo(int32_t windowId, return static_cast(reply.ReadInt32()); } -WSError SceneSessionManagerProxy::PendingSessionToForeground(const sptr& token) +WSError SceneSessionManagerProxy::PendingSessionToForeground(const sptr& token, int32_t windowMode) { WLOGFI("run SceneSessionManagerProxy::PendingSessionToForeground"); MessageParcel data; @@ -1080,6 +1080,11 @@ WSError SceneSessionManagerProxy::PendingSessionToForeground(const sptr remote = Remote(); if (remote == nullptr) { WLOGFE("remote is null"); diff --git a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp index d408a1c9501256cfd0130b22f3b4654feaaa7640..61331467e22be4e061bb1627add51dda2ad8cd5e 100644 --- a/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp +++ b/window_scene/session_manager/src/zidl/scene_session_manager_stub.cpp @@ -659,7 +659,12 @@ int SceneSessionManagerStub::HandlePendingSessionToForeground(MessageParcel& dat WLOGFE("token is nullptr"); return ERR_INVALID_DATA; } - WSError errCode = PendingSessionToForeground(token); + int32_t windowMode = 0; + if (!data.ReadInt32(windowMode)) { + TLOGE(WmsLogTag::WMS_LIFE, "read windowMode fail"); + return ERR_INVALID_DATA; + } + WSError errCode = PendingSessionToForeground(token, windowMode); reply.WriteUint32(static_cast(errCode)); return ERR_NONE; } diff --git a/window_scene/test/mock/mock_scene_session_manager_stub.h b/window_scene/test/mock/mock_scene_session_manager_stub.h index 16f6726bec7ff03cba5024eaf45fb11136cd9cfb..84453ef8036b3003586ffc95e738e670eae764aa 100644 --- a/window_scene/test/mock/mock_scene_session_manager_stub.h +++ b/window_scene/test/mock/mock_scene_session_manager_stub.h @@ -27,7 +27,7 @@ public: const std::shared_ptr& icon), (override)); MOCK_METHOD(WSError, IsValidSessionIds, (const std::vector& sessionIds, std::vector& results), (override)); - MOCK_METHOD(WSError, PendingSessionToForeground, (const sptr& token), + MOCK_METHOD(WSError, PendingSessionToForeground, (const sptr& token, int32_t windowMode), (override)); MOCK_METHOD(WSError, PendingSessionToBackgroundForDelegator, (const sptr& token, bool shouldBackToCaller), (override)); diff --git a/window_scene/test/unittest/scene_session_manager_lite_stub_test.cpp b/window_scene/test/unittest/scene_session_manager_lite_stub_test.cpp index bbab0983fdf1f53a1ab6729d0756f2e58dc07f31..5df6df25e48dd3cfef19762b23246692a1d14052 100644 --- a/window_scene/test/unittest/scene_session_manager_lite_stub_test.cpp +++ b/window_scene/test/unittest/scene_session_manager_lite_stub_test.cpp @@ -38,7 +38,7 @@ class MockSceneSessionManagerLiteStub : public SceneSessionManagerLiteStub { { return WSError::WS_OK; } - WSError PendingSessionToForeground(const sptr& token) override + WSError PendingSessionToForeground(const sptr& token, int32_t windowMode) override { return WSError::WS_OK; }