From 93cea19256e29b46d1e5cc3003bf835900ec2a7a Mon Sep 17 00:00:00 2001 From: db Date: Thu, 26 Oct 2023 19:04:03 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=B2=89=E6=B5=B8=E5=BC=8F=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: db --- interfaces/innerkits/wm/window.h | 7 +++ .../window_runtime/window_napi/js_window.cpp | 46 +++++++++++++++++++ .../window_runtime/window_napi/js_window.h | 2 + .../include/scene_session_manager.h | 1 + .../session_manager/include/session_manager.h | 1 + .../zidl/scene_session_manager_interface.h | 2 + .../zidl/scene_session_manager_proxy.h | 1 + .../include/zidl/scene_session_manager_stub.h | 1 + .../src/scene_session_manager.cpp | 37 +++++++++++++++ .../session_manager/src/session_manager.cpp | 12 +++++ .../src/zidl/scene_session_manager_proxy.cpp | 19 ++++++++ .../src/zidl/scene_session_manager_stub.cpp | 10 ++++ wm/include/window_scene_session_impl.h | 1 + wm/src/window_scene_session_impl.cpp | 10 ++++ 14 files changed, 150 insertions(+) diff --git a/interfaces/innerkits/wm/window.h b/interfaces/innerkits/wm/window.h index 2703d12b8d..d83a837914 100644 --- a/interfaces/innerkits/wm/window.h +++ b/interfaces/innerkits/wm/window.h @@ -1376,6 +1376,13 @@ public: * @return True means floating window of app type, false means the opposite. */ virtual bool IsFloatingWindowAppType() const { return false; } + + /** + * @brief Is current window immersive or not. + * + * @return True means current app window is immersive, false means the opposite. + */ + virtual bool IsImmersiveFullScreen() const { return false; } }; } } diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp index 7f7feaa308..afe7178250 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp @@ -456,6 +456,13 @@ napi_value JsWindow::HideNonSystemFloatingWindows(napi_env env, napi_callback_in return (me != nullptr) ? me->OnHideNonSystemFloatingWindows(env, info) : nullptr; } +napi_value JsWindow::IsImmersiveFullScreen(napi_env env, napi_callback_info info) +{ + WLOGI("IsImmersiveFullScreen"); + JsWindow* me = CheckParamsAndGetThis(env, info); + return (me != nullptr) ? me->OnIsImmersiveFullScreen(env, info) : nullptr; +} + napi_value JsWindow::SetWindowTouchable(napi_env env, napi_callback_info info) { WLOGI("SetTouchable"); @@ -3234,6 +3241,44 @@ napi_value JsWindow::OnRaiseAboveTarget(napi_env env, napi_callback_info info) return result; } +napi_value JsWindow::OnIsImmersiveFullScreen(napi_env env, napi_callback_info info) +{ + WMError errCode = WMError::WM_OK; + size_t argc = 4; + napi_value argv[4] = {nullptr}; + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); + if (argc > 1) { + WLOGFE("Argc is invalid: %{public}zu", argc); + errCode = WMError::WM_ERROR_INVALID_PARAM; + } + wptr weakToken(windowToken_); + NapiAsyncTask::CompleteCallback complete = + [weakToken, errCode](napi_env env, NapiAsyncTask& task, int32_t status) { + auto weakWindow = weakToken.promote(); + if (weakWindow == nullptr) { + WLOGFE("window is nullptr"); + task.Reject(env, CreateJsError(env, static_cast(WMError::WM_ERROR_NULLPTR))); + return; + } + if (errCode != WMError::WM_OK) { + WLOGFE("window is nullptr or get invalid params"); + task.Reject(env, CreateJsError(env, static_cast(errCode))); + return; + } + + bool ret = weakWindow->IsImmersiveFullScreen(); + task.Resolve(env, CreateJsValue(env, ret)); + WLOGI("Window [%{public}u, %{public}s]. Judge immersive scene end, ret = %{public}d", + weakWindow->GetWindowId(), weakWindow->GetWindowName().c_str(), ret); + }; + + napi_value lastParam = (argc == 0) ? nullptr : (GetType(env, argv[0]) == napi_function ? argv[0] : nullptr); + napi_value result = nullptr; + NapiAsyncTask::Schedule("JsWindow::OnIsImmersiveFullScreen", + env, CreateAsyncTaskWithLastParam(env, lastParam, nullptr, std::move(complete), &result)); + return result; +} + napi_value JsWindow::OnSetWindowTouchable(napi_env env, napi_callback_info info) { WmErrorCode errCode = WmErrorCode::WM_OK; @@ -4599,6 +4644,7 @@ void BindFunctions(napi_env env, napi_value object, const char *moduleName) BindNativeFunction(env, object, "raiseAboveTarget", moduleName, JsWindow::RaiseAboveTarget); BindNativeFunction(env, object, "hideNonSystemFloatingWindows", moduleName, JsWindow::HideNonSystemFloatingWindows); + BindNativeFunction(env, object, "isImmersiveFullScreen", moduleName, JsWindow::IsImmersiveFullScreen); } } // namespace Rosen } // namespace OHOS diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.h b/interfaces/kits/napi/window_runtime/window_napi/js_window.h index a0b3e7c1b0..6087dfd961 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.h @@ -104,6 +104,7 @@ public: static napi_value ResetAspectRatio(napi_env env, napi_callback_info info); static napi_value Minimize(napi_env env, napi_callback_info info); static napi_value RaiseAboveTarget(napi_env env, napi_callback_info info); + static napi_value IsImmersiveFullScreen(napi_env env, napi_callback_info info); // colorspace, gamut static napi_value IsSupportWideGamut(napi_env env, napi_callback_info info); @@ -208,6 +209,7 @@ private: napi_value OnSetForbidSplitMove(napi_env env, napi_callback_info info); napi_value OnSnapshot(napi_env env, napi_callback_info info); napi_value OnSetSnapshotSkip(napi_env env, napi_callback_info info); + napi_value OnIsImmersiveFullScreen(napi_env env, napi_callback_info info); // animation Config napi_value OnOpacity(napi_env env, napi_callback_info info); diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 961d028c29..8176ad26a3 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -204,6 +204,7 @@ public: sptr FindSessionByAffinity(std::string affinity); void PreloadInLakeApp(const std::string& bundleName); void AddWindowDragHotArea(int32_t type, WSRect& area); + WSError IsImmersiveFullScreen(); public: std::shared_ptr GetTaskScheduler() {return taskScheduler_;}; protected: diff --git a/window_scene/session_manager/include/session_manager.h b/window_scene/session_manager/include/session_manager.h index ce886417c0..8fdf49aaf6 100644 --- a/window_scene/session_manager/include/session_manager.h +++ b/window_scene/session_manager/include/session_manager.h @@ -46,6 +46,7 @@ public: sptr GetSceneSessionManagerProxy(); sptr GetScreenSessionManagerProxy(); + WMError IsImmersiveFullScreen(); protected: SessionManager() = default; 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 36a0f151a8..5fd5f6dd09 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 @@ -87,6 +87,7 @@ public: TRANS_ID_REGISTER_COLLABORATOR, TRANS_ID_UNREGISTER_COLLABORATOR, TRANS_ID_UPDATE_TOUCHOUTSIDE_LISTENER, + TRANS_ID_IMMERSIVE_FULLSCREEN, }; virtual WSError CreateAndConnectSpecificSession(const sptr& sessionStage, @@ -133,6 +134,7 @@ public: virtual WSError RegisterIAbilityManagerCollaborator(int32_t type, const sptr &impl) = 0; virtual WSError UnregisterIAbilityManagerCollaborator(int32_t type) = 0; + virtual WSError IsImmersiveFullScreen() = 0; // interfaces of IWindowManager WMError CreateWindow(sptr& window, sptr& property, const std::shared_ptr& surfaceNode, 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 46d986824f..ecb6feafd1 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 @@ -78,6 +78,7 @@ public: WSError RegisterIAbilityManagerCollaborator(int32_t type, const sptr &impl) override; WSError UnregisterIAbilityManagerCollaborator(int32_t type) override; + WSError IsImmersiveFullScreen() override; private: template diff --git a/window_scene/session_manager/include/zidl/scene_session_manager_stub.h b/window_scene/session_manager/include/zidl/scene_session_manager_stub.h index 5be96376e0..5d566f1886 100644 --- a/window_scene/session_manager/include/zidl/scene_session_manager_stub.h +++ b/window_scene/session_manager/include/zidl/scene_session_manager_stub.h @@ -77,6 +77,7 @@ private: int HandleRegisterCollaborator(MessageParcel &data, MessageParcel &reply); int HandleUnregisterCollaborator(MessageParcel &data, MessageParcel &reply); int HandleUpdateSessionTouchOutsideListener(MessageParcel& data, MessageParcel& reply); + int HandleIsImmersiveFullScreen(MessageParcel &data, MessageParcel &reply); }; } // namespace OHOS::Rosen #endif // OHOS_ROSEN_WINDOW_SCENE_SESSION_MANAGER_STUB_H \ No newline at end of file diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index 98b3b28bf0..bdb20ab668 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -740,6 +740,43 @@ std::vector> SceneSessionManager::GetSceneSessionVectorByType return sceneSessionVector; } +WSError SceneSessionManager::IsImmersiveFullScreen() { + std::shared_lock lock(sceneSessionMapMutex_); + for (auto item = sceneSessionMap_.begin(); item != sceneSessionMap_.end(); ++item) { + auto sceneSession = item->second; + if (sceneSession == nullptr) { + WLOGFE("Session is nullptr"); + continue; + } + auto windowType = sceneSession->GetWindowType(); + if (!WindowHelper::IsMainWindow(windowType)) { + continue; + } + auto state = sceneSession->GetSessionState(); + if (state != SessionState::STATE_FOREGROUND && state != SessionState::STATE_ACTIVE) { + continue; + } + auto windowMode = sceneSession->GetWindowMode(); + if (windowMode != WindowMode::WINDOW_MODE_FULLSCREEN) { + continue; + } + auto property = sceneSession->GetSessionProperty(); + if (property == nullptr) { + WLOGFE("Property is nullptr"); + continue; + } + auto sysBarProperty = property->GetSystemBarProperty(); + if (sysBarProperty[WindowType::WINDOW_TYPE_STATUS_BAR].enable_ == false) { + WLOGFD("Current scene is immersive"); + return WSError::WS_OK; + } else { + WLOGFD("Current scene is not immersive"); + return WSError::WS_DO_NOTHING; + } + } + return WSError::WS_DO_NOTHING; +} + WSError SceneSessionManager::UpdateParentSessionForDialog(const sptr& sceneSession, sptr property) { diff --git a/window_scene/session_manager/src/session_manager.cpp b/window_scene/session_manager/src/session_manager.cpp index e9bfd22c1a..e537124e22 100644 --- a/window_scene/session_manager/src/session_manager.cpp +++ b/window_scene/session_manager/src/session_manager.cpp @@ -240,4 +240,16 @@ WMError SessionManager::BindDialogTarget(uint64_t persistentId, sptr(sceneSessionManagerProxy_->BindDialogTarget(persistentId, targetToken)); } + +WMError SessionManager::IsImmersiveFullScreen() +{ + WLOGFD("IsImmersiveFullScreen"); + std::lock_guard lock(mutex_); + GetSceneSessionManagerProxy(); + if (!sceneSessionManagerProxy_) { + WLOGFE("sceneSessionManagerProxy_ is nullptr"); + return WMError::WM_DO_NOTHING; + } + return static_cast(sceneSessionManagerProxy_->IsImmersiveFullScreen()); +} } // namespace OHOS::Rosen 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 37400a1838..969b282f2c 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 @@ -171,6 +171,25 @@ WSError SceneSessionManagerProxy::BindDialogTarget(uint64_t persistentId, sptr(ret); } +WSError SceneSessionManagerProxy::IsImmersiveFullScreen() +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + if (!data.WriteInterfaceToken(GetDescriptor())) { + WLOGFE("IsImmersiveFullScreen WriteInterfaceToken failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + + if (Remote()->SendRequest(static_cast(SceneSessionManagerMessage::TRANS_ID_IMMERSIVE_FULLSCREEN), + data, reply, option) != ERR_NONE) { + WLOGFE("SendRequest failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + int32_t ret = reply.ReadInt32(); + return static_cast(ret); +} + WSError SceneSessionManagerProxy::UpdateSessionAvoidAreaListener(int32_t& persistentId, bool haveListener) { MessageParcel data; 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 4a50038ae4..65b717dba5 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 @@ -113,6 +113,8 @@ const std::map SceneSessionManagerStub::s &SceneSessionManagerStub::HandleUnregisterCollaborator), std::make_pair(static_cast(SceneSessionManagerMessage::TRANS_ID_UPDATE_TOUCHOUTSIDE_LISTENER), &SceneSessionManagerStub::HandleUpdateSessionTouchOutsideListener), + std::make_pair(static_cast(SceneSessionManagerMessage::TRANS_ID_IMMERSIVE_FULLSCREEN), + &SceneSessionManagerStub::HandleIsImmersiveFullScreen), }; int SceneSessionManagerStub::OnRemoteRequest(uint32_t code, @@ -524,6 +526,14 @@ int SceneSessionManagerStub::HandleBindDialogTarget(MessageParcel &data, Message return ERR_NONE; } +int SceneSessionManagerStub::HandleIsImmersiveFullScreen(MessageParcel &data, MessageParcel &reply) +{ + WLOGFI("run HandleIsImmersiveFullScreen!"); + const WSError& ret = IsImmersiveFullScreen(); + reply.WriteUint32(static_cast(ret)); + return ERR_NONE; +} + int SceneSessionManagerStub::HandleNotifyDumpInfoResult(MessageParcel &data, MessageParcel &reply) { WLOGFI("HandleNotifyDumpInfoResult"); diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index 272bdc42ac..cee01133f7 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -76,6 +76,7 @@ public: WMError SetLayoutFullScreen(bool status) override; WMError SetFullScreen(bool status) override; WMError BindDialogTarget(sptr targetToken) override; + bool IsImmersiveFullScreen() const override; static void UpdateConfigurationForAll(const std::shared_ptr& configuration); static sptr GetTopWindowWithContext(const std::shared_ptr& context = nullptr); static sptr GetTopWindowWithId(uint32_t mainWinId); diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 41c8bca1bd..f0640bd127 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -1878,6 +1878,16 @@ WMError WindowSceneSessionImpl::BindDialogTarget(sptr targetToken return ret; } +bool WindowSceneSessionImpl::IsImmersiveFullScreen() const +{ + WMError ret = SessionManager::GetInstance().IsImmersiveFullScreen(); + if (ret != WMError::WM_OK) { + WLOGFE("Non immersive scene exists. errCode:%{public}d", static_cast(ret)); + return false; + } + return true; +} + WMError WindowSceneSessionImpl::SetTouchHotAreas(const std::vector& rects) { if (property_ == nullptr) { -- Gitee From 1c312f16f4f457dce992c66ee66d7a29c4b12990 Mon Sep 17 00:00:00 2001 From: db Date: Fri, 27 Oct 2023 14:18:59 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=B2=89=E6=B5=B8=E5=BC=8F=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: db --- interfaces/innerkits/wm/window.h | 4 ++-- .../napi/window_runtime/window_napi/js_window.cpp | 14 ++++++++------ .../include/scene_session_manager.h | 2 +- .../session_manager/include/session_manager.h | 2 +- .../include/zidl/scene_session_manager_interface.h | 2 +- .../include/zidl/scene_session_manager_proxy.h | 2 +- .../session_manager/src/scene_session_manager.cpp | 3 ++- .../session_manager/src/session_manager.cpp | 4 ++-- .../src/zidl/scene_session_manager_proxy.cpp | 5 +++-- .../src/zidl/scene_session_manager_stub.cpp | 4 +++- wm/include/window_scene_session_impl.h | 2 +- wm/src/window_scene_session_impl.cpp | 7 +++---- 12 files changed, 28 insertions(+), 23 deletions(-) diff --git a/interfaces/innerkits/wm/window.h b/interfaces/innerkits/wm/window.h index d83a837914..f6d4a4933e 100644 --- a/interfaces/innerkits/wm/window.h +++ b/interfaces/innerkits/wm/window.h @@ -1380,9 +1380,9 @@ public: /** * @brief Is current window immersive or not. * - * @return True means current app window is immersive, false means the opposite. + * @return Errorcode of window. */ - virtual bool IsImmersiveFullScreen() const { return false; } + virtual WMError IsImmersiveFullScreen() const { return WMError::WM_OK; } }; } } diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp index afe7178250..c5f9a7fea9 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp @@ -3265,11 +3265,13 @@ napi_value JsWindow::OnIsImmersiveFullScreen(napi_env env, napi_callback_info in task.Reject(env, CreateJsError(env, static_cast(errCode))); return; } - - bool ret = weakWindow->IsImmersiveFullScreen(); - task.Resolve(env, CreateJsValue(env, ret)); - WLOGI("Window [%{public}u, %{public}s]. Judge immersive scene end, ret = %{public}d", - weakWindow->GetWindowId(), weakWindow->GetWindowName().c_str(), ret); + bool flag = false; + WMError ret = weakWindow->IsImmersiveFullScreen(flag); + if (ret == WmErrorCode::WM_OK) { + task.Resolve(env, CreateJsValue(env, flag)); + } else { + task.Reject(env, CreateJsError(env, static_cast(ret), "Judge if immersive failed")); + } }; napi_value lastParam = (argc == 0) ? nullptr : (GetType(env, argv[0]) == napi_function ? argv[0] : nullptr); @@ -4644,7 +4646,7 @@ void BindFunctions(napi_env env, napi_value object, const char *moduleName) BindNativeFunction(env, object, "raiseAboveTarget", moduleName, JsWindow::RaiseAboveTarget); BindNativeFunction(env, object, "hideNonSystemFloatingWindows", moduleName, JsWindow::HideNonSystemFloatingWindows); - BindNativeFunction(env, object, "isImmersiveFullScreen", moduleName, JsWindow::IsImmersiveFullScreen); + BindNativeFunction(env, object, "isImmersiveFullScreenExisted", moduleName, JsWindow::IsImmersiveFullScreen); } } // namespace Rosen } // namespace OHOS diff --git a/window_scene/session_manager/include/scene_session_manager.h b/window_scene/session_manager/include/scene_session_manager.h index 8176ad26a3..69ac9f8470 100644 --- a/window_scene/session_manager/include/scene_session_manager.h +++ b/window_scene/session_manager/include/scene_session_manager.h @@ -204,7 +204,7 @@ public: sptr FindSessionByAffinity(std::string affinity); void PreloadInLakeApp(const std::string& bundleName); void AddWindowDragHotArea(int32_t type, WSRect& area); - WSError IsImmersiveFullScreen(); + WSError IsImmersiveFullScreen(bool& flag); public: std::shared_ptr GetTaskScheduler() {return taskScheduler_;}; protected: diff --git a/window_scene/session_manager/include/session_manager.h b/window_scene/session_manager/include/session_manager.h index 8fdf49aaf6..42ab0ab830 100644 --- a/window_scene/session_manager/include/session_manager.h +++ b/window_scene/session_manager/include/session_manager.h @@ -46,7 +46,7 @@ public: sptr GetSceneSessionManagerProxy(); sptr GetScreenSessionManagerProxy(); - WMError IsImmersiveFullScreen(); + WMError IsImmersiveFullScreen(bool& flag); protected: SessionManager() = default; 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 5fd5f6dd09..cab38ef360 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 @@ -134,7 +134,7 @@ public: virtual WSError RegisterIAbilityManagerCollaborator(int32_t type, const sptr &impl) = 0; virtual WSError UnregisterIAbilityManagerCollaborator(int32_t type) = 0; - virtual WSError IsImmersiveFullScreen() = 0; + virtual WSError IsImmersiveFullScreen(bool& flag) = 0; // interfaces of IWindowManager WMError CreateWindow(sptr& window, sptr& property, const std::shared_ptr& surfaceNode, 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 ecb6feafd1..2b7a24b7b9 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 @@ -78,7 +78,7 @@ public: WSError RegisterIAbilityManagerCollaborator(int32_t type, const sptr &impl) override; WSError UnregisterIAbilityManagerCollaborator(int32_t type) override; - WSError IsImmersiveFullScreen() override; + WSError IsImmersiveFullScreen(bool& flag) override; private: template diff --git a/window_scene/session_manager/src/scene_session_manager.cpp b/window_scene/session_manager/src/scene_session_manager.cpp index bdb20ab668..77c3838f08 100644 --- a/window_scene/session_manager/src/scene_session_manager.cpp +++ b/window_scene/session_manager/src/scene_session_manager.cpp @@ -740,7 +740,7 @@ std::vector> SceneSessionManager::GetSceneSessionVectorByType return sceneSessionVector; } -WSError SceneSessionManager::IsImmersiveFullScreen() { +WSError SceneSessionManager::IsImmersiveFullScreen(bool& flag) { std::shared_lock lock(sceneSessionMapMutex_); for (auto item = sceneSessionMap_.begin(); item != sceneSessionMap_.end(); ++item) { auto sceneSession = item->second; @@ -768,6 +768,7 @@ WSError SceneSessionManager::IsImmersiveFullScreen() { auto sysBarProperty = property->GetSystemBarProperty(); if (sysBarProperty[WindowType::WINDOW_TYPE_STATUS_BAR].enable_ == false) { WLOGFD("Current scene is immersive"); + flag = true; return WSError::WS_OK; } else { WLOGFD("Current scene is not immersive"); diff --git a/window_scene/session_manager/src/session_manager.cpp b/window_scene/session_manager/src/session_manager.cpp index e537124e22..949b43950f 100644 --- a/window_scene/session_manager/src/session_manager.cpp +++ b/window_scene/session_manager/src/session_manager.cpp @@ -241,7 +241,7 @@ WMError SessionManager::BindDialogTarget(uint64_t persistentId, sptr(sceneSessionManagerProxy_->BindDialogTarget(persistentId, targetToken)); } -WMError SessionManager::IsImmersiveFullScreen() +WMError SessionManager::IsImmersiveFullScreen(bool& flag) { WLOGFD("IsImmersiveFullScreen"); std::lock_guard lock(mutex_); @@ -250,6 +250,6 @@ WMError SessionManager::IsImmersiveFullScreen() WLOGFE("sceneSessionManagerProxy_ is nullptr"); return WMError::WM_DO_NOTHING; } - return static_cast(sceneSessionManagerProxy_->IsImmersiveFullScreen()); + return static_cast(sceneSessionManagerProxy_->IsImmersiveFullScreen(flag)); } } // namespace OHOS::Rosen 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 969b282f2c..d36948c1e2 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 @@ -171,11 +171,11 @@ WSError SceneSessionManagerProxy::BindDialogTarget(uint64_t persistentId, sptr(ret); } -WSError SceneSessionManagerProxy::IsImmersiveFullScreen() +WSError SceneSessionManagerProxy::IsImmersiveFullScreen(bool& flag) { MessageParcel data; MessageParcel reply; - MessageOption option(MessageOption::TF_SYNC); + MessageOption option; if (!data.WriteInterfaceToken(GetDescriptor())) { WLOGFE("IsImmersiveFullScreen WriteInterfaceToken failed"); return WSError::WS_ERROR_IPC_FAILED; @@ -186,6 +186,7 @@ WSError SceneSessionManagerProxy::IsImmersiveFullScreen() WLOGFE("SendRequest failed"); return WSError::WS_ERROR_IPC_FAILED; } + flag = reply.ReadBool(); int32_t ret = reply.ReadInt32(); return static_cast(ret); } 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 65b717dba5..31587e7799 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 @@ -529,7 +529,9 @@ int SceneSessionManagerStub::HandleBindDialogTarget(MessageParcel &data, Message int SceneSessionManagerStub::HandleIsImmersiveFullScreen(MessageParcel &data, MessageParcel &reply) { WLOGFI("run HandleIsImmersiveFullScreen!"); - const WSError& ret = IsImmersiveFullScreen(); + bool flag = false; + const WSError& ret = IsImmersiveFullScreen(flag); + reply.WriteBool(flag); reply.WriteUint32(static_cast(ret)); return ERR_NONE; } diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index cee01133f7..3e34859624 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -76,7 +76,7 @@ public: WMError SetLayoutFullScreen(bool status) override; WMError SetFullScreen(bool status) override; WMError BindDialogTarget(sptr targetToken) override; - bool IsImmersiveFullScreen() const override; + bool IsImmersiveFullScreen(bool& flag) const override; static void UpdateConfigurationForAll(const std::shared_ptr& configuration); static sptr GetTopWindowWithContext(const std::shared_ptr& context = nullptr); static sptr GetTopWindowWithId(uint32_t mainWinId); diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index f0640bd127..c6c26e56c5 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -1878,14 +1878,13 @@ WMError WindowSceneSessionImpl::BindDialogTarget(sptr targetToken return ret; } -bool WindowSceneSessionImpl::IsImmersiveFullScreen() const +WMError WindowSceneSessionImpl::IsImmersiveFullScreen(bool& flag) const { - WMError ret = SessionManager::GetInstance().IsImmersiveFullScreen(); + WMError ret = SessionManager::GetInstance().IsImmersiveFullScreen(flag); if (ret != WMError::WM_OK) { WLOGFE("Non immersive scene exists. errCode:%{public}d", static_cast(ret)); - return false; } - return true; + return ret; } WMError WindowSceneSessionImpl::SetTouchHotAreas(const std::vector& rects) -- Gitee From b8a1bf2c984041183ab8b576e19f059beff16cff Mon Sep 17 00:00:00 2001 From: db Date: Fri, 27 Oct 2023 14:22:11 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=B2=89=E6=B5=B8=E5=BC=8F=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: db --- interfaces/kits/napi/window_runtime/window_napi/js_window.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.h b/interfaces/kits/napi/window_runtime/window_napi/js_window.h index 6087dfd961..3f0c0d6ba5 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.h @@ -176,6 +176,7 @@ private: napi_value OnResetAspectRatio(napi_env env, napi_callback_info info); napi_value OnMinimize(napi_env env, napi_callback_info info); napi_value OnRaiseAboveTarget(napi_env env, napi_callback_info info); + napi_value OnIsImmersiveFullScreen(napi_env env, napi_callback_info info); // colorspace, gamut napi_value OnIsSupportWideGamut(napi_env env, napi_callback_info info); @@ -209,7 +210,6 @@ private: napi_value OnSetForbidSplitMove(napi_env env, napi_callback_info info); napi_value OnSnapshot(napi_env env, napi_callback_info info); napi_value OnSetSnapshotSkip(napi_env env, napi_callback_info info); - napi_value OnIsImmersiveFullScreen(napi_env env, napi_callback_info info); // animation Config napi_value OnOpacity(napi_env env, napi_callback_info info); -- Gitee From 9fb00a0b00d1946b6fe95877f0cc78a44f5d597c Mon Sep 17 00:00:00 2001 From: db Date: Fri, 27 Oct 2023 14:47:16 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=B2=89=E6=B5=B8=E5=BC=8F=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: db --- interfaces/innerkits/wm/window.h | 2 +- wm/include/window_scene_session_impl.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/innerkits/wm/window.h b/interfaces/innerkits/wm/window.h index f6d4a4933e..46b67e6566 100644 --- a/interfaces/innerkits/wm/window.h +++ b/interfaces/innerkits/wm/window.h @@ -1382,7 +1382,7 @@ public: * * @return Errorcode of window. */ - virtual WMError IsImmersiveFullScreen() const { return WMError::WM_OK; } + virtual WMError IsImmersiveFullScreen(bool& flag) const { return WMError::WM_OK; } }; } } diff --git a/wm/include/window_scene_session_impl.h b/wm/include/window_scene_session_impl.h index 3e34859624..6e9755c24a 100644 --- a/wm/include/window_scene_session_impl.h +++ b/wm/include/window_scene_session_impl.h @@ -76,7 +76,7 @@ public: WMError SetLayoutFullScreen(bool status) override; WMError SetFullScreen(bool status) override; WMError BindDialogTarget(sptr targetToken) override; - bool IsImmersiveFullScreen(bool& flag) const override; + WMError IsImmersiveFullScreen(bool& flag) const override; static void UpdateConfigurationForAll(const std::shared_ptr& configuration); static sptr GetTopWindowWithContext(const std::shared_ptr& context = nullptr); static sptr GetTopWindowWithId(uint32_t mainWinId); -- Gitee From b9340f8d304fea9268027a0fb8af6f2e47e1457f Mon Sep 17 00:00:00 2001 From: dengbiao Date: Fri, 27 Oct 2023 07:38:58 +0000 Subject: [PATCH 5/5] update interfaces/kits/napi/window_runtime/window_napi/js_window.cpp. Signed-off-by: dengbiao --- interfaces/kits/napi/window_runtime/window_napi/js_window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp index c5f9a7fea9..544a556a73 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window.cpp @@ -3267,7 +3267,7 @@ napi_value JsWindow::OnIsImmersiveFullScreen(napi_env env, napi_callback_info in } bool flag = false; WMError ret = weakWindow->IsImmersiveFullScreen(flag); - if (ret == WmErrorCode::WM_OK) { + if (ret == WMError::WM_OK) { task.Resolve(env, CreateJsValue(env, flag)); } else { task.Reject(env, CreateJsError(env, static_cast(ret), "Judge if immersive failed")); -- Gitee