diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 0a2039b9082780d6a7fa634e23b67b7f82e8b5da..e43a5b7db9604ab90122069304728e50caf3308f 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -112,6 +112,7 @@ enum class WindowType : uint32_t { WINDOW_TYPE_TRANSPARENT_VIEW, WINDOW_TYPE_WALLET_SWIPE_CARD, WINDOW_TYPE_SCREEN_CONTROL, + WINDOW_TYPE_FLOAT_NAVIGATION, ABOVE_APP_SYSTEM_WINDOW_END, SYSTEM_SUB_WINDOW_BASE = 2500, diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp index 7923fcb6f2e872cdd82264cd97e8831a0783fd03..5983726aca120366d4d762271b9a6bd84ef09f13 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.cpp @@ -98,6 +98,8 @@ napi_value WindowTypeInit(napi_env env) static_cast(ApiWindowType::TYPE_WALLET_SWIPE_CARD))); napi_set_named_property(env, objValue, "TYPE_SCREEN_CONTROL", CreateJsValue(env, static_cast(ApiWindowType::TYPE_SCREEN_CONTROL))); + napi_set_named_property(env, objValue, "TYPE_FLOAT_NAVIGATION", CreateJsValue(env, + static_cast(ApiWindowType::TYPE_FLOAT_NAVIGATION))); return objValue; } diff --git a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h index cea2aed65274278b52a258d01d4264fb8792bbeb..f4939cb18ac4e339a9c0142f156689c7d355c0ed 100644 --- a/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h +++ b/interfaces/kits/napi/window_runtime/window_napi/js_window_utils.h @@ -88,6 +88,7 @@ enum class ApiWindowType : uint32_t { TYPE_HANDWRITE, TYPE_WALLET_SWIPE_CARD, TYPE_SCREEN_CONTROL, + TYPE_FLOAT_NAVIGATION, TYPE_MAIN = 32, TYPE_END }; @@ -127,6 +128,7 @@ const std::map NATIVE_JS_TO_WINDOW_TYPE_MAP { { WindowType::WINDOW_TYPE_HANDWRITE, ApiWindowType::TYPE_HANDWRITE }, { WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD, ApiWindowType::TYPE_WALLET_SWIPE_CARD }, { WindowType::WINDOW_TYPE_SCREEN_CONTROL, ApiWindowType::TYPE_SCREEN_CONTROL }, + { WindowType::WINDOW_TYPE_FLOAT_NAVIGATION, ApiWindowType::TYPE_FLOAT_NAVIGATION }, { WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, ApiWindowType::TYPE_MAIN }, }; @@ -155,6 +157,7 @@ const std::map JS_TO_NATIVE_WINDOW_TYPE_MAP { { ApiWindowType::TYPE_HANDWRITE, WindowType::WINDOW_TYPE_HANDWRITE }, { ApiWindowType::TYPE_WALLET_SWIPE_CARD, WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD }, { ApiWindowType::TYPE_SCREEN_CONTROL, WindowType::WINDOW_TYPE_SCREEN_CONTROL }, + { ApiWindowType::TYPE_FLOAT_NAVIGATION, WindowType::WINDOW_TYPE_FLOAT_NAVIGATION }, { ApiWindowType::TYPE_MAIN, WindowType::WINDOW_TYPE_APP_MAIN_WINDOW }, }; diff --git a/previewer/include/wm_common.h b/previewer/include/wm_common.h index c08f9c93ab831ff5080d94329a899202fb99bdea..11990978fe81519dc171be443b5174d59dc82fad 100644 --- a/previewer/include/wm_common.h +++ b/previewer/include/wm_common.h @@ -105,6 +105,7 @@ enum class WindowType : uint32_t { WINDOW_TYPE_KEYBOARD_PANEL, WINDOW_TYPE_WALLET_SWIPE_CARD, WINDOW_TYPE_SCREEN_CONTROL, + WINDOW_TYPE_FLOAT_NAVIGATION, ABOVE_APP_SYSTEM_WINDOW_END, SYSTEM_SUB_WINDOW_BASE = 2500, diff --git a/utils/test/unittest/window_helper_test.cpp b/utils/test/unittest/window_helper_test.cpp index 8b0709dc96c3f4c52d34737a798f713071afc56f..fb9da7e8ea9d70a1c4a0cdd5351307664eb6cae9 100644 --- a/utils/test/unittest/window_helper_test.cpp +++ b/utils/test/unittest/window_helper_test.cpp @@ -224,6 +224,8 @@ HWTEST_F(WindowHelperTest, WindowType, Function | SmallTest | Level1) ASSERT_EQ(false, WindowHelper::IsSystemSubWindow(WindowType::WINDOW_TYPE_FLOAT)); ASSERT_EQ(false, WindowHelper::IsSystemSubWindow(WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD)); ASSERT_EQ(true, WindowHelper::IsSystemWindow(WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD)); + ASSERT_EQ(false, WindowHelper::IsSystemSubWindow(WindowType::WINDOW_TYPE_FLOAT_NAVIGATION)); + ASSERT_EQ(true, WindowHelper::IsSystemWindow(WindowType::WINDOW_TYPE_FLOAT_NAVIGATION)); } /** diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.cpp b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.cpp index 7b1c70c2622485b540ec14c9aed46a2640378ca6..dcc23d6ff39b8091b12ec7dd92c871b175c43de9 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.cpp +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.cpp @@ -1715,6 +1715,7 @@ napi_value SessionTypeInit(napi_env env) SetTypeProperty(objValue, env, "TYPE_TRANSPARENT_VIEW", JsSessionType::TYPE_TRANSPARENT_VIEW); SetTypeProperty(objValue, env, "TYPE_WALLET_SWIPE_CARD", JsSessionType::TYPE_WALLET_SWIPE_CARD); SetTypeProperty(objValue, env, "TYPE_SCREEN_CONTROL", JsSessionType::TYPE_SCREEN_CONTROL); + SetTypeProperty(objValue, env, "TYPE_FLOAT_NAVIGATION", JsSessionType::TYPE_FLOAT_NAVIGATION); return objValue; } diff --git a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.h b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.h index 62ac7ffc65f929fe1fe12236ba366da191dec267..03090039f6a1c467c98d409e988b260dcd36429c 100644 --- a/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.h +++ b/window_scene/interfaces/kits/napi/scene_session_manager/js_scene_utils.h @@ -67,7 +67,8 @@ enum class JsSessionType : uint32_t { TYPE_DIVIDER, TYPE_TRANSPARENT_VIEW, TYPE_WALLET_SWIPE_CARD, - TYPE_SCREEN_CONTROL + TYPE_SCREEN_CONTROL, + TYPE_FLOAT_NAVIGATION }; const std::map WINDOW_TO_JS_SESSION_TYPE_MAP { @@ -109,6 +110,7 @@ const std::map WINDOW_TO_JS_SESSION_TYPE_MAP { { WindowType::WINDOW_TYPE_TRANSPARENT_VIEW, JsSessionType::TYPE_TRANSPARENT_VIEW }, { WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD, JsSessionType::TYPE_WALLET_SWIPE_CARD }, { WindowType::WINDOW_TYPE_SCREEN_CONTROL, JsSessionType::TYPE_SCREEN_CONTROL }, + { WindowType::WINDOW_TYPE_FLOAT_NAVIGATION, JsSessionType::TYPE_FLOAT_NAVIGATION }, }; const std::map JS_SESSION_TO_WINDOW_TYPE_MAP { @@ -150,6 +152,7 @@ const std::map JS_SESSION_TO_WINDOW_TYPE_MAP { { JsSessionType::TYPE_TRANSPARENT_VIEW, WindowType::WINDOW_TYPE_TRANSPARENT_VIEW }, { JsSessionType::TYPE_WALLET_SWIPE_CARD, WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD }, { JsSessionType::TYPE_SCREEN_CONTROL, WindowType::WINDOW_TYPE_SCREEN_CONTROL }, + { JsSessionType::TYPE_FLOAT_NAVIGATION, WindowType::WINDOW_TYPE_FLOAT_NAVIGATION }, }; JsSessionType GetApiType(WindowType type); diff --git a/wm/src/window_impl.cpp b/wm/src/window_impl.cpp index d9b5c64c507fb633dea5db62c78dcbc5400d4ba6..d2bbba04c439af3197b2f6909adcea5914cf4ab7 100644 --- a/wm/src/window_impl.cpp +++ b/wm/src/window_impl.cpp @@ -4132,8 +4132,7 @@ void WindowImpl::SetDefaultOption() case WindowType::WINDOW_TYPE_SEARCHING_BAR: case WindowType::WINDOW_TYPE_SCREENSHOT: case WindowType::WINDOW_TYPE_GLOBAL_SEARCH: - case WindowType::WINDOW_TYPE_DIALOG: - case WindowType::WINDOW_TYPE_WALLET_SWIPE_CARD: { + case WindowType::WINDOW_TYPE_DIALOG: { property_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING); break; } diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index eddaec18ab385f957b39af3361221c84b72123d9..d356c45469fc995da521e127562b4d789c64d2d5 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -1404,7 +1404,8 @@ void WindowSceneSessionImpl::SetDefaultProperty() case WindowType::WINDOW_TYPE_INPUT_METHOD_STATUS_BAR: case WindowType::WINDOW_TYPE_DOCK_SLICE: case WindowType::WINDOW_TYPE_STATUS_BAR: - case WindowType::WINDOW_TYPE_NAVIGATION_BAR: { + case WindowType::WINDOW_TYPE_NAVIGATION_BAR: + case WindowType::WINDOW_TYPE_FLOAT_NAVIGATION: { property_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING); property_->SetFocusable(false); break; diff --git a/wm/test/unittest/window_scene_session_impl_test.cpp b/wm/test/unittest/window_scene_session_impl_test.cpp index 9940814679dc0a2f1e607887cb6a47bf2ad8d56e..fd91ba792a675dfac03030fdfdc7dd60c999b39e 100644 --- a/wm/test/unittest/window_scene_session_impl_test.cpp +++ b/wm/test/unittest/window_scene_session_impl_test.cpp @@ -450,6 +450,32 @@ HWTEST_F(WindowSceneSessionImplTest, CreateAndConnectSpecificSession10, Function ASSERT_EQ(error, WMError::WM_OK); } +/** + * @tc.name: CreateAndConnectSpecificSession11 + * @tc.desc: CreateAndConnectSpecificSession + * @tc.type: FUNC + */ +HWTEST_F(WindowSceneSessionImplTest, CreateAndConnectSpecificSession11, Function | SmallTest | Level2) +{ + if (!SceneBoardJudgement::IsSceneBoardEnabled()) { + GTEST_SKIP() << "SceneBoard is not enabled, skipping test."; + } + sptr option = sptr::MakeSptr(); + option->SetWindowName("CreateAndConnectSpecificSession10"); + sptr windowSceneSession = sptr::MakeSptr(option); + + windowSceneSession->SetWindowType(WindowType::WINDOW_TYPE_FLOAT_NAVIGATION); + ASSERT_EQ(WMError::WM_ERROR_NULLPTR, windowSceneSession->CreateAndConnectSpecificSession()); + windowSceneSession->property_->SetPersistentId(102); + windowSceneSession->property_->SetParentPersistentId(100); + windowSceneSession->property_->SetParentId(100); + SessionInfo sessionInfo = { "CreateTestBundle", "CreateTestModule", "CreateTestAbility" }; + sptr session = sptr::MakeSptr(sessionInfo); + + ASSERT_EQ(WMError::WM_OK, windowSceneSession->Create(abilityContext_, session)); + ASSERT_EQ(WMError::WM_OK, windowSceneSession->Destroy(true)); +} + /** * @tc.name: RecoverAndReconnectSceneSession * @tc.desc: RecoverAndReconnectSceneSession