diff --git a/frameworks/proxy/event_handler/include/input_manager_impl.h b/frameworks/proxy/event_handler/include/input_manager_impl.h index b5d4c75e36e010827ca2c9318df5a991eeeb6d6c..d6ad3d11d459a931eab947b2c8103fd66f6f737c 100644 --- a/frameworks/proxy/event_handler/include/input_manager_impl.h +++ b/frameworks/proxy/event_handler/include/input_manager_impl.h @@ -140,7 +140,7 @@ public: int32_t SetHoverScrollState(bool state); int32_t GetHoverScrollState(bool &state); - int32_t SetPointerVisible(bool visible); + int32_t SetPointerVisible(bool visible, int32_t priority); bool IsPointerVisible(); int32_t SetPointerStyle(int32_t windowId, const PointerStyle& pointerStyle); int32_t GetPointerStyle(int32_t windowId, PointerStyle &pointerStyle); diff --git a/frameworks/proxy/event_handler/src/input_manager_impl.cpp b/frameworks/proxy/event_handler/src/input_manager_impl.cpp index 0c3d98edf3a4ce7b96b563f27a7344475295c0c4..18e0f86b998522293f5f95b178fb950dfbc5192d 100644 --- a/frameworks/proxy/event_handler/src/input_manager_impl.cpp +++ b/frameworks/proxy/event_handler/src/input_manager_impl.cpp @@ -1097,12 +1097,12 @@ int32_t InputManagerImpl::GetHoverScrollState(bool &state) #endif // OHOS_BUILD_ENABLE_POINTER } -int32_t InputManagerImpl::SetPointerVisible(bool visible) +int32_t InputManagerImpl::SetPointerVisible(bool visible, int32_t priority) { CALL_INFO_TRACE; #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) std::lock_guard guard(mtx_); - int32_t ret = MULTIMODAL_INPUT_CONNECT_MGR->SetPointerVisible(visible); + int32_t ret = MULTIMODAL_INPUT_CONNECT_MGR->SetPointerVisible(visible, priority); if (ret != RET_OK) { MMI_HILOGE("Set pointer visible failed, ret:%{public}d", ret); } diff --git a/frameworks/proxy/events/src/input_manager.cpp b/frameworks/proxy/events/src/input_manager.cpp index 389245533d335891a66293f848cbca8c4d8f4068..1910e4cf474643f7d41314ceabca451aa63db7be 100644 --- a/frameworks/proxy/events/src/input_manager.cpp +++ b/frameworks/proxy/events/src/input_manager.cpp @@ -268,9 +268,9 @@ int32_t InputManager::GetHoverScrollState(bool &state) return InputMgrImpl.GetHoverScrollState(state); } -int32_t InputManager::SetPointerVisible(bool visible) +int32_t InputManager::SetPointerVisible(bool visible, int32_t priority) { - return InputMgrImpl.SetPointerVisible(visible); + return InputMgrImpl.SetPointerVisible(visible, priority); } bool InputManager::IsPointerVisible() diff --git a/interfaces/native/innerkits/proxy/include/input_manager.h b/interfaces/native/innerkits/proxy/include/input_manager.h index e405a8c02d0026cccd88ad3c9825c328c0e86d13..1456cfac1191f0d7a424ee78ef721412eb81f716 100644 --- a/interfaces/native/innerkits/proxy/include/input_manager.h +++ b/interfaces/native/innerkits/proxy/include/input_manager.h @@ -437,7 +437,7 @@ public: * @return Returns 0 if success; returns a non-0 value otherwise. * @since 9 */ - int32_t SetPointerVisible(bool visible); + int32_t SetPointerVisible(bool visible, int32_t priority = 0); /** * @brief Checks whether the pointer icon is visible. diff --git a/service/connect_manager/include/i_multimodal_input_connect.h b/service/connect_manager/include/i_multimodal_input_connect.h index d85037bacb9765efe49bcae292a0ecf2fe9f13e8..18dba35d255e1ce1889ae997d316d8c2c51bd307 100644 --- a/service/connect_manager/include/i_multimodal_input_connect.h +++ b/service/connect_manager/include/i_multimodal_input_connect.h @@ -64,7 +64,7 @@ public: virtual int32_t GetMousePrimaryButton(int32_t &primaryButton) = 0; virtual int32_t SetHoverScrollState(bool state) = 0; virtual int32_t GetHoverScrollState(bool &state) = 0; - virtual int32_t SetPointerVisible(bool visible) = 0; + virtual int32_t SetPointerVisible(bool visible, int32_t priority) = 0; virtual int32_t IsPointerVisible(bool &visible) = 0; virtual int32_t MarkProcessed(int32_t eventType, int32_t eventId) = 0; virtual int32_t SetPointerColor(int32_t color) = 0; diff --git a/service/connect_manager/include/multimodal_input_connect_manager.h b/service/connect_manager/include/multimodal_input_connect_manager.h index 48526ca9a7f44c9efc362ba3c0805a5167e8bafb..8a117bded7a5095edcdfb8ac647f0e9a784f5e30 100644 --- a/service/connect_manager/include/multimodal_input_connect_manager.h +++ b/service/connect_manager/include/multimodal_input_connect_manager.h @@ -59,7 +59,7 @@ public: int32_t GetMousePrimaryButton(int32_t &primaryButton); int32_t SetHoverScrollState(bool state); int32_t GetHoverScrollState(bool &state); - int32_t SetPointerVisible(bool visible); + int32_t SetPointerVisible(bool visible, int32_t priority); int32_t IsPointerVisible(bool &visible); int32_t MarkProcessed(int32_t eventType, int32_t eventId); int32_t SetPointerColor(int32_t color); diff --git a/service/connect_manager/include/multimodal_input_connect_proxy.h b/service/connect_manager/include/multimodal_input_connect_proxy.h index 77d5e76d1f071997cbe6a4ab46a5b48dd7dddd0b..e71b8b9f695c9ae46fc81439b53bf9b16183ebd8 100644 --- a/service/connect_manager/include/multimodal_input_connect_proxy.h +++ b/service/connect_manager/include/multimodal_input_connect_proxy.h @@ -53,7 +53,7 @@ public: int32_t GetMousePrimaryButton(int32_t &primaryButton) override; int32_t SetHoverScrollState(bool state) override; int32_t GetHoverScrollState(bool &state) override; - int32_t SetPointerVisible(bool visible) override; + int32_t SetPointerVisible(bool visible, int32_t priority) override; int32_t IsPointerVisible(bool &visible) override; int32_t MarkProcessed(int32_t eventType, int32_t eventId) override; int32_t SetPointerColor(int32_t color) override; diff --git a/service/connect_manager/src/multimodal_input_connect_manager.cpp b/service/connect_manager/src/multimodal_input_connect_manager.cpp index 62054d181654aee9aeaaa36c4a5df6511e5da2b9..27d2169a43197ceafdbfbdee1a94adbcbb5859a1 100644 --- a/service/connect_manager/src/multimodal_input_connect_manager.cpp +++ b/service/connect_manager/src/multimodal_input_connect_manager.cpp @@ -229,10 +229,10 @@ int32_t MultimodalInputConnectManager::GetHoverScrollState(bool &state) return multimodalInputConnectService_->GetHoverScrollState(state); } -int32_t MultimodalInputConnectManager::SetPointerVisible(bool visible) +int32_t MultimodalInputConnectManager::SetPointerVisible(bool visible, int32_t priority) { CHKPR(multimodalInputConnectService_, INVALID_HANDLER_ID); - return multimodalInputConnectService_->SetPointerVisible(visible); + return multimodalInputConnectService_->SetPointerVisible(visible, priority); } int32_t MultimodalInputConnectManager::IsPointerVisible(bool &visible) diff --git a/service/connect_manager/src/multimodal_input_connect_proxy.cpp b/service/connect_manager/src/multimodal_input_connect_proxy.cpp index 84a4b00ae9ee12d5acb972877894303afbe87845..2e1a58390673a8b09d232f56a47f3f56761bf3b4 100644 --- a/service/connect_manager/src/multimodal_input_connect_proxy.cpp +++ b/service/connect_manager/src/multimodal_input_connect_proxy.cpp @@ -490,7 +490,7 @@ int32_t MultimodalInputConnectProxy::GetHoverScrollState(bool &state) return RET_OK; } -int32_t MultimodalInputConnectProxy::SetPointerVisible(bool visible) +int32_t MultimodalInputConnectProxy::SetPointerVisible(bool visible, int32_t priority) { CALL_DEBUG_ENTER; MessageParcel data; @@ -500,6 +500,7 @@ int32_t MultimodalInputConnectProxy::SetPointerVisible(bool visible) } WRITEBOOL(data, visible, ERR_INVALID_VALUE); + WRITEINT32(data, priority, ERR_INVALID_VALUE); MessageParcel reply; MessageOption option; diff --git a/service/connect_manager/src/multimodal_input_connect_stub.cpp b/service/connect_manager/src/multimodal_input_connect_stub.cpp index d7c75a7c07a71d042018df8a3603dd48588b59d7..f447a373f9ab4d5dd3ed2eeb990d30d9f6091c6b 100644 --- a/service/connect_manager/src/multimodal_input_connect_stub.cpp +++ b/service/connect_manager/src/multimodal_input_connect_stub.cpp @@ -691,7 +691,9 @@ int32_t MultimodalInputConnectStub::StubSetPointerVisible(MessageParcel& data, M CALL_DEBUG_ENTER; bool visible = false; READBOOL(data, visible, IPC_PROXY_DEAD_OBJECT_ERR); - int32_t ret = SetPointerVisible(visible); + int32_t priority = 0; + READINT32(data, priority, IPC_PROXY_DEAD_OBJECT_ERR); + int32_t ret = SetPointerVisible(visible, priority); if (ret != RET_OK) { MMI_HILOGE("Call SetPointerVisible failed ret:%{public}d", ret); return ret; diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index fd4f2166584e52f9a6088fcf9e80fac12ff13ca1..9e48ef963fa5b3a7746bf9a37fa14fb8b2ce7caf 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -196,11 +196,11 @@ int32_t ServerMsgHandler::OnInjectPointerEventExt(const std::shared_ptrHandlePointerEvent(pointerEvent); CHKPR(pointerEvent, ERROR_NULL_POINTER); if (pointerEvent->HasFlag(InputEvent::EVENT_FLAG_HIDE_POINTER)) { - IPointerDrawingManager::GetInstance()->SetPointerVisible(getpid(), false); + IPointerDrawingManager::GetInstance()->SetPointerVisible(getpid(), false, 0); } else if (((pointerEvent->GetPointerAction() < PointerEvent::POINTER_ACTION_PULL_DOWN) || (pointerEvent->GetPointerAction() > PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW)) && !IPointerDrawingManager::GetInstance()->IsPointerVisible()) { - IPointerDrawingManager::GetInstance()->SetPointerVisible(getpid(), true); + IPointerDrawingManager::GetInstance()->SetPointerVisible(getpid(), true, 0); } #endif // OHOS_BUILD_ENABLE_POINTER break; diff --git a/service/module_loader/include/mmi_service.h b/service/module_loader/include/mmi_service.h index 51f5b3a607c978035cfefa78853f15af5360d7be..db82efb7caecdfc25640e98f7d6acfd8237d92fe 100644 --- a/service/module_loader/include/mmi_service.h +++ b/service/module_loader/include/mmi_service.h @@ -65,7 +65,7 @@ public: int32_t GetMousePrimaryButton(int32_t &primaryButton) override; int32_t SetHoverScrollState(bool state) override; int32_t GetHoverScrollState(bool &state) override; - int32_t SetPointerVisible(bool visible) override; + int32_t SetPointerVisible(bool visible, int32_t priority) override; int32_t IsPointerVisible(bool &visible) override; int32_t MarkProcessed(int32_t eventType, int32_t eventId) override; int32_t SetPointerColor(int32_t color) override; diff --git a/service/module_loader/src/mmi_service.cpp b/service/module_loader/src/mmi_service.cpp index b80ee6b02a784b582154ca2ef2b98a1843f50d77..f8c3fcddc98b5529fbbf403cecef2ef28565f8f5 100644 --- a/service/module_loader/src/mmi_service.cpp +++ b/service/module_loader/src/mmi_service.cpp @@ -622,12 +622,12 @@ int32_t MMIService::GetMousePrimaryButton(int32_t &primaryButton) return RET_OK; } -int32_t MMIService::SetPointerVisible(bool visible) +int32_t MMIService::SetPointerVisible(bool visible, int32_t priority) { CALL_INFO_TRACE; #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) int32_t ret = delegateTasks_.PostSyncTask(std::bind(&IPointerDrawingManager::SetPointerVisible, - IPointerDrawingManager::GetInstance(), GetCallingPid(), visible)); + IPointerDrawingManager::GetInstance(), GetCallingPid(), visible, priority)); if (ret != RET_OK) { MMI_HILOGE("Set pointer visible failed,return %{public}d", ret); return ret; diff --git a/service/window_manager/include/i_pointer_drawing_manager.h b/service/window_manager/include/i_pointer_drawing_manager.h index fe5c6d9becc84e8f1c8c7607c5832b56e34738e9..ce066d742e9c3909ce79eaf39931014e95f4e900 100644 --- a/service/window_manager/include/i_pointer_drawing_manager.h +++ b/service/window_manager/include/i_pointer_drawing_manager.h @@ -42,7 +42,7 @@ public: return true; } virtual void DeletePointerVisible(int32_t pid) {} - virtual int32_t SetPointerVisible(int32_t pid, bool visible) + virtual int32_t SetPointerVisible(int32_t pid, bool visible, int32_t priority) { return 0; } diff --git a/service/window_manager/include/pointer_drawing_manager.h b/service/window_manager/include/pointer_drawing_manager.h index ac95264951474c9e4b1553e45fc3850853928b7c..466919b9ff2bacc75450ba55d936ec73090bb334 100644 --- a/service/window_manager/include/pointer_drawing_manager.h +++ b/service/window_manager/include/pointer_drawing_manager.h @@ -59,7 +59,7 @@ public: int32_t SetPointerColor(int32_t color) override; int32_t GetPointerColor() override; void DeletePointerVisible(int32_t pid) override; - int32_t SetPointerVisible(int32_t pid, bool visible) override; + int32_t SetPointerVisible(int32_t pid, bool visible, int32_t priority) override; bool GetPointerVisible(int32_t pid) override; int32_t SetPointerStyle(int32_t pid, int32_t windowId, PointerStyle pointerStyle) override; int32_t ClearWindowPointerStyle(int32_t pid, int32_t windowId) override; diff --git a/service/window_manager/src/input_windows_manager.cpp b/service/window_manager/src/input_windows_manager.cpp index fd51b6bdecd0c0896b404193d37d8d0ce548909e..592edf346e532394d8475a9ba2d474b2fe74a6cc 100644 --- a/service/window_manager/src/input_windows_manager.cpp +++ b/service/window_manager/src/input_windows_manager.cpp @@ -721,7 +721,7 @@ void InputWindowsManager::SetWindowPointerStyle(WindowArea area, int32_t pid, in void InputWindowsManager::UpdateWindowPointerVisible(int32_t pid) { bool visible = IPointerDrawingManager::GetInstance()->GetPointerVisible(pid); - IPointerDrawingManager::GetInstance()->SetPointerVisible(pid, visible); + IPointerDrawingManager::GetInstance()->SetPointerVisible(pid, visible, 0); } #ifdef OHOS_BUILD_ENABLE_POINTER diff --git a/service/window_manager/src/pointer_drawing_manager.cpp b/service/window_manager/src/pointer_drawing_manager.cpp index 9b109d8f2178d4960adcfb94adef31499705eb71..df53b6917a290f2f5bc77cb59108ed0baa70214e 100644 --- a/service/window_manager/src/pointer_drawing_manager.cpp +++ b/service/window_manager/src/pointer_drawing_manager.cpp @@ -1090,7 +1090,7 @@ void PointerDrawingManager::UpdatePointerDevice(bool hasPointerDevice, bool isPo if (!isHotPlug) { pointerVisible = (pointerVisible && IsPointerVisible()); } - SetPointerVisible(getpid(), pointerVisible); + SetPointerVisible(getpid(), pointerVisible, 0); } else { DeletePointerVisible(getpid()); } @@ -1213,10 +1213,10 @@ bool PointerDrawingManager::GetPointerVisible(int32_t pid) return true; } -int32_t PointerDrawingManager::SetPointerVisible(int32_t pid, bool visible) +int32_t PointerDrawingManager::SetPointerVisible(int32_t pid, bool visible, int32_t priority) { - MMI_HILOGI("pid:%{public}d,visible:%{public}s", pid, visible ? "true" : "false"); - if (WinMgr->GetExtraData().appended && visible) { + MMI_HILOGI("pid:%{public}d,visible:%{public}s,priority:%{public}d", pid, visible ? "true" : "false", priority); + if (WinMgr->GetExtraData().appended && visible && priority == 0) { MMI_HILOGE("current is drag state, can not set pointer visible"); return RET_ERR; } diff --git a/service/window_manager/test/input_windows_manager_test.cpp b/service/window_manager/test/input_windows_manager_test.cpp index 0f61d859ae4c2903704df5b0a46a95d9b6380203..a79c37fd8a9ce5b70c25ee43da72a92c0bf10287 100644 --- a/service/window_manager/test/input_windows_manager_test.cpp +++ b/service/window_manager/test/input_windows_manager_test.cpp @@ -636,7 +636,7 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateWindowPointerVis int32_t pid = 123; bool visible = true; IPointerDrawingManager::GetInstance()->GetPointerVisible(pid); - IPointerDrawingManager::GetInstance()->SetPointerVisible(pid, visible); + IPointerDrawingManager::GetInstance()->SetPointerVisible(pid, visible, 0); ASSERT_NO_FATAL_FAILURE(WinMgr->UpdateWindowPointerVisible(pid)); } diff --git a/service/window_manager/test/pointer_drawing_manager_test.cpp b/service/window_manager/test/pointer_drawing_manager_test.cpp index 822197e7c73a1bbcdfc2b9d69be809e2b03da34d..90a068b90f7dce34a82e907f5c30d1f9d19a0bea 100644 --- a/service/window_manager/test/pointer_drawing_manager_test.cpp +++ b/service/window_manager/test/pointer_drawing_manager_test.cpp @@ -330,11 +330,11 @@ HWTEST_F(PointerDrawingManagerTest, InputWindowsManagerTest_SetPointerVisible_00 std::shared_ptr pointerDrawingManager = std::static_pointer_cast(IPointerDrawingManager::GetInstance()); for (int32_t i = 1; i < 102; i++) { - pointerDrawingManager->SetPointerVisible(i, false); + pointerDrawingManager->SetPointerVisible(i, false, 0); } bool visible = pointerDrawingManager->GetPointerVisible(1); EXPECT_EQ(visible, true); - pointerDrawingManager->SetPointerVisible(11, true); + pointerDrawingManager->SetPointerVisible(11, true, 0); visible = pointerDrawingManager->GetPointerVisible(11); EXPECT_EQ(visible, true); }