diff --git a/frameworks/proxy/event_handler/include/input_manager_impl.h b/frameworks/proxy/event_handler/include/input_manager_impl.h index b3453e44a29f0d90e682678c61477868f4e3b189..2e29d9fba9b7b89b8fa5145331bbfd622f8818c7 100644 --- a/frameworks/proxy/event_handler/include/input_manager_impl.h +++ b/frameworks/proxy/event_handler/include/input_manager_impl.h @@ -99,7 +99,7 @@ public: #if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) void OnPointerEvent(std::shared_ptr pointerEvent); #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH - int32_t PackDisplayData(NetPacket &pkt, DisplayGroupInfo &displayGroupInfo); + int32_t PackDisplayData(NetPacket &pkt, const DisplayGroupInfo &displayGroupInfo); int32_t AddMonitor(std::function)> monitor); int32_t AddMonitor(std::function)> monitor); @@ -251,15 +251,15 @@ public: void UnsubscribeInputActive(int32_t subscribeId); private: - int32_t PackWindowInfo(NetPacket &pkt, DisplayGroupInfo &displayGroupInfo); + int32_t PackWindowInfo(NetPacket &pkt, const DisplayGroupInfo &displayGroupInfo); int32_t PackWindowGroupInfo(NetPacket &pkt); int32_t PackDisplayInfo(NetPacket &pkt, DisplayGroupInfo &displayGroupInfo); int32_t PackUiExtentionWindowInfo(const std::vector& windowsInfo, NetPacket &pkt); void PrintWindowInfo(const std::vector &windowsInfo); void PrintForemostThreeWindowInfo(const std::vector &windowsInfo); - void PrintDisplayInfo(DisplayGroupInfo &displayGroupInfo); + void PrintDisplayInfo(const DisplayGroupInfo &displayGroupInfo); void PrintWindowGroupInfo(); - int32_t SendDisplayInfo(DisplayGroupInfo &displayGroupInfo); + int32_t SendDisplayInfo(const DisplayGroupInfo &displayGroupInfo); int32_t SendWindowInfo(); void SendWindowAreaInfo(WindowArea area, int32_t pid, int32_t windowId); bool IsValiadWindowAreas(const std::vector &windows); diff --git a/frameworks/proxy/event_handler/src/input_manager_impl.cpp b/frameworks/proxy/event_handler/src/input_manager_impl.cpp index d420f20b78a7e4a02145069b8445894e1f8419d5..b6c5b577e81be697cd0b7710eeef042693dbc566 100644 --- a/frameworks/proxy/event_handler/src/input_manager_impl.cpp +++ b/frameworks/proxy/event_handler/src/input_manager_impl.cpp @@ -141,40 +141,49 @@ int32_t InputManagerImpl::UpdateDisplayInfo(const DisplayGroupInfo &displayGroup MMI_HILOGE("Failed to initialize MMI client"); return RET_ERR; } - std::lock_guard guard(mtx_); - displayGroupInfoArray_.clear(); - if (displayGroupInfo.windowsInfo.size() < MAX_WINDOW_SIZE) { - windowGroupInfo_.windowsInfo.clear(); + { + std::lock_guard guard(mtx_); + if (displayGroupInfo.windowsInfo.size() < MAX_WINDOW_SIZE) { + windowGroupInfo_.windowsInfo.clear(); + } + displayGroupInfoArray_.clear(); + displayGroupInfoArray_.emplace_back(displayGroupInfo); } - displayGroupInfo_ = displayGroupInfo; - int32_t ret = SendDisplayInfo(displayGroupInfo_); - displayGroupInfoArray_.emplace_back(displayGroupInfo_); + int32_t ret = SendDisplayInfo(displayGroupInfo); if (ret != RET_OK) { MMI_HILOGE("Failed to send display information to service"); return ret; } - PrintDisplayInfo(displayGroupInfo_); + PrintDisplayInfo(displayGroupInfo); return RET_OK; } -int32_t InputManagerImpl::UpdateDisplayInfo(const std::vector &displayGroupInfo) +int32_t InputManagerImpl::UpdateDisplayInfo(const std::vector &displayGroupInfos) { CALL_DEBUG_ENTER; if (!MMIEventHdl.InitClient()) { MMI_HILOGE("Failed to initialize MMI client"); return RET_ERR; } - std::lock_guard guard(mtx_); - displayGroupInfoArray_.clear(); - for (auto &item : displayGroupInfo) { - displayGroupInfo_ = item; - int32_t ret = SendDisplayInfo(displayGroupInfo_); - displayGroupInfoArray_.emplace_back(displayGroupInfo_); + { + std::lock_guard guard(mtx_); + displayGroupInfoArray_.clear(); + size_t cnt = 0; + for (auto &it : displayGroupInfos) { + displayGroupInfoArray_.emplace_back(it); + cnt += it.windowsInfo.size(); + } + if (cnt < MAX_WINDOW_SIZE) { + windowGroupInfo_.windowsInfo.clear(); + } + } + for (const auto &item : displayGroupInfos) { + int32_t ret = SendDisplayInfo(item); if (ret != RET_OK) { MMI_HILOGE("Failed to send display information to service"); return ret; } - PrintDisplayInfo(displayGroupInfo_); + PrintDisplayInfo(item); } return RET_OK; } @@ -658,7 +667,7 @@ void InputManagerImpl::OnPointerEvent(std::shared_ptr pointerEvent } #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH -int32_t InputManagerImpl::PackDisplayData(NetPacket &pkt, DisplayGroupInfo &displayGroupInfo) +int32_t InputManagerImpl::PackDisplayData(NetPacket &pkt, const DisplayGroupInfo &displayGroupInfo) { CALL_DEBUG_ENTER; pkt << displayGroupInfo.groupId << displayGroupInfo.isMainGroup << displayGroupInfo.width << displayGroupInfo.height @@ -671,7 +680,7 @@ int32_t InputManagerImpl::PackDisplayData(NetPacket &pkt, DisplayGroupInfo &disp MMI_HILOGE("Packet write windows info failed"); return RET_ERR; } - return PackDisplayInfo(pkt, displayGroupInfo); + return PackDisplayInfo(pkt, const_cast(displayGroupInfo)); } int32_t InputManagerImpl::PackWindowGroupInfo(NetPacket &pkt) @@ -744,7 +753,7 @@ int32_t InputManagerImpl::PackUiExtentionWindowInfo(const std::vector(displayGroupInfo.windowsInfo.size()); @@ -859,8 +868,10 @@ int32_t InputManagerImpl::PackDisplayInfo(NetPacket &pkt, DisplayGroupInfo &disp << item.offsetY << item.isCurrentOffScreenRendering << item.screenRealWidth << item.screenRealHeight << item.screenRealPPI << item.screenRealDPI << item.screenCombination << item.validWidth << item.validHeight << item.fixedDirection - << item.physicalWidth << item.physicalHeight << item.scalePercent << item.expandHeight - << item.oneHandX << item.oneHandY << item.uniqueId; + << item.physicalWidth << item.physicalHeight << item.scalePercent << item.expandHeight << item.uniqueId; +#ifdef OHOS_BUILD_ENABLE_ONE_HAND_MODE + pkt << item.oneHandX << item.oneHandY; +#endif #ifdef OHOS_BUILD_ENABLE_VKEYBOARD pkt << item.pointerActiveWidth << item.pointerActiveHeight; #endif // OHOS_BUILD_ENABLE_VKEYBOARD @@ -931,7 +942,7 @@ void InputManagerImpl::PrintForemostThreeWindowInfo(const std::vectorsecond; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); bool ret = handler.CheckTwoFingerGestureAction(); EXPECT_FALSE(ret); handler.twoFingerGesture_.touches[0].x = 30; @@ -1122,7 +1127,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckTwoFingerGestureActio displayInfo.width = 150; displayInfo.height = 300; displayInfo.uniq = "default0"; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); handler.twoFingerGesture_.touches[0].y = 200; handler.twoFingerGesture_.touches[1].x = 30; bool ret = handler.CheckTwoFingerGestureAction(); @@ -1291,11 +1301,16 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_ConvertVPToPX_004, TestSiz DisplayInfo displayInfo; displayInfo.dpi = -10; displayInfo.uniq = "default0"; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); int32_t ret = handler.ConvertVPToPX(vp); ASSERT_EQ(ret, 0); displayInfo.dpi = 160; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); ret = handler.ConvertVPToPX(vp); ASSERT_EQ(ret, 0); } @@ -4048,7 +4063,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_ConvertVPToPX_002, TestSiz displayInfo.width = 4; displayInfo.height = 5; displayInfo.dpi = -1; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); ret = handler.ConvertVPToPX(vp); ASSERT_EQ(ret, 0); } @@ -4072,7 +4092,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_ConvertVPToPX_003, TestSiz displayInfo.width = 4; displayInfo.height = 5; displayInfo.dpi = 160; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); int32_t ret = handler.ConvertVPToPX(vp); ASSERT_EQ(ret, 0); } @@ -4104,7 +4129,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckTwoFingerGestureActio displayInfo.width = 4; displayInfo.height = 5; displayInfo.dpi = -1; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); bool ret = handler.CheckTwoFingerGestureAction(); EXPECT_FALSE(ret); } @@ -4136,7 +4166,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckTwoFingerGestureActio displayInfo.width = 40; displayInfo.height = 50; displayInfo.dpi = -1; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); bool ret = handler.CheckTwoFingerGestureAction(); EXPECT_FALSE(ret); } @@ -4168,7 +4203,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckTwoFingerGestureActio displayInfo.width = 40; displayInfo.height = 50; displayInfo.dpi = -1; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); bool ret = handler.CheckTwoFingerGestureAction(); EXPECT_FALSE(ret); } @@ -5577,8 +5617,13 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureDownEv windowInfo.id = 0; windowInfo.windowType = WINDOW_INPUT_METHOD_TYPE; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; ASSERT_NO_FATAL_FAILURE(handler.HandleKnuckleGestureDownEvent(touchEvent)); @@ -5613,7 +5658,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckTwoFingerGestureActio displayInfo.height = 2720; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; handler.twoFingerGesture_.touches[0].x = 600; handler.twoFingerGesture_.touches[0].y = 600; @@ -5674,7 +5724,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_ConvertVPToPX_006, TestSiz displayInfo.dpi = -1; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; int32_t ret = handler.ConvertVPToPX(vp); @@ -5710,8 +5765,13 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckKnuckleCondition_001, windowInfo.id = 0; windowInfo.windowType = WINDOW_INPUT_METHOD_TYPE; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; touchEvent->SetTargetDisplayId(1); @@ -5765,8 +5825,13 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckKnuckleCondition_002, windowInfo.id = 0; windowInfo.windowType = WINDOW_INPUT_METHOD_TYPE; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; touchEvent->SetTargetDisplayId(0); @@ -5807,7 +5872,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureTouchM displayInfo.id = 0; displayInfo.direction = DIRECTION0; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; @@ -5853,7 +5923,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureTouchM displayInfo.id = 0; displayInfo.direction = DIRECTION0; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; @@ -5899,7 +5974,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureTouchM displayInfo.id = 0; displayInfo.direction = DIRECTION0; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; @@ -5942,7 +6022,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureTouchM displayInfo.id = 0; displayInfo.direction = DIRECTION0; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; @@ -5988,7 +6073,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureTouchM displayInfo.id = 0; displayInfo.direction = DIRECTION0; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; @@ -6033,7 +6123,12 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_HandleKnuckleGestureTouchM displayInfo.id = 0; displayInfo.direction = DIRECTION0; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; KeyCommandHandler handler; @@ -6215,8 +6310,13 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckSpecialRepeatKey_002, auto inputWindowsManager = std::make_shared(); WindowInfo windowInfo; windowInfo.id = 0; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager->displayGroupInfo_.focusWindowId = 0; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.focusWindowId = 0; UDSServer udsServer; udsServer.idxPidMap_.insert(std::make_pair(0, 1)); SessionPtr sessionPtr = std::make_shared(repeatKey.ability.bundleName, 0, 0, 0, 0); @@ -6252,8 +6352,13 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckSpecialRepeatKey_003, auto inputWindowsManager = std::make_shared(); WindowInfo windowInfo; windowInfo.id = 0; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager->displayGroupInfo_.focusWindowId = 0; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.focusWindowId = 0; UDSServer udsServer; udsServer.idxPidMap_.insert(std::make_pair(0, 1)); SessionPtr sessionPtr = std::make_shared(repeatKey.ability.bundleName, 0, 0, 0, 0); @@ -6289,8 +6394,13 @@ HWTEST_F(KeyCommandHandlerTest, KeyCommandHandlerTest_CheckSpecialRepeatKey_004, auto inputWindowsManager = std::make_shared(); WindowInfo windowInfo; windowInfo.id = 0; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager->displayGroupInfo_.focusWindowId = 0; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.focusWindowId = 0; UDSServer udsServer; udsServer.idxPidMap_.insert(std::make_pair(0, 1)); SessionPtr sessionPtr = std::make_shared(repeatKey.ability.bundleName, 0, 0, 0, 0); diff --git a/service/key_command/test/long_press_subscriber_handler_test.cpp b/service/key_command/test/long_press_subscriber_handler_test.cpp index 72a71ed456f2d4abaa7395fa8200d5fedd15d4b1..9f2b5b8a763cc4503929795a923608aae12d5d0d 100644 --- a/service/key_command/test/long_press_subscriber_handler_test.cpp +++ b/service/key_command/test/long_press_subscriber_handler_test.cpp @@ -1067,7 +1067,12 @@ HWTEST_F(LongPressSubscribeHandlerTest, LongPressSubscribeHandlerTest_StartFinge displayInfo.height = 2720; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; LONG_PRESS_EVENT_HANDLER->fingerGesture_.touches[0].x = 600; LONG_PRESS_EVENT_HANDLER->fingerGesture_.touches[0].y = 600; @@ -1095,7 +1100,12 @@ HWTEST_F(LongPressSubscribeHandlerTest, LongPressSubscribeHandlerTest_CheckFinge displayInfo.height = 2720; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; LONG_PRESS_EVENT_HANDLER->fingerGesture_.touches[0].x = 600; LONG_PRESS_EVENT_HANDLER->fingerGesture_.touches[0].y = 600; @@ -1141,7 +1151,12 @@ HWTEST_F(LongPressSubscribeHandlerTest, LongPressSubscribeHandlerTest_CheckFinge displayInfo.height = 2720; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; int32_t fingerCount = 2; LONG_PRESS_EVENT_HANDLER->fingerGesture_.touches[0].x = 600; @@ -1189,7 +1204,12 @@ HWTEST_F(LongPressSubscribeHandlerTest, LongPressSubscribeHandlerTest_CheckFinge displayInfo.height = 2720; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; int32_t fingerCount = 2; LONG_PRESS_EVENT_HANDLER->fingerGesture_.touches[0].x = 600; @@ -1266,7 +1286,12 @@ HWTEST_F(LongPressSubscribeHandlerTest, LongPressSubscribeHandlerTest_ConvertVPT displayInfo.dpi = -1; displayInfo.uniq = "default0"; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); IInputWindowsManager::instance_ = inputWindowsManager; int32_t ret = LONG_PRESS_EVENT_HANDLER->ConvertVPToPX(vp); ASSERT_EQ(ret, 0); @@ -1384,7 +1409,12 @@ HWTEST_F(LongPressSubscribeHandlerTest, LongPressSubscribeHandlerTest_NotifySubs WindowInfo windowInfo; windowInfo.id = 10000; auto inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); IInputWindowsManager::instance_ = inputWindowsManager; auto pointerEvent = SetupSingleFingerDownEvent(); diff --git a/service/libinput_adapter/src/libinput_adapter.cpp b/service/libinput_adapter/src/libinput_adapter.cpp index 347893ec57ada98ddcad4a4ddb943c4fdd4a86d2..aafc6568e98ce69cb28ad77a78439a71b89ea2d7 100644 --- a/service/libinput_adapter/src/libinput_adapter.cpp +++ b/service/libinput_adapter/src/libinput_adapter.cpp @@ -361,7 +361,8 @@ bool LibinputAdapter::GetIsCaptureMode() InputWindowsManager* inputWindowsManager = static_cast(WIN_MGR.get()); if (inputWindowsManager != nullptr) { - DisplayGroupInfo displayGroupInfo = inputWindowsManager->GetDisplayGroupInfo(); + DisplayGroupInfo displayGroupInfo; + inputWindowsManager->GetDisplayGroupInfo(displayGroupInfo); bool isFloating = false; for (auto &windowInfo : displayGroupInfo.windowsInfo) { if (windowInfo.windowNameType == WINDOW_NAME_TYPE_SCHREENSHOT) { @@ -1360,7 +1361,8 @@ bool LibinputAdapter::IsCursorInCastWindow() if (inputWindowsManager == nullptr) { return false; } - DisplayGroupInfo displayGroupInfo = inputWindowsManager->GetDisplayGroupInfo(); + DisplayGroupInfo displayGroupInfo; + inputWindowsManager->GetDisplayGroupInfo(displayGroupInfo); for (auto &windowInfo : displayGroupInfo.windowsInfo) { if (windowInfo.windowType == CAST_WINDOW_TYPE) { auto mouseInfo = WIN_MGR->GetMouseInfo(); @@ -1972,5 +1974,6 @@ void LibinputAdapter::OnDeviceRemoved(std::string path) OnEventHandler(); } } +///add } // namespace MMI } // namespace OHOS diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 0f092e665b77b767e609c7a43624511a6695e508..e1ee476eb7c743c7e39380f2e5960fb190723e7e 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -755,15 +755,17 @@ int32_t ServerMsgHandler::ReadDisplayInfo(NetPacket &pkt, DisplayGroupInfo &disp >> info.offsetX >> info.offsetY >> info.isCurrentOffScreenRendering >> info.screenRealWidth >> info.screenRealHeight >> info.screenRealPPI >> info.screenRealDPI >> info.screenCombination >> info.validWidth >> info.validHeight >> info.fixedDirection - >> info.physicalWidth >> info.physicalHeight >> info.scalePercent >> info.expandHeight - >> info.oneHandX >> info.oneHandY >> info.uniqueId; + >> info.physicalWidth >> info.physicalHeight >> info.scalePercent >> info.expandHeight >> info.uniqueId; +#ifdef OHOS_BUILD_ENABLE_ONE_HAND_MODE + pkt >> info.oneHandX >> info.oneHandY; +#endif // OHOS_BUILD_ENABLE_ONE_HAND_MODE #ifdef OHOS_BUILD_ENABLE_VKEYBOARD pkt >> info.pointerActiveWidth >> info.pointerActiveHeight; #endif // OHOS_BUILD_ENABLE_VKEYBOARD - pkt >> info.groupId; if (PRODUCT_TYPE != PRODUCT_TYPE_PC) { info.uniq = "default" + std::to_string(info.id); } + pkt >> info.groupId; displayGroupInfo.displaysInfo.push_back(info); if (pkt.ChkRWError()) { MMI_HILOGE("Packet read display info failed"); @@ -1140,7 +1142,7 @@ int32_t ServerMsgHandler::OnSubscribeLongPressEvent(IUdsServer *server, int32_t CHKPR(sess, ERROR_NULL_POINTER); return LONG_PRESS_EVENT_HANDLER->SubscribeLongPressEvent(sess, subscribeId, longPressRequest); } - + int32_t ServerMsgHandler::OnUnsubscribeLongPressEvent(IUdsServer *server, int32_t pid, int32_t subscribeId) { CALL_DEBUG_ENTER; diff --git a/service/window_manager/include/input_windows_manager.h b/service/window_manager/include/input_windows_manager.h index 5cbea4cdf6080b243cb2906815165a6661459852..8e3fb86de51aac62c724a9f1af9a55143308b912 100644 --- a/service/window_manager/include/input_windows_manager.h +++ b/service/window_manager/include/input_windows_manager.h @@ -113,10 +113,12 @@ public: void UpdateAndAdjustMouseLocation(int32_t& displayId, double& x, double& y, bool isRealData = true); #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH #ifdef OHOS_BUILD_ENABLE_POINTER - const DisplayGroupInfo& GetDisplayGroupInfo(int32_t groupId = -1); - std::vector GetDisplayInfoVector(int32_t groupId = -1) const; - const std::vector GetWindowInfoVector(int32_t groupId = -1) const; - int32_t GetFocusWindowId(int32_t groupId = -1) const; + void GetDisplayGroupInfo(DisplayGroupInfo& displayGroupInfoCur, int32_t groupId = DEFAULT_GROUP_ID); + std::vector GetDisplayInfoVector(int32_t groupId = DEFAULT_GROUP_ID) const; + const std::vector GetWindowInfoVector(int32_t groupId = DEFAULT_GROUP_ID) const; + int32_t GetFocusWindowId(int32_t groupId = DEFAULT_GROUP_ID) const; + + int32_t GetLogicalPositionX(int32_t id); int32_t GetLogicalPositionY(int32_t id); Direction GetLogicalPositionDirection(int32_t id); @@ -213,8 +215,10 @@ public: #endif // OHOS_BUILD_ENABLE_ANCO int32_t SetPixelMapData(int32_t infoId, void *pixelMap); - void CleanInvalidPiexMap(int32_t groupId = -1); + + void CleanInvalidPiexMap(int32_t groupId = DEFAULT_GROUP_ID); void HandleWindowPositionChange(const DisplayGroupInfo &displayGroupInfo); + void SendCancelEventWhenWindowChange(int32_t pointerId, int32_t groupId = DEFAULT_GROUP_ID); #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR bool IsSupported(); #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR @@ -242,7 +246,7 @@ private: void PrintDisplayGroupInfo(const DisplayGroupInfo displayGroupInfo); void PrintDisplayInfo(const DisplayInfo displayInfo); void PrintWindowGroupInfo(const WindowGroupInfo &windowGroupInfo); - void PrintWindowNavbar(int32_t groupId = -1); + void PrintWindowNavbar(int32_t groupId = DEFAULT_GROUP_ID); void CheckFocusWindowChange(const DisplayGroupInfo &displayGroupInfo); void CheckZorderWindowChange(const std::vector &oldWindowsInfo, const std::vector &newWindowsInfo); @@ -284,9 +288,9 @@ private: int32_t UpdateMouseTarget(std::shared_ptr pointerEvent); void UpdatePointerEvent(int32_t logicalX, int32_t logicalY, const std::shared_ptr& pointerEvent, const WindowInfo& touchWindow); - void NotifyPointerToWindow(int32_t groupId = -1); + void NotifyPointerToWindow(int32_t groupId = DEFAULT_GROUP_ID); void OnSessionLost(SessionPtr session); - void InitPointerStyle(int32_t groupId = -1); + void InitPointerStyle(int32_t groupId = DEFAULT_GROUP_ID); #endif // OHOS_BUILD_ENABLE_POINTER #if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) int32_t UpdatePoinerStyle(int32_t pid, int32_t windowId, PointerStyle pointerStyle); @@ -301,7 +305,7 @@ private: const std::shared_ptr& pointerEvent); void CheckUIExtentionWindowPointerHotArea(int32_t logicalX, int32_t logicalY, const std::vector& windowInfos, int32_t& windowId); - std::optional GetWindowInfo(int32_t logicalX, int32_t logicalY, int32_t groupId = -1); + std::optional GetWindowInfo(int32_t logicalX, int32_t logicalY, int32_t groupId = DEFAULT_GROUP_ID); bool IsInsideDisplay(const DisplayInfo& displayInfo, double physicalX, double physicalY); bool CalculateLayout(const DisplayInfo& displayInfo, const Vector2D &physical, Vector2D& layout); void FindPhysicalDisplay(const DisplayInfo& displayInfo, double& physicalX, @@ -316,10 +320,10 @@ private: int32_t logicalX, int32_t logicalY); void UpdatePointerChangeAreas(const DisplayGroupInfo &displayGroupInfo); #ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING - void AdjustDisplayRotation(int32_t groupId = -1); + void AdjustDisplayRotation(int32_t groupId = DEFAULT_GROUP_ID); void SetPointerEvent(int32_t pointerAction, std::shared_ptr pointerEvent); void DispatchPointerCancel(int32_t displayId); - void AdjustDragPosition(int32_t groupId = -1); + void AdjustDragPosition(int32_t groupId = DEFAULT_GROUP_ID); #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH @@ -357,7 +361,7 @@ void HandleOneHandMode(const DisplayInfo &displayInfo, std::shared_ptr pointerEvent, const WindowInfo* touchWindow); - void DispatchTouch(int32_t pointerAction, int32_t groupId = -1); + void DispatchTouch(int32_t pointerAction, int32_t groupId = DEFAULT_GROUP_ID); const std::shared_ptr FindPhysicalDisplayInfo(const std::string& uniq) const; bool GetPhysicalDisplayCoord(struct libinput_event_touch* touch, const DisplayInfo& info, EventTouch& touchInfo, bool isNeedClear = false); @@ -392,7 +396,7 @@ void HandleOneHandMode(const DisplayInfo &displayInfo, std::shared_ptr pointerEvent); #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_CROWN - void UpdateDisplayMode(int32_t groupId = -1); + void UpdateDisplayMode(int32_t groupId = DEFAULT_GROUP_ID); void HandleValidDisplayChange(const DisplayGroupInfo &displayGroupInfo); void ResetPointerPositionIfOutValidDisplay(const DisplayGroupInfo &displayGroupInfo); void CancelMouseEvent(); @@ -401,7 +405,7 @@ void HandleOneHandMode(const DisplayInfo &displayInfo, std::shared_ptr keyEvent, int32_t focusWindowId, int32_t groupId = -1); + void UpdateKeyEventDisplayId(std::shared_ptr keyEvent, int32_t focusWindowId, int32_t groupId = DEFAULT_GROUP_ID); bool OnDisplayRemovedOrCombinationChanged(const DisplayGroupInfo &displayGroupInfo); void ChangeWindowArea(int32_t x, int32_t y, WindowInfo &windowInfo); void ResetPointerPosition(const DisplayGroupInfo &displayGroupInfo); @@ -431,7 +435,9 @@ private: DisplayGroupInfo& GetMainDisplayGroupInfo(); const DisplayGroupInfo& GetConstMainDisplayGroupInfo() const; const DisplayGroupInfo& FindDisplayGroupInfo(int32_t displayId) const; - + void RotateScreen90(const DisplayInfo& info, PhysicalCoordinate& coord) const; + void InitDisplayGroupInfo(DisplayGroupInfo &displayGroupInfo); + void UpdateGroupInfo(); private: UDSServer* udsServer_ { nullptr }; #if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) @@ -460,6 +466,7 @@ private: std::weak_ptr touchGestureMgr_; #endif // defined(OHOS_BUILD_ENABLE_TOUCH) && defined(OHOS_BUILD_ENABLE_MONITOR) std::map displayGroupInfoMap_; + std::map displayGroupInfoMapTmp_; bool mainGroupExisted_; DisplayGroupInfo displayGroupInfoTmp_; std::mutex tmpInfoMutex_; @@ -470,14 +477,18 @@ private: std::map> windowsPerDisplayMap_; PointerStyle lastPointerStyle_ {.id = -1}; PointerStyle dragPointerStyle_ {.id = -1}; - MouseLocation mouseLocation_ = { -1, -1 }; + MouseLocation mouseLocation_ = { -1, 0, 0 }; + std::map mouseLocationMap_; CursorPosition cursorPos_ {}; std::map cursorPosMap_; + + std::map touchItemDownInfos_; std::map> touchItemDownInfosMap_; std::map> windowsHotAreas_; std::map>> windowsHotAreasMap_; + InputDisplayBindHelper bindInfo_; struct CaptureModeInfo { int32_t windowId { -1 }; @@ -528,7 +539,10 @@ private: #endif // OHOS_BUILD_ENABLE_TOUCH bool IsFoldable_ { false }; int32_t timerId_ { -1 }; + int32_t lastDpi_ { 0 }; + std::map lastDpiMap_; std::shared_ptr GetlastPointerEvent(); + void SetDragFlagByPointer(std::shared_ptr lastPointerEvent); std::mutex mtx_; std::atomic_bool isHPR_ { false }; std::mutex oneHandMtx_; diff --git a/service/window_manager/src/input_windows_manager.cpp b/service/window_manager/src/input_windows_manager.cpp index f0a025f8a25a1949250dc8fff43bb9791a4744fd..0ac7ad9bde790cee5693ed987175f3d557f6feef 100644 --- a/service/window_manager/src/input_windows_manager.cpp +++ b/service/window_manager/src/input_windows_manager.cpp @@ -89,6 +89,7 @@ constexpr int32_t CAST_INPUT_DEVICEID { 0xAAAAAAFF }; constexpr int32_t CAST_SCREEN_DEVICEID { 0xAAAAAAFE }; constexpr int32_t DEFAULT_DPI { 0 }; constexpr int32_t DEFAULT_POSITION { 0 }; +constexpr int32_t MAIN_GROUPID { 0 }; } // namespace enum PointerHotArea : int32_t { @@ -153,18 +154,23 @@ InputWindowsManager::InputWindowsManager() : bindInfo_(BIND_CFG_FILE_NAME) lastTouchWindowInfo_.windowType = 0; lastTouchWindowInfo_.windowNameType = 0; #endif // OHOS_BUILD_ENABLE_TOUCH - { - std::lock_guard lock(tmpInfoMutex_); - displayGroupInfoTmp_.focusWindowId = -1; - displayGroupInfoTmp_.width = 0; - displayGroupInfoTmp_.height = 0; - } - { - std::unique_lock lock(displayGroupInfoMtx); - displayGroupInfo_.focusWindowId = -1; - displayGroupInfo_.width = 0; - displayGroupInfo_.height = 0; - } + std::unique_lock lock(displayGroupInfoMtx); + displayGroupInfo_.groupId = MAIN_GROUPID; + displayGroupInfo_.isMainGroup = true; + displayGroupInfo_.focusWindowId = -1; + displayGroupInfo_.width = 0; + displayGroupInfo_.height = 0; + displayGroupInfoMap_[MAIN_GROUPID] = displayGroupInfo_; + displayGroupInfoMapTmp_[MAIN_GROUPID] = displayGroupInfo_; + captureModeInfoMap_[MAIN_GROUPID] = captureModeInfo_; + pointerDrawFlagMap_[MAIN_GROUPID] = pointerDrawFlag_; + mouseLocationMap_[MAIN_GROUPID] = mouseLocation_; + windowsPerDisplayMap_[MAIN_GROUPID] = windowsPerDisplay_; + lastPointerEventforWindowChangeMap_[MAIN_GROUPID] = lastPointerEventforWindowChange_; + displayModeMap_[MAIN_GROUPID] = displayMode_; + lastDpiMap_[MAIN_GROUPID] = lastDpi_; + CursorPosition cursorPos = {}; + cursorPosMap_[MAIN_GROUPID] = cursorPos; } InputWindowsManager::~InputWindowsManager() @@ -280,11 +286,15 @@ const std::vector InputWindowsManager::GetWindowGroupInfoByDisplayId if (displayId < 0) { return GetWindowInfoVector(groupId); } - const auto& iter = windowsPerDisplayMap_.find(groupId); - const std::map& windowsPerDisplayTmp = - (iter != windowsPerDisplayMap_.end()) ? iter->second : windowsPerDisplay_; - const auto& it = windowsPerDisplayTmp.find(displayId); - if (it == windowsPerDisplayTmp.end()) { + std::map& windowsPerDisplay = + const_cast &>(windowsPerDisplay_); + { + std::unique_lock lock(displayGroupInfoMtx); + const auto& iter = windowsPerDisplayMap_.find(groupId); + windowsPerDisplay = (iter != windowsPerDisplayMap_.end()) ? iter->second : windowsPerDisplay_; + } + const auto& it = windowsPerDisplay.find(displayId); + if (it == windowsPerDisplay.end()) { MMI_HILOGD("GetWindowInfo displayId:%{public}d is null from windowGroupInfo_", displayId); return GetWindowInfoVector(groupId); } @@ -298,9 +308,10 @@ const std::vector InputWindowsManager::GetWindowGroupInfoByDisplayId bool InputWindowsManager::CheckAppFocused(int32_t pid) { int32_t focusWindowId = DEFAULT_VALUE; - for (auto &item : displayGroupInfoMap_) { + std::unique_lock lock(displayGroupInfoMtx); + for (const auto& item : displayGroupInfoMap_) { focusWindowId = item.second.focusWindowId; - for (auto windowinfo : item.second.windowsInfo) { + for (const auto& windowinfo : item.second.windowsInfo) { if ((windowinfo.id == focusWindowId) && (windowinfo.pid == pid)) { return true; } else if (windowinfo.id == focusWindowId) { @@ -523,39 +534,41 @@ void InputWindowsManager::FoldScreenRotation(std::shared_ptr point DisplayGroupInfo& InputWindowsManager::FindTargetDisplayGroupInfo(int32_t displayId) { - for (auto& it : displayGroupInfoMap_) { - for (auto& item : it.second.displaysInfo) { - if (item.id == displayId) { - return it.second; + { + std::unique_lock lock(displayGroupInfoMtx); + for (auto& it : displayGroupInfoMap_) { + for (const auto& item : it.second.displaysInfo) { + if (item.id == displayId) { + return it.second; + } } } } - return displayGroupInfo_; + return GetMainDisplayGroupInfo(); } int32_t InputWindowsManager::FindDisplayGroupId(int32_t displayId) const { - int32_t groupId = DEFAULT_GROUP_ID; - for (auto& it : displayGroupInfoMap_) { - for (auto& item : it.second.displaysInfo) { + std::unique_lock lock(displayGroupInfoMtx); + for (const auto& it : displayGroupInfoMap_) { + for (const auto& item : it.second.displaysInfo) { if (item.id == displayId) { - groupId = it.second.groupId; - break; + return it.second.groupId; } } - if (groupId != DEFAULT_GROUP_ID) { - break; - } } - return groupId; + return DEFAULT_GROUP_ID; } DisplayGroupInfo& InputWindowsManager::GetMainDisplayGroupInfo() { - for (auto &it : displayGroupInfoMap_) - if (it.second.isMainGroup) { - return it.second; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto& iter = displayGroupInfoMap_.find(MAIN_GROUPID); + if (iter != displayGroupInfoMap_.end()) { + return iter->second; } + } return displayGroupInfo_; } @@ -631,6 +644,7 @@ void InputWindowsManager::HandleKeyEventWindowId(std::shared_ptr keyEv void InputWindowsManager::ReissueEvent(std::shared_ptr keyEvent, int32_t focusWindowId) { + CHKPV(keyEvent); if (keyEvent->GetKeyAction() != KeyEvent::KEY_ACTION_CANCEL && focusWindowId_ != -1 && focusWindowId_ != focusWindowId && keyEvent->IsRepeatKey()) { auto keyEventReissue = std::make_shared(*keyEvent); @@ -788,23 +802,22 @@ std::vector> InputWindowsManager::GetPidAndUpdate int32_t InputWindowsManager::GetWindowPid(int32_t windowId) const { CALL_DEBUG_ENTER; - int32_t windowPid = INVALID_PID; - for (auto groupItem : displayGroupInfoMap_) { + std::unique_lock lock(displayGroupInfoMtx); + for (const auto &groupItem : displayGroupInfoMap_) { for (const auto &item : groupItem.second.windowsInfo) { MMI_HILOGD("Get windowId:%{public}d", item.id); if (item.id == windowId) { - windowPid = item.pid; - return windowPid; + return item.pid; } for (const auto &uiExtentionWindow : item.uiExtentionWindowInfo) { - if (uiExtentionWindow.id == windowId) { - windowPid = uiExtentionWindow.pid; - return windowPid; - } + CHKCC(uiExtentionWindow.id == windowId); + return uiExtentionWindow.pid; + + } } } - return windowPid; + return INVALID_PID; } int32_t InputWindowsManager::GetWindowPid(int32_t windowId, const std::vector &windowsInfo) const @@ -853,10 +866,10 @@ void InputWindowsManager::CheckZorderWindowChange(const std::vector void InputWindowsManager::UpdateDisplayIdAndName() { + MMI_HILOGI("UpdateDisplayIdAndName In."); using IdNames = std::set>; IdNames newInfo; - auto displayGroupInfo = GetMainDisplayGroupInfo(); - auto DisplaysInfo = GetDisplayInfoVector(displayGroupInfo.groupId); + auto DisplaysInfo = GetDisplayInfoVector(MAIN_GROUPID); for (const auto &item : DisplaysInfo) { newInfo.insert(std::make_pair(item.uniqueId, item.uniq)); } @@ -907,16 +920,29 @@ void InputWindowsManager::UpdateCaptureMode(const DisplayGroupInfo &displayGroup MMI_HILOGW("windowsInfo is empty"); return; } - if (captureModeInfoMap_[displayGroupInfo.groupId].isCaptureMode && !WindowInfo.empty() && + CaptureModeInfo captureModeInfo; + { + std::unique_lock lock(displayGroupInfoMtx); + auto itr = captureModeInfoMap_.find(displayGroupInfo.groupId); + if (itr != captureModeInfoMap_.end()) { + captureModeInfo = itr->second; + } + } + if (captureModeInfo.isCaptureMode && !WindowInfo.empty() && ((focusWindowId != displayGroupInfo.focusWindowId) || (WindowInfo[0].id != displayGroupInfo.windowsInfo[0].id))) { - captureModeInfoMap_[displayGroupInfo.groupId].isCaptureMode = false; + CaptureModeInfo captureModeInfo; + { + std::unique_lock lock(displayGroupInfoMtx); + captureModeInfoMap_[displayGroupInfo.groupId].isCaptureMode = false; + } } } bool InputWindowsManager::IsFocusedSession(int32_t session) const { if (session >= 0) { + std::unique_lock lock(displayGroupInfoMtx); for (auto &curGroupInfo : displayGroupInfoMap_) { if (session == GetWindowPid(curGroupInfo.second.focusWindowId)) { return true; @@ -930,30 +956,46 @@ void InputWindowsManager::UpdateWindowInfo(const WindowGroupInfo &windowGroupInf { CALL_DEBUG_ENTER; PrintWindowGroupInfo(windowGroupInfo); -#ifdef OHOS_BUILD_ENABLE_ANCO - if (windowGroupInfo.windowsInfo.size() == SHELL_WINDOW_COUNT && IsAncoWindow(windowGroupInfo.windowsInfo[0])) { - return UpdateShellWindow(windowGroupInfo.windowsInfo[0]); - } -#endif // OHOS_BUILD_ENABLE_ANCO - DisplayGroupInfo displayGroupInfo; - { - std::lock_guard lock(tmpInfoMutex_); - displayGroupInfo = displayGroupInfoTmp_; - } - displayGroupInfo.focusWindowId = windowGroupInfo.focusWindowId; - + std::map> groupWindows; for (const auto &item : windowGroupInfo.windowsInfo) { - UpdateDisplayInfoByIncrementalInfo(item, displayGroupInfo); + groupWindows[item.groupId].emplace_back(item); } - + WindowGroupInfo windowGroupInfoTmp; + windowGroupInfoTmp.focusWindowId = windowGroupInfo.focusWindowId; + windowGroupInfoTmp.displayId = windowGroupInfo.displayId; + for (const auto &it : groupWindows) { + windowGroupInfoTmp.windowsInfo = it.second; +#ifdef OHOS_BUILD_ENABLE_ANCO + if (windowGroupInfoTmp.windowsInfo.size() == SHELL_WINDOW_COUNT + && IsAncoWindow(windowGroupInfoTmp.windowsInfo[0])) { + return UpdateShellWindow(windowGroupInfoTmp.windowsInfo[0]); + } +#endif // OHOS_BUILD_ENABLE_ANCO + int32_t groupId = FindDisplayGroupId(windowGroupInfoTmp.windowsInfo[0].displayId); + DisplayGroupInfo displayGroupInfo; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto &iter = displayGroupInfoMapTmp_.find(groupId); + displayGroupInfo = (iter != displayGroupInfoMapTmp_.end()) ? iter->second : GetMainDisplayGroupInfo(); + } + + for (const auto &item : windowGroupInfoTmp.windowsInfo) { + UpdateDisplayInfoByIncrementalInfo(item, displayGroupInfo); + } + #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - pointerDrawFlagMap_[displayGroupInfo.groupId] = NeedUpdatePointDrawFlag(windowGroupInfo.windowsInfo); + bool pointDrawFlag = NeedUpdatePointDrawFlag(windowGroupInfoTmp.windowsInfo); + { + std::unique_lock lock(displayGroupInfoMtx); + pointerDrawFlagMap_[displayGroupInfo.groupId] = pointDrawFlag; + } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING - + #ifdef OHOS_BUILD_ENABLE_ANCO - UpdateWindowInfoExt(windowGroupInfo, displayGroupInfo); + UpdateWindowInfoExt(windowGroupInfoTmp, displayGroupInfo); #endif // OHOS_BUILD_ENABLE_ANCO - UpdateDisplayInfoExtIfNeed(displayGroupInfo, false); + UpdateDisplayInfoExtIfNeed(displayGroupInfo, false); + } } void InputWindowsManager::UpdateDisplayInfoExtIfNeed(DisplayGroupInfo &displayGroupInfo, bool needUpdateDisplayExt) @@ -1042,15 +1084,22 @@ void InputWindowsManager::UpdateWindowsInfoPerDisplay(const DisplayGroupInfo &di return lwindow.zOrder > rwindow.zOrder; }); } + std::map& windowsPerDisplayTmp = windowsPerDisplay_; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto& iter = windowsPerDisplayMap_.find(groupId); + windowsPerDisplayTmp = (iter != windowsPerDisplayMap_.end()) ? iter->second : windowsPerDisplay_; + } for (const auto &item : windowsPerDisplay) { int32_t displayId = item.first; - if (windowsPerDisplayMap_[groupId].find(displayId) != windowsPerDisplayMap_[groupId].end()) { - CheckZorderWindowChange(windowsPerDisplayMap_[groupId][displayId].windowsInfo, item.second.windowsInfo); + if (windowsPerDisplayTmp.find(displayId) != windowsPerDisplayTmp.end()) { + CheckZorderWindowChange(windowsPerDisplayTmp[displayId].windowsInfo, item.second.windowsInfo); } } - - windowsPerDisplayMap_[groupId] = windowsPerDisplay; - + { + std::unique_lock lock(displayGroupInfoMtx); + windowsPerDisplayMap_[groupId] = windowsPerDisplay; + } #if defined(OHOS_BUILD_ENABLE_TOUCH) && defined(OHOS_BUILD_ENABLE_MONITOR) for (const auto &window : displayGroupInfo.windowsInfo) { if (window.windowType == static_cast(Rosen::WindowType::WINDOW_TYPE_TRANSPARENT_VIEW)) { @@ -1072,7 +1121,10 @@ WINDOW_UPDATE_ACTION InputWindowsManager::UpdateWindowInfo(DisplayGroupInfo &dis } MMI_HILOGD("Current action is:%{public}d", action); #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) - pointerDrawFlagMap_[displayGroupInfo.groupId] = NeedUpdatePointDrawFlag(displayGroupInfo.windowsInfo); + { + std::unique_lock lock(displayGroupInfoMtx); + pointerDrawFlagMap_[displayGroupInfo.groupId] = NeedUpdatePointDrawFlag(displayGroupInfo.windowsInfo); + } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING std::sort(displayGroupInfo.windowsInfo.begin(), displayGroupInfo.windowsInfo.end(), [](const WindowInfo &lwindow, const WindowInfo &rwindow) -> bool { @@ -1248,6 +1300,7 @@ void InputWindowsManager::HandleValidDisplayChange(const DisplayGroupInfo &displ CursorPosition InputWindowsManager::GetCursorPos(const DisplayGroupInfo &displayGroupInfo) { int32_t groupId = displayGroupInfo.groupId; + std::unique_lock lock(displayGroupInfoMtx); if ((cursorPosMap_[groupId].displayId < 0) && !displayGroupInfoMap_[groupId].displaysInfo.empty()) { DisplayInfo displayInfo = displayGroupInfo.displaysInfo[0]; #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR @@ -1260,7 +1313,6 @@ CursorPosition InputWindowsManager::GetCursorPos(const DisplayGroupInfo &display return cursorPosMap_[groupId]; } - void InputWindowsManager::ResetPointerPositionIfOutValidDisplay(const DisplayGroupInfo &displayGroupInfo) { if (displayGroupInfo.displaysInfo.empty()) { @@ -1297,11 +1349,24 @@ void InputWindowsManager::ResetPointerPositionIfOutValidDisplay(const DisplayGro double curX = validWidth * HALF_RATIO; double curY = validHeight * HALF_RATIO; UpdateAndAdjustMouseLocation(cursorDisplayId, curX, curY); - auto displayInfo = GetPhysicalDisplay(cursorPosMap_[displayGroupInfo.groupId].displayId); + + int32_t displayId = -1; + double cursorPosx = 0.0; + double cursorPosy = 0.0; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + displayId = iter->second.displayId; + cursorPosx = iter->second.cursorPos.x; + cursorPosy = iter->second.cursorPos.y; + } + } + auto displayInfo = GetPhysicalDisplay(displayId); CHKPV(displayInfo); IPointerDrawingManager::GetInstance()->SetPointerLocation( - static_cast(cursorPosMap_[groupId].cursorPos.x), - static_cast(cursorPosMap_[groupId].cursorPos.y), displayInfo->uniqueId); + static_cast(cursorPosx), + static_cast(cursorPosy), displayInfo->uniqueId); } if (isChange) { CancelMouseEvent(); @@ -1519,7 +1584,7 @@ bool InputWindowsManager::IsValidDisplayChange(const DisplayInfo &displayInfo) void InputWindowsManager::HandleWindowPositionChange(const DisplayGroupInfo &displayGroupInfo) { - CALL_DEBUG_ENTER; + CALL_DEBUG_ENTER; int32_t groupId = displayGroupInfo.groupId; PrintWindowNavbar(groupId); auto WindowInfo = GetWindowInfoVector(groupId); @@ -1550,6 +1615,34 @@ void InputWindowsManager::HandleWindowPositionChange(const DisplayGroupInfo &dis } } +void InputWindowsManager::SendCancelEventWhenWindowChange(int32_t pointerId, int32_t groupId) +{ + MMI_HILOGI("Dispatch cancel event pointerId:%{public}d", pointerId); + std::shared_ptr lastPointerEventforWindowChangeTmp = lastPointerEventforWindowChange_; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = lastPointerEventforWindowChangeMap_.find(groupId); + if (iter != lastPointerEventforWindowChangeMap_.end()) { + lastPointerEventforWindowChangeTmp = iter->second; + } + } + CHKPV(lastPointerEventforWindowChangeTmp); + PointerEvent::PointerItem pointerItem; + if (!lastPointerEventforWindowChangeTmp->GetPointerItem(pointerId, pointerItem)) { + MMI_HILOGE("Can not find pointer item pointerid:%{public}d", pointerId); + return; + } + auto tmpEvent = std::make_shared(*(lastPointerEventforWindowChangeTmp)); + tmpEvent->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL); +#ifdef OHOS_BUILD_ENABLE_DFX_RADAR + DfxHisysevent::ReportPointerEventExitTimes(PointerEventStatistics::TRANSFORM_CANCEL); +#endif // OHOS_BUILD_ENABLE_DFX_RADAR + tmpEvent->SetPointerId(pointerId); + auto inputEventNormalizeHandler = InputHandler->GetEventNormalizeHandler(); + CHKPV(inputEventNormalizeHandler); + inputEventNormalizeHandler->HandleTouchEvent(tmpEvent); +} + void InputWindowsManager::PrintWindowNavbar(int32_t groupId) { auto WindowsInfo = GetWindowInfoVector(groupId); @@ -1573,8 +1666,8 @@ void InputWindowsManager::PrintWindowNavbar(int32_t groupId) bool InputWindowsManager::JudgeCaramaInFore() { - auto displayGroupInfo = GetMainDisplayGroupInfo(); - int32_t focWid = GetFocusWindowId(displayGroupInfo.groupId); + MMI_HILOGI("JudgeCaramaInFore In."); + int32_t focWid = GetFocusWindowId(MAIN_GROUPID); int32_t focPid = GetPidByWindowId(focWid); if (udsServer_ == nullptr) { MMI_HILOGW("The udsServer is nullptr"); @@ -1589,22 +1682,49 @@ bool InputWindowsManager::JudgeCaramaInFore() return programName.find(".camera") != std::string::npos; } -void InputWindowsManager::UpdateDisplayInfo(DisplayGroupInfo &displayGroupInfo) +void InputWindowsManager::InitDisplayGroupInfo(DisplayGroupInfo &displayGroupInfo) { - bool isNewGroup = (displayGroupInfoMap_.find(displayGroupInfo.groupId) == displayGroupInfoMap_.end()); - if (isNewGroup) { - displayGroupInfoMap_[displayGroupInfo.groupId] = displayGroupInfo_; - captureModeInfoMap_[displayGroupInfo.groupId] = captureModeInfo_; - pointerDrawFlagMap_[displayGroupInfo.groupId] = pointerDrawFlag_; - mouseLocationMap_[displayGroupInfo.groupId] = mouseLocation_; - windowsPerDisplayMap_[displayGroupInfo.groupId] = windowsPerDisplay_; - lastPointerEventforWindowChangeMap_[displayGroupInfo.groupId] = lastPointerEventforWindowChange_; - displayModeMap_[displayGroupInfo.groupId] = displayMode_; - windowsHotAreasMap_[displayGroupInfo.groupId] = windowsHotAreas_; + { + std::unique_lock lock(displayGroupInfoMtx); + if (displayGroupInfoMap_.find(displayGroupInfo.groupId) != displayGroupInfoMap_.end()) { + return; + } + displayGroupInfoMap_[displayGroupInfo.groupId] = displayGroupInfo; } + captureModeInfoMap_[displayGroupInfo.groupId] = captureModeInfo_; + pointerDrawFlagMap_[displayGroupInfo.groupId] = pointerDrawFlag_; + mouseLocationMap_[displayGroupInfo.groupId] = mouseLocation_; + windowsPerDisplayMap_[displayGroupInfo.groupId] = windowsPerDisplay_; + windowsPerDisplayMap_[displayGroupInfo.groupId] = windowsPerDisplay_; + lastPointerEventforWindowChangeMap_[displayGroupInfo.groupId] = lastPointerEventforWindowChange_; + displayModeMap_[displayGroupInfo.groupId] = displayMode_; + lastDpiMap_[displayGroupInfo.groupId] = lastDpi_; + CursorPosition cursorPos = {}; + cursorPosMap_[displayGroupInfo.groupId] = cursorPos; +} - DisplayGroupInfo &curDisplayGroupInfo = displayGroupInfoMap_[displayGroupInfo.groupId]; - int32_t groupId = displayGroupInfo.groupId; +void InputWindowsManager::UpdateGroupInfo() +{ + std::unique_lock lock(displayGroupInfoMtx); + for (auto &curGroupInfo : displayGroupInfoMap_) { + if (!(curGroupInfo.second.isMainGroup) + && !(displayGroupInfoMapTmp_.find(curGroupInfo.first) != displayGroupInfoMapTmp_.end())) { + displayGroupInfoMap_.erase(curGroupInfo.first); + captureModeInfoMap_.erase(curGroupInfo.first); + pointerDrawFlagMap_.erase(curGroupInfo.first); + //mouseLocationMap_.erase(curGroupInfo.first); + windowsPerDisplayMap_.erase(curGroupInfo.first); + lastPointerEventforWindowChangeMap_.erase(curGroupInfo.first); + displayModeMap_.erase(curGroupInfo.first); + lastDpiMap_.erase(curGroupInfo.first); + cursorPosMap_.erase(curGroupInfo.first); + } + } +} + +void InputWindowsManager::UpdateDisplayInfo(DisplayGroupInfo &displayGroupInfo) +{ + InitDisplayGroupInfo(displayGroupInfo); if (!mainGroupExisted_ && displayGroupInfo.isMainGroup) { mainGroupExisted_ = true; } @@ -1627,36 +1747,40 @@ void InputWindowsManager::UpdateDisplayInfo(DisplayGroupInfo &displayGroupInfo) #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR bool isDisplayChanged = OnDisplayRemovedOrCombinationChanged(displayGroupInfo); #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + int32_t groupId = displayGroupInfo.groupId; + DisplayGroupInfo displayGroupInfoTemp; { - std::lock_guard lock(tmpInfoMutex_); - displayGroupInfoTmp_ = displayGroupInfo; - } - if (!Rosen::SceneBoardJudgement::IsSceneBoardEnabled() || action == WINDOW_UPDATE_ACTION::ADD_END) { - if ((currentUserId_ < 0) || (currentUserId_ == displayGroupInfo.currentUserId)) { + std::unique_lock lock(displayGroupInfoMtx); + displayGroupInfoMapTmp_[displayGroupInfo.groupId] = displayGroupInfo; + if ((!Rosen::SceneBoardJudgement::IsSceneBoardEnabled() || action == WINDOW_UPDATE_ACTION::ADD_END) + && ((currentUserId_ < 0) || (currentUserId_ == displayGroupInfo.currentUserId))) { + for (auto &displayInfo : displayGroupInfoMapTmp_) { + groupId = displayInfo.first; + displayGroupInfo = displayInfo.second; #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR - if (isDisplayChanged) { - ResetPointerPosition(displayGroupInfo); - } + bool isDisplayUpdate = OnDisplayRemovedOrCombinationChanged(displayGroupInfo); + if (isDisplayUpdate) { + ResetPointerPosition(displayGroupInfo); + } #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR - PrintChangedWindowBySync(displayGroupInfo); - CleanInvalidPiexMap(groupId); - HandleValidDisplayChange(displayGroupInfo); - { - std::unique_lock lock(displayGroupInfoMtx); + PrintChangedWindowBySync(displayGroupInfo); + CleanInvalidPiexMap(groupId); + HandleValidDisplayChange(displayGroupInfo); displayGroupInfoMap_[groupId] = displayGroupInfo; - } - UpdateWindowsInfoPerDisplay(displayGroupInfo); - HandleWindowPositionChange(displayGroupInfo); + UpdateWindowsInfoPerDisplay(displayGroupInfo); + HandleWindowPositionChange(displayGroupInfo); + }; + } + const auto iter = displayGroupInfoMap_.find(groupId); + if (iter != displayGroupInfoMap_.end()) { + displayGroupInfoTemp = iter->second; } } - { - std::shared_lock lock(displayGroupInfoMtx); - PrintDisplayGroupInfo(displayGroupInfoMap_[groupId]); + PrintDisplayGroupInfo(displayGroupInfoTemp); + if (!displayGroupInfoTemp.displaysInfo.empty()) { + UpdateDisplayIdAndName(); } - - UpdateDisplayIdAndName(); UpdateDisplayMode(displayGroupInfo.groupId); - #ifdef OHOS_BUILD_ENABLE_POINTER #ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled() && @@ -1668,7 +1792,13 @@ void InputWindowsManager::UpdateDisplayInfo(DisplayGroupInfo &displayGroupInfo) } InitPointerStyle(displayGroupInfo.groupId); #ifdef OHOS_BUILD_ENABLE_POINTER_DRAWING - if (!displayGroupInfo.displaysInfo.empty() && pointerDrawFlagMap_[groupId]) { + bool bFlag = false; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = pointerDrawFlagMap_.find(groupId); + bFlag = (iter != pointerDrawFlagMap_.end()) ? true : false; + } + if (!displayGroupInfo.displaysInfo.empty() && bFlag) { AdjustDisplayRotation(groupId); #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR PointerDrawingManagerOnDisplayInfo(displayGroupInfo, isDisplayChanged); @@ -1676,8 +1806,13 @@ void InputWindowsManager::UpdateDisplayInfo(DisplayGroupInfo &displayGroupInfo) PointerDrawingManagerOnDisplayInfo(displayGroupInfo); #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR } - if (INPUT_DEV_MGR->HasPointerDevice() && pointerDrawFlag_) { - NotifyPointerToWindow(); + { + std::unique_lock lock(displayGroupInfoMtx); + lastDpiMap_[groupId] = displayGroupInfoTemp.displaysInfo.empty() ? DEFAULT_DPI : + displayGroupInfoTemp.displaysInfo[0].dpi; + } + if (INPUT_DEV_MGR->HasPointerDevice() && bFlag) { + NotifyPointerToWindow(groupId); } #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING #endif // OHOS_BUILD_ENABLE_POINTER @@ -1686,37 +1821,61 @@ void InputWindowsManager::UpdateDisplayInfo(DisplayGroupInfo &displayGroupInfo) #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) void InputWindowsManager::AdjustDisplayRotation(int32_t groupId) { + CursorPosition cursorPosCur; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter == cursorPosMap_.end()) { + cursorPosMap_[groupId] = cursorPosCur; + } + } PhysicalCoordinate coord { - .x = cursorPosMap_[groupId].cursorPos.x, - .y = cursorPosMap_[groupId].cursorPos.y, + .x = cursorPosCur.cursorPos.x, + .y = cursorPosCur.cursorPos.y, }; - auto displayInfo = WIN_MGR->GetPhysicalDisplay(cursorPosMap_[groupId].displayId); + auto displayInfo = WIN_MGR->GetPhysicalDisplay(cursorPosCur.displayId); CHKPV(displayInfo); - if (cursorPosMap_[groupId].displayDirection != displayInfo->displayDirection) { + const Direction displayDirection = static_cast(( + ((displayInfo->direction - displayInfo->displayDirection) * ANGLE_90 + ANGLE_360) % ANGLE_360) / ANGLE_90); + if (cursorPosCur.displayDirection != displayInfo->displayDirection) { MMI_HILOGI("displayId:%{public}d, cursorPosX:%{private}.2f, cursorPosY:%{private}.2f, direction:%{public}d, " "physicalDisplay id:%{public}d, x:%{private}d, y:%{private}d, width:%{public}d, height:%{public}d, " "dpi:%{public}d, name:%{public}s, uniq:%{public}s, direction:%{public}d, displayDirection:%{public}d", - cursorPosMap_[groupId].displayId, cursorPosMap_[groupId].cursorPos.x, - cursorPosMap_[groupId].cursorPos.y, cursorPosMap_[groupId].direction, + cursorPosCur.displayId, cursorPosCur.cursorPos.x, + cursorPosCur.cursorPos.y, cursorPosCur.direction, displayInfo->id, displayInfo->x, displayInfo->y, displayInfo->width, displayInfo->height, displayInfo->dpi, displayInfo->name.c_str(), displayInfo->uniq.c_str(), displayInfo->direction, displayInfo->displayDirection); - if (cursorPosMap_[groupId].direction == displayInfo->direction) { + if (cursorPosCur.direction == displayInfo->direction) { ScreenRotateAdjustDisplayXY(*displayInfo, coord); } - cursorPosMap_[groupId].direction = displayInfo->direction; - cursorPosMap_[groupId].displayDirection = displayInfo->displayDirection; - UpdateAndAdjustMouseLocation(cursorPosMap_[groupId].displayId, coord.x, coord.y); - IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(*displayInfo); - auto displayInfoTmp = GetPhysicalDisplay(cursorPosMap_[groupId].displayId); - CHKPV(displayInfoTmp); - IPointerDrawingManager::GetInstance()->SetPointerLocation( - static_cast(coord.x), static_cast(coord.y), displayInfoTmp->uniqueId); + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + cursorPosMap_[groupId].direction = displayInfo->direction; + cursorPosMap_[groupId].displayDirection = displayInfo->displayDirection; + } + } + UpdateAndAdjustMouseLocation(cursorPosCur.displayId, coord.x, coord.y); #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR if (IsSupported() && extraData_.appended && (extraData_.sourceType == PointerEvent::SOURCE_TYPE_MOUSE)) { AdjustDragPosition(groupId); } #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + IPointerDrawingManager::GetInstance()->UpdateDisplayInfo(*displayInfo); + int32_t displayId = -1; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + displayId = iter->second.displayId; + } + } + auto displayInfoTmp = GetPhysicalDisplay(displayId); + CHKPV(displayInfoTmp); + IPointerDrawingManager::GetInstance()->SetPointerLocation( + static_cast(coord.x), static_cast(coord.y), displayInfoTmp->uniqueId); } } @@ -1724,10 +1883,21 @@ void InputWindowsManager::AdjustDragPosition(int32_t groupId) { auto lastPointerEvent = GetlastPointerEvent(); CHKPV(lastPointerEvent); + int32_t displayId = -1; + int32_t physicalX = 0; + int32_t physicalY = 0; + { + std::unique_lock lock(displayGroupInfoMtx); + auto iter = mouseLocationMap_.find(groupId); + if (iter != mouseLocationMap_.end()) { + displayId = iter->second.displayId; + physicalX = iter->second.physicalX; + physicalY = iter->second.physicalY; + } + } std::shared_ptr pointerEvent = std::make_shared(*lastPointerEvent); - pointerEvent->SetTargetDisplayId(mouseLocationMap_[groupId].displayId); - auto touchWindow = SelectWindowInfo(mouseLocationMap_[groupId].physicalX, - mouseLocationMap_[groupId].physicalY, pointerEvent); + pointerEvent->SetTargetDisplayId(displayId); + auto touchWindow = SelectWindowInfo(physicalX, physicalY, pointerEvent); if (touchWindow == std::nullopt) { MMI_HILOGE("SelectWindowInfo failed"); return; @@ -1735,8 +1905,8 @@ void InputWindowsManager::AdjustDragPosition(int32_t groupId) int32_t pointerId = pointerEvent->GetPointerId(); PointerEvent::PointerItem item; pointerEvent->GetPointerItem(pointerId, item); - item.SetDisplayX(mouseLocationMap_[groupId].physicalX); - item.SetDisplayY(mouseLocationMap_[groupId].physicalY); + item.SetDisplayX(physicalX); + item.SetDisplayY(physicalY); pointerEvent->UpdatePointerItem(pointerId, item); pointerEvent->SetTargetWindowId(touchWindow->id); pointerEvent->SetAgentWindowId(touchWindow->id); @@ -1753,18 +1923,18 @@ void InputWindowsManager::AdjustDragPosition(int32_t groupId) DisplayMode InputWindowsManager::GetDisplayMode() const { - const DisplayGroupInfo &tmpGroupInfo = GetConstMainDisplayGroupInfo(); - auto it = displayModeMap_.find(tmpGroupInfo.groupId); - if (it != displayModeMap_.end()) { - return it->second; - } + std::shared_lock lock(displayGroupInfoMtx); + const auto iter = displayModeMap_.find(MAIN_GROUPID); + if (iter != displayModeMap_.end()) { + return iter->second; + } return displayMode_; } void InputWindowsManager::UpdateDisplayMode(int32_t groupId) { CALL_DEBUG_ENTER; - DisplayMode mode; + DisplayMode mode; { std::shared_lock lock(displayGroupInfoMtx); const auto iter = displayGroupInfoMap_.find(groupId); @@ -1782,9 +1952,17 @@ void InputWindowsManager::UpdateDisplayMode(int32_t groupId) mode = displayGroupInfo_.displaysInfo[0].displayMode; } } - - if (mode == displayModeMap_[groupId]) { - MMI_HILOGD("Displaymode not change, mode:%{public}d, diaplayMode_:%{public}d", mode, displayModeMap_[groupId]); + DisplayMode& displayMode = displayMode_; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = displayModeMap_.find(groupId); + if (iter == displayModeMap_.end()) { + return; + } + displayMode = iter->second; + } + if (mode == displayMode) { + MMI_HILOGD("Displaymode not change, mode:%{public}d, diaplayMode_:%{public}d", mode, displayMode); return; } displayModeMap_[groupId] = mode; @@ -1793,9 +1971,9 @@ void InputWindowsManager::UpdateDisplayMode(int32_t groupId) MMI_HILOGD("Send fingersense display mode is nullptr"); return; } - MMI_HILOGI("Update fingersense display mode, displayMode:%{public}d", displayModeMap_[groupId]); + MMI_HILOGI("Update fingersense display mode, displayMode:%{public}d", displayMode); BytraceAdapter::StartUpdateDisplayMode("display mode change"); - FINGERSENSE_WRAPPER->sendFingerSenseDisplayMode_(static_cast(displayModeMap_[groupId])); + FINGERSENSE_WRAPPER->sendFingerSenseDisplayMode_(static_cast(displayMode)); BytraceAdapter::StopUpdateDisplayMode(); #endif // OHOS_BUILD_ENABLE_FINGERSENSE_WRAPPER } @@ -1819,6 +1997,7 @@ void InputWindowsManager::PointerDrawingManagerOnDisplayInfo(const DisplayGroupI IPointerDrawingManager::GetInstance()->OnDisplayInfo(displayGroupInfo); int32_t groupId = displayGroupInfo.groupId; int32_t newId = 0; + int32_t &lastDpiTmp = lastDpi_; { std::shared_lock lock(displayGroupInfoMtx); const auto iter = displayGroupInfoMap_.find(groupId); @@ -1835,6 +2014,9 @@ void InputWindowsManager::PointerDrawingManagerOnDisplayInfo(const DisplayGroupI } newId = displayGroupInfo_.displaysInfo[0].id; } + if (lastDpiMap_.find(groupId) == lastDpiMap_.end()) { + lastDpiMap_[groupId] = lastDpiTmp; + } } for (auto displayInfo : displayGroupInfo.displaysInfo) { if (displayInfo.uniqueId == currentDisplayInfo.uniqueId && displayInfo.dpi != currentDisplayInfo.dpi) { @@ -1872,10 +2054,28 @@ void InputWindowsManager::PointerDrawingManagerOnDisplayInfo(const DisplayGroupI .x = logicX, .y = logicY, }; - if (cursorPosMap_[groupId].direction != DirectionCopy && - cursorPosMap_[groupId].displayDirection == DisplayDirection) { - coord.x = cursorPosMap_[groupId].cursorPos.x; - coord.y = cursorPosMap_[groupId].cursorPos.y; + CursorPosition cursorPosRef; + double cursorPosx = 0.0; + double cursorPosy = 0.0; + Direction direction = Direction::DIRECTION0; + Direction displayDirection = Direction::DIRECTION0; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter == cursorPosMap_.end()) { + cursorPosMap_[groupId] = cursorPosRef; + } + else { + direction = iter->second.direction; + displayDirection = iter->second.displayDirection; + cursorPosx = iter->second.cursorPos.x;; + cursorPosy = iter->second.cursorPos.y; + } + } + if (direction != DirectionCopy && + displayDirection == DisplayDirection) { + coord.x = cursorPosx; + coord.y = cursorPosy; RotateDisplayScreen(*displayInfo, coord); } windowInfo = GetWindowInfo(coord.x, coord.y, groupId); @@ -2004,10 +2204,24 @@ void InputWindowsManager::UpdatePointerDrawingManagerWindowInfo() .x = logicX, .y = logicY, }; - if (cursorPosMap_[groupId].direction != DirectionCopy && - cursorPosMap_[groupId].displayDirection == DisplayDirection) { - coord.x = cursorPosMap_[groupId].cursorPos.x; - coord.y = cursorPosMap_[groupId].cursorPos.y; + Direction direction = Direction::DIRECTION0; + Direction displayDirection = Direction::DIRECTION0; + double cursorPosx = 0.0; + double cursorPosy = 0.0; + { + std::shared_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + direction = iter->second.direction; + displayDirection = iter->second.displayDirection; + cursorPosx = iter->second.cursorPos.x; + cursorPosy = iter->second.cursorPos.y; + } + } + if (direction != DirectionCopy && + displayDirection == DisplayDirection) { + coord.x = cursorPosx; + coord.y = cursorPosy; RotateDisplayScreen(*displayInfo, coord); } windowInfo = GetWindowInfo(coord.x, coord.y, groupId); @@ -2082,8 +2296,7 @@ void InputWindowsManager::SendPointerEvent(int32_t pointerAction) lastLogicY_ = mouseLocation.physicalY + DisplayInfoY; if (pointerAction == PointerEvent::POINTER_ACTION_ENTER_WINDOW || Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { - auto displayGroupInfo = GetMainDisplayGroupInfo(); - auto touchWindow = GetWindowInfo(lastLogicX_, lastLogicY_, displayGroupInfo.groupId); + auto touchWindow = GetWindowInfo(lastLogicX_, lastLogicY_, MAIN_GROUPID); if (!touchWindow) { MMI_HILOGE("TouchWindow is nullptr"); return; @@ -2161,8 +2374,7 @@ void InputWindowsManager::DispatchPointer(int32_t pointerAction, int32_t windowI (eventAction >= PointerEvent::POINTER_ACTION_AXIS_BEGIN && eventAction <= PointerEvent::POINTER_ACTION_AXIS_END); if (checkFlag) { - auto displayGroupInfo = GetMainDisplayGroupInfo(); - windowInfo = GetWindowInfo(lastLogicX_, lastLogicY_, displayGroupInfo.groupId); + windowInfo = GetWindowInfo(lastLogicX_, lastLogicY_, MAIN_GROUPID); } else { windowInfo = SelectWindowInfo(lastLogicX_, lastLogicY_, lastPointerEventCopy); } @@ -2178,9 +2390,22 @@ void InputWindowsManager::DispatchPointer(int32_t pointerAction, int32_t windowI currentPointerItem.SetWindowX(lastLogicX_ - lastWindowInfo_.area.x); currentPointerItem.SetWindowY(lastLogicY_ - lastWindowInfo_.area.y); if (pointerAction == PointerEvent::POINTER_ACTION_ENTER_WINDOW && windowId > 0) { - currentPointerItem.SetDisplayX(mouseLocation_.physicalX); - currentPointerItem.SetDisplayY(mouseLocation_.physicalY); - pointerEvent->SetTargetDisplayId(mouseLocation_.displayId); + auto displayGroupInfo = GetMainDisplayGroupInfo(); + int32_t displayId = 0; + double cursorPosx = 0.0; + double cursorPosy = 0.0; + { + std::shared_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(MAIN_GROUPID); + if (iter != mouseLocationMap_.end()) { + displayId = iter->second.displayId; + cursorPosx = iter->second.physicalX; + cursorPosy = iter->second.physicalY; + } + } + currentPointerItem.SetDisplayX(cursorPosx); + currentPointerItem.SetDisplayY(cursorPosy); + pointerEvent->SetTargetDisplayId(displayId); if (IsMouseSimulate()) { currentPointerItem.SetWindowX(lastPointerItem.GetWindowX()); currentPointerItem.SetWindowY(lastPointerItem.GetWindowY()); @@ -2477,7 +2702,8 @@ const std::shared_ptr InputWindowsManager::GetPhysicalDisplay(int32 #ifdef OHOS_BUILD_ENABLE_TOUCH const std::shared_ptr InputWindowsManager::FindPhysicalDisplayInfo(const std::string& uniq) const { - for (auto &item : displayGroupInfoMap_) { + std::unique_lock lock(displayGroupInfoMtx); + for (const auto &item : displayGroupInfoMap_) { for (const auto &it : item.second.displaysInfo) { if (it.uniq == uniq) { return std::make_shared(it); @@ -2485,9 +2711,12 @@ const std::shared_ptr InputWindowsManager::FindPhysicalDisplayInfo( } } MMI_HILOGD("Failed to search for Physical,uniq:%{public}s", uniq.c_str()); - const auto displayGroupInfo = GetConstMainDisplayGroupInfo(); - if (displayGroupInfo.displaysInfo.size() > 0) { - return std::make_shared(displayGroupInfo.displaysInfo[0]); + DisplayGroupInfo displayGroupInfo; + auto iter = displayGroupInfoMap_.find(MAIN_GROUPID); + if (iter != displayGroupInfoMap_.end()) { + if (iter->second.displaysInfo.size() > 0) { + return std::make_shared(iter->second.displaysInfo[0]); + } } return nullptr; } @@ -2526,6 +2755,21 @@ void InputWindowsManager::ScreenRotateAdjustDisplayXY(const DisplayInfo& info, P } } +void InputWindowsManager::RotateScreen90(const DisplayInfo& info, PhysicalCoordinate& coord) const +{ + double oldX = coord.x; + double oldY = coord.y; + double temp = coord.x; + if (!Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { + coord.x = info.validHeight - coord.y; + } else { + coord.x = info.validWidth - coord.y; + } + coord.y = temp; + MMI_HILOGD("DIRECTION90, physicalXY:{%f %f}->{%f %f}", oldX, oldY, coord.x, coord.y); + return; +} + void InputWindowsManager::RotateScreen(const DisplayInfo& info, PhysicalCoordinate& coord) const { double oldX = coord.x; @@ -2533,14 +2777,24 @@ void InputWindowsManager::RotateScreen(const DisplayInfo& info, PhysicalCoordina const Direction direction = info.direction; int32_t groupId = FindDisplayGroupId(info.id); if (direction == DIRECTION0) { - auto it = cursorPosMap_.find(groupId); - CursorPosition cursorPosTmp = (it != cursorPosMap_.end()) ? it->second : cursorPos_; - if (cursorPosTmp.displayDirection != info.displayDirection && cursorPosTmp.direction != info.direction) { - if (cursorPosTmp.direction == Direction::DIRECTION90) { + int32_t groupId = FindDisplayGroupId(info.id); + Direction directiontemp = Direction::DIRECTION0 ; + Direction displaydirectiontemp = Direction::DIRECTION0 ; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + directiontemp = iter->second.direction; + displaydirectiontemp = iter->second.displayDirection; + } + } + + if (displaydirectiontemp != info.displayDirection && directiontemp != info.direction) { + if (directiontemp == Direction::DIRECTION90) { double temp = coord.y; coord.y = info.validHeight - coord.x; coord.x = temp; - } else if (cursorPosTmp.direction == Direction::DIRECTION270) { + } else if (directiontemp == Direction::DIRECTION270) { double temp = coord.x; coord.x = info.validWidth - coord.y; coord.y = temp; @@ -2550,14 +2804,7 @@ void InputWindowsManager::RotateScreen(const DisplayInfo& info, PhysicalCoordina return; } if (direction == DIRECTION90) { - double temp = coord.x; - if (!Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { - coord.x = info.validHeight - coord.y; - } else { - coord.x = info.validWidth - coord.y; - } - coord.y = temp; - MMI_HILOGD("DIRECTION90, physicalXY:{%f %f}->{%f %f}", oldX, oldY, coord.x, coord.y); + RotateScreen90(info, coord); return; } if (direction == DIRECTION180) { @@ -2794,46 +3041,57 @@ bool InputWindowsManager::CalculateTipPoint(struct libinput_event_tablet_tool* t #endif // OHOS_BUILD_ENABLE_TOUCH #ifdef OHOS_BUILD_ENABLE_POINTER -const DisplayGroupInfo& InputWindowsManager::GetDisplayGroupInfo(int32_t groupId) +void InputWindowsManager::GetDisplayGroupInfo(DisplayGroupInfo& displayGroupInfoCur, int32_t groupId) { + std::unique_lock lock(displayGroupInfoMtx); auto iter = displayGroupInfoMap_.find(groupId); if (iter != displayGroupInfoMap_.end()) { - return iter->second; + return; } - return displayGroupInfo_; + displayGroupInfoCur = iter->second; } std::vector InputWindowsManager::GetDisplayInfoVector(int32_t groupId) const { - std::shared_lock lock(displayGroupInfoMtx); - const auto iter = displayGroupInfoMap_.find(groupId); + std::unique_lock lock(displayGroupInfoMtx); + auto iter = displayGroupInfoMap_.find(groupId); + if (iter != displayGroupInfoMap_.end()) { + return iter->second.displaysInfo; + } + iter = displayGroupInfoMap_.find(MAIN_GROUPID); if (iter != displayGroupInfoMap_.end()) { return iter->second.displaysInfo; - } else { - return displayGroupInfo_.displaysInfo; } + return displayGroupInfo_.displaysInfo; } const std::vector InputWindowsManager::GetWindowInfoVector(int32_t groupId) const { - std::shared_lock lock(displayGroupInfoMtx); - const auto iter = displayGroupInfoMap_.find(groupId); - if (iter != displayGroupInfoMap_.end()) { - return iter->second.windowsInfo; - } else { - return displayGroupInfo_.windowsInfo; - } + std::unique_lock lock(displayGroupInfoMtx); + auto iter = displayGroupInfoMap_.find(groupId); + if (iter != displayGroupInfoMap_.end()) { + return iter->second.windowsInfo; + } + iter = displayGroupInfoMap_.find(MAIN_GROUPID); + if (iter != displayGroupInfoMap_.end()) { + return iter->second.windowsInfo; + } + return displayGroupInfo_.windowsInfo; } int32_t InputWindowsManager::GetFocusWindowId(int32_t groupId) const { - std::shared_lock lock(displayGroupInfoMtx); - const auto iter = displayGroupInfoMap_.find(groupId); + std::unique_lock lock(displayGroupInfoMtx); + auto iter = displayGroupInfoMap_.find(groupId); if (iter != displayGroupInfoMap_.end()) { return iter->second.focusWindowId; - } else { - return displayGroupInfo_.focusWindowId; + } + iter = displayGroupInfoMap_.find(MAIN_GROUPID); + if (iter != displayGroupInfoMap_.end()) { + return iter->second.focusWindowId; + } + return 0; } int32_t InputWindowsManager::GetLogicalPositionX(int32_t id) @@ -3639,8 +3897,12 @@ void InputWindowsManager::UpdatePointerChangeAreas() { CALL_DEBUG_ENTER; if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { - std::lock_guard lock(tmpInfoMutex_); - UpdatePointerChangeAreas(displayGroupInfoTmp_); + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = displayGroupInfoMapTmp_.find(MAIN_GROUPID); + if(iter == displayGroupInfoMapTmp_.end()) { + return; + } + UpdatePointerChangeAreas(iter->second); } } @@ -4040,14 +4302,27 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi dragPointerStyle_, direction); } #endif // OHOS_BUILD_ENABLE_POINTER_DRAWING - cursorPosMap_[groupId].direction = physicalDisplayInfo->direction; - cursorPosMap_[groupId].displayDirection = physicalDisplayInfo->displayDirection; + Direction lastRotation; + { + std::unique_lock lock(displayGroupInfoMtx); + auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + cursorPosMap_[groupId].direction = physicalDisplayInfo->direction; + cursorPosMap_[groupId].displayDirection = physicalDisplayInfo->displayDirection; + } + } int64_t endTime = GetSysClockTime(); if ((endTime - beginTime) > RS_PROCESS_TIMEOUT) { MMI_HILOGW("Rs process timeout"); } - if (captureModeInfoMap_[groupId].isCaptureMode && (touchWindow->id != captureModeInfoMap_[groupId].windowId)) { - captureModeInfoMap_[groupId].isCaptureMode = false; + { + std::unique_lock lock(displayGroupInfoMtx); + auto itr = captureModeInfoMap_.find(groupId); + if (itr != captureModeInfoMap_.end()) { + if (itr->second.isCaptureMode&& (touchWindow->id != itr->second.windowId)) { + captureModeInfoMap_[groupId].isCaptureMode = false; + } + } } SetPrivacyModeFlag(touchWindow->privacyMode, pointerEvent); pointerEvent->SetTargetWindowId(touchWindow->id); @@ -4056,9 +4331,8 @@ int32_t InputWindowsManager::UpdateMouseTarget(std::shared_ptr poi auto windowX = logicalX - touchWindow->area.x; auto windowY = logicalY - touchWindow->area.y; if (!(touchWindow->transform.empty())) { - auto windowXY = TransformWindowXY(*touchWindow, logicalX, logicalY); - windowX = windowXY.first; - windowY = windowXY.second; + auto windowXY = TransformWindowXY( + *touchWindow, logicalX - physicalDisplayInfo->x, logicalY - physicalDisplayInfo->y); } windowX = static_cast(windowX); windowY = static_cast(windowY); @@ -4182,25 +4456,32 @@ int32_t InputWindowsManager::SetMouseCaptureMode(int32_t windowId, bool isCaptur MMI_HILOGE("Windowid(%{public}d) is invalid", windowId); return RET_ERR; } - if ((captureModeInfo_.isCaptureMode == isCaptureMode) && !isCaptureMode) { - MMI_HILOGE("Windowid:(%{public}d) is not capture mode", windowId); - return RET_OK; + MMI_HILOGI("SetMouseCaptureMode In."); + { + std::unique_lock lock(displayGroupInfoMtx); + auto itr = captureModeInfoMap_.find(MAIN_GROUPID); + if (itr != captureModeInfoMap_.end()) { + if (itr->second.isCaptureMode == isCaptureMode && !isCaptureMode) { + MMI_HILOGE("Windowid:(%{public}d) is not capture mode", windowId); + return RET_OK; + } + captureModeInfoMap_[MAIN_GROUPID].windowId = windowId; + captureModeInfoMap_[MAIN_GROUPID].isCaptureMode = isCaptureMode; + } } - captureModeInfo_.windowId = windowId; - captureModeInfo_.isCaptureMode = isCaptureMode; MMI_HILOGI("Windowid:(%{public}d) is (%{public}d)", windowId, isCaptureMode); return RET_OK; } bool InputWindowsManager::GetMouseIsCaptureMode() const { - const DisplayGroupInfo &tmpGroupInfo = GetConstMainDisplayGroupInfo(); - const auto iter = captureModeInfoMap_.find(tmpGroupInfo.groupId); - if (iter != captureModeInfoMap_.end()) { - return iter->second.isCaptureMode; - } else { - return captureModeInfo_.isCaptureMode; + MMI_HILOGI("GetMouseIsCaptureMode In."); + std::unique_lock lock(displayGroupInfoMtx); + auto itr = captureModeInfoMap_.find(MAIN_GROUPID); + if (itr != captureModeInfoMap_.end()) { + return itr->second.isCaptureMode; } + return false; } bool InputWindowsManager::IsNeedDrawPointer(PointerEvent::PointerItem &pointerItem) const @@ -4616,7 +4897,7 @@ int32_t InputWindowsManager::UpdateTouchScreenTarget(std::shared_ptr(integerX) + (x - floor(x)); y = static_cast(integerY) + (y - floor(y)); - - mouseLocationMap_[groupId].displayId = displayId; - cursorPosMap_[groupId].displayId = displayInfo->id; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(groupId); + if (iter != mouseLocationMap_.end()) { + mouseLocationMap_[groupId].displayId = displayId; + } + const auto it = cursorPosMap_.find(groupId); + if (it != cursorPosMap_.end()) { + cursorPosMap_[groupId].displayId = displayId; + } + } if (isRealData) { PhysicalCoordinate coord { .x = integerX, .y = integerY, }; RotateDisplayScreen(*displayInfo, coord); - mouseLocationMap_[groupId].physicalX = static_cast(coord.x); - mouseLocationMap_[groupId].physicalY = static_cast(coord.y); - cursorPosMap_[groupId].cursorPos.x = x; - cursorPosMap_[groupId].cursorPos.y = y; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(groupId); + if (iter != mouseLocationMap_.end()) { + mouseLocationMap_[groupId].physicalX = coord.x; + mouseLocationMap_[groupId].physicalY = coord.y; + } + const auto it = cursorPosMap_.find(groupId); + if (it != cursorPosMap_.end()) { + cursorPosMap_[groupId].cursorPos.x = x; + cursorPosMap_[groupId].cursorPos.y = y; + } + } } else { - mouseLocationMap_[groupId].physicalX = integerX; - mouseLocationMap_[groupId].physicalY = integerY; - ReverseRotateDisplayScreen(*displayInfo, x, y, cursorPosMap_[groupId].cursorPos); + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(groupId); + if (iter != mouseLocationMap_.end()) { + mouseLocationMap_[groupId].physicalX = integerX; + mouseLocationMap_[groupId].physicalY = integerY; + } + } + + CursorPosition cursorPosCur = {}; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(groupId); + if (iter != cursorPosMap_.end()) { + cursorPosCur = iter->second; + } + } + ReverseRotateDisplayScreen(*displayInfo, x, y, cursorPosCur.cursorPos); + + { + std::unique_lock lock(displayGroupInfoMtx); + cursorPosMap_[groupId] = cursorPosCur; + } + } + MouseLocation mouseLocationTmp; + double physicalX = 0.0; + double physicalY = 0.0; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto& iter = mouseLocationMap_.find(groupId); + if (iter != mouseLocationMap_.end()) { + mouseLocationTmp = iter->second; + } + const auto& it = cursorPosMap_.find(groupId); + if (it != cursorPosMap_.end()) { + physicalX = it->second.cursorPos.x; + physicalY = it->second.cursorPos.y; + } } MMI_HILOGD("Mouse Data: isRealData=%{public}d, displayId:%{public}d, mousePhysicalXY={%{public}d, %{public}d}, " - "cursorPosXY: {%{public}.2f, %{public}.2f} -> {%{public}.2f %{public}.2f}", - static_cast(isRealData), displayId, mouseLocationMap_[groupId].physicalX, - mouseLocationMap_[groupId].physicalY, oldX, oldY, cursorPosMap_[groupId].cursorPos.x, - cursorPosMap_[groupId].cursorPos.y); + "cursorPosXY: {%{public}.2f, %{public}.2f} -> {%{public}.2f %{private}.2f}", + static_cast(isRealData), displayId, mouseLocationTmp.physicalX, + mouseLocationTmp.physicalY, oldX, oldY, physicalX, physicalY); } MouseLocation InputWindowsManager::GetMouseInfo() { - DisplayGroupInfo &mainDisplayGroupInfo = GetMainDisplayGroupInfo(); - auto displaysInfoVector = mainDisplayGroupInfo.displaysInfo; - int32_t mainGroupId = mainDisplayGroupInfo.groupId; - if ((mouseLocationMap_[mainGroupId].displayId < 0) && !displaysInfoVector.empty()) { + auto displaysInfoVector = GetDisplayInfoVector(MAIN_GROUPID); + MouseLocation curMouseLocation; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(MAIN_GROUPID); + if (iter != mouseLocationMap_.end()) { + curMouseLocation = iter->second; + } + } + MMI_HILOGI("Mouselocation start: displayId:%{public}d, X:%{public}d, Y:%{public}d", + curMouseLocation.displayId, curMouseLocation.physicalX, curMouseLocation.physicalY); + // if ((mouseLocation_.displayId < 0) && !displaysInfoVector.empty()) { + if ((curMouseLocation.displayId < 0) && !displaysInfoVector.empty()) { DisplayInfo displayInfo = displaysInfoVector[0]; #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR (void)GetMainScreenDisplayInfo(displaysInfoVector, displayInfo); #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR - mouseLocationMap_[mainGroupId].displayId = displayInfo.id; - mouseLocationMap_[mainGroupId].physicalX = displayInfo.validWidth / TWOFOLD; - mouseLocationMap_[mainGroupId].physicalY = displayInfo.validHeight / TWOFOLD; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(MAIN_GROUPID); + if (iter != mouseLocationMap_.end()) { + mouseLocationMap_[MAIN_GROUPID].displayId = displayInfo.id; + mouseLocationMap_[MAIN_GROUPID].physicalX = displayInfo.validWidth / TWOFOLD; + mouseLocationMap_[MAIN_GROUPID].physicalY = displayInfo.validHeight / TWOFOLD; + curMouseLocation = iter->second; + } + } + MMI_HILOGI("Mouselocation displayinfo: displayId:%{public}d, W:%{public}d, H:%{public}d", + displayInfo.id, displayInfo.validWidth, displayInfo.validHeight); + return curMouseLocation; + } + MMI_HILOGI("Mouselocation middle: displayId:%{public}d, X:%{public}d, Y:%{public}d", + curMouseLocation.displayId, curMouseLocation.physicalX, curMouseLocation.physicalY); + DisplayInfo displayInfo = displaysInfoVector[0]; +#ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR + (void)GetMainScreenDisplayInfo(displaysInfoVector, displayInfo); +#endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = mouseLocationMap_.find(MAIN_GROUPID); + if (iter != mouseLocationMap_.end()) { + mouseLocationMap_[MAIN_GROUPID].displayId = displayInfo.id; + mouseLocationMap_[MAIN_GROUPID].physicalX = displayInfo.validWidth / TWOFOLD; + mouseLocationMap_[MAIN_GROUPID].physicalY = displayInfo.validHeight / TWOFOLD; + curMouseLocation = iter->second; + } } - return mouseLocationMap_[mainGroupId]; + MMI_HILOGI("Mouselocation next: displayId:%{public}d, X:%{public}d, Y:%{public}d", + curMouseLocation.displayId, curMouseLocation.physicalX, curMouseLocation.physicalY); + return curMouseLocation; } CursorPosition InputWindowsManager::GetCursorPos() { - DisplayGroupInfo &mainDisplayGroupInfo = GetMainDisplayGroupInfo(); - auto displaysInfoVector = mainDisplayGroupInfo.displaysInfo; - int32_t mainGroupId = mainDisplayGroupInfo.groupId; - if ((cursorPosMap_[mainGroupId].displayId < 0) && !displaysInfoVector.empty()) { + MMI_HILOGI("GetCursorPos In"); + auto displaysInfoVector = GetDisplayInfoVector(MAIN_GROUPID); + CursorPosition cursorPos; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(MAIN_GROUPID); + if (iter != cursorPosMap_.end()) { + cursorPos = iter->second; + } + } + if ((cursorPos.displayId < 0) && !displaysInfoVector.empty()) { DisplayInfo displayInfo = displaysInfoVector[0]; #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR (void)GetMainScreenDisplayInfo(displaysInfoVector, displayInfo); #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR - cursorPosMap_[mainGroupId].displayId = displayInfo.id; - cursorPosMap_[mainGroupId].cursorPos.x = displayInfo.validWidth * HALF_RATIO; - cursorPosMap_[mainGroupId].cursorPos.y = displayInfo.validHeight * HALF_RATIO; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(MAIN_GROUPID); + if (iter != cursorPosMap_.end()) { + cursorPosMap_[MAIN_GROUPID].displayId = displayInfo.id; + cursorPosMap_[MAIN_GROUPID].cursorPos.x = displayInfo.validWidth * HALF_RATIO; + cursorPosMap_[MAIN_GROUPID].cursorPos.y = displayInfo.validHeight * HALF_RATIO; + } + } } - return cursorPosMap_[mainGroupId]; + return cursorPos; } CursorPosition InputWindowsManager::ResetCursorPos() { - DisplayGroupInfo &mainDisplayGroupInfo = GetMainDisplayGroupInfo(); - auto displaysInfoVector = mainDisplayGroupInfo.displaysInfo; - int32_t mainGroupId = mainDisplayGroupInfo.groupId; + MMI_HILOGI("ResetCursorPos In"); + auto displaysInfoVector = GetDisplayInfoVector(MAIN_GROUPID); if (!displaysInfoVector.empty()) { DisplayInfo displayInfo = displaysInfoVector[0]; + int32_t x = displayInfo.validWidth * HALF_RATIO; + int32_t y = displayInfo.validHeight * HALF_RATIO; #ifdef OHOS_BUILD_ENABLE_HARDWARE_CURSOR (void)GetMainScreenDisplayInfo(displaysInfoVector, displayInfo); + x = displayInfo.validWidth * HALF_RATIO; + y = displayInfo.validHeight * HALF_RATIO; if (IsSupported()) { - int32_t x = displayInfo.width * HALF_RATIO; - int32_t y = displayInfo.height * HALF_RATIO; if (displayInfo.direction == DIRECTION90 || displayInfo.direction == DIRECTION270) { std::swap(x, y); } - cursorPosMap_[mainGroupId].cursorPos.x = x; - cursorPosMap_[mainGroupId].cursorPos.y = y; } -#else - cursorPosMap_[mainGroupId].cursorPos.x = displayInfo.validWidth * HALF_RATIO; - cursorPosMap_[mainGroupId].cursorPos.y = displayInfo.validHeight * HALF_RATIO; #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR - cursorPosMap_[mainGroupId].displayId = displayInfo.id; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(MAIN_GROUPID); + if (iter != cursorPosMap_.end()) { + cursorPosMap_[MAIN_GROUPID].displayId = displayInfo.id; + cursorPosMap_[MAIN_GROUPID].cursorPos.x = x; + cursorPosMap_[MAIN_GROUPID].cursorPos.y = y; + } + } } else { - cursorPosMap_[mainGroupId].displayId = -1; - cursorPosMap_[mainGroupId].cursorPos.x = 0; - cursorPosMap_[mainGroupId].cursorPos.y = 0; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(MAIN_GROUPID); + if (iter != cursorPosMap_.end()) { + cursorPosMap_[MAIN_GROUPID].displayId = -1; + cursorPosMap_[MAIN_GROUPID].cursorPos.x = 0; + cursorPosMap_[MAIN_GROUPID].cursorPos.y = 0; + } + } + } + CursorPosition cursorPos; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = cursorPosMap_.find(MAIN_GROUPID); + if (iter != cursorPosMap_.end()) { + cursorPos = iter->second; + } } - MMI_HILOGI("ResetCursorPos cursorPosMap_[mainGroupId].displayId:%{public}d", cursorPosMap_[mainGroupId].displayId); - return cursorPosMap_[mainGroupId]; + MMI_HILOGI("ResetCursorPos cursorPosMap_[mainGroupId].displayId:%{public}d", + cursorPos.displayId); + return cursorPos; } #endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH @@ -5920,7 +6321,7 @@ void InputWindowsManager::UpdatePointerAction(std::shared_ptr poin void InputWindowsManager::DumpDisplayInfo(int32_t fd) { mprintf(fd, "Displays information:\t"); - auto DisplaysInfo = GetMainDisplayGroupInfo().displaysInfo; + auto DisplaysInfo = GetDisplayInfoVector(MAIN_GROUPID); mprintf(fd, "displayInfos,num:%zu", DisplaysInfo.size()); for (const auto &item : DisplaysInfo) { mprintf(fd, "\t displayInfos: uniqueId:%d | screenCombination:%d id:%d | x:%d" @@ -5941,7 +6342,7 @@ void InputWindowsManager::Dump(int32_t fd, const std::vector &args) { CALL_DEBUG_ENTER; mprintf(fd, "Windows information:\t"); - auto WindowsInfo = GetMainDisplayGroupInfo().windowsInfo; + auto WindowsInfo = GetWindowInfoVector(MAIN_GROUPID); mprintf(fd, "windowsInfos,num:%zu", WindowsInfo.size()); for (const auto &item : WindowsInfo) { mprintf(fd, " windowsInfos: id:%d | pid:%d | uid:%d | area.x:%d | area.y:%d " @@ -6156,8 +6557,8 @@ int32_t InputWindowsManager::CheckWindowIdPermissionByPid(int32_t windowId, int3 #ifdef OHOS_BUILD_ENABLE_TOUCH void InputWindowsManager::ReverseXY(int32_t &x, int32_t &y) { - auto displayGroupInfo = GetMainDisplayGroupInfo(); - auto DisplaysInfo = GetDisplayInfoVector(displayGroupInfo.groupId); + MMI_HILOGI("ReverseXY In"); + auto DisplaysInfo = GetDisplayInfoVector(MAIN_GROUPID); if (DisplaysInfo.empty()) { MMI_HILOGE("DisplaysInfo is empty"); return; @@ -6459,7 +6860,16 @@ void InputWindowsManager::UpdateKeyEventDisplayId(std::shared_ptr keyE { CHKPV(keyEvent); bool hasFound = false; - for (const auto &item : windowsPerDisplayMap_[groupId]) { + std::map windowsPerDisplayTmp = windowsPerDisplay_; + { + std::unique_lock lock(displayGroupInfoMtx); + const auto iter = windowsPerDisplayMap_.find(groupId); + if (iter != windowsPerDisplayMap_.end()) { + windowsPerDisplayTmp = iter->second; + } + } + for (const auto &item : windowsPerDisplayTmp) { + if (item.second.focusWindowId == focusWindowId) { keyEvent->SetTargetDisplayId(item.second.displayId); hasFound = true; @@ -6534,17 +6944,18 @@ const std::shared_ptr InputWindowsManager::GetPhysicalDisplay(int32 #if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) std::optional InputWindowsManager::GetWindowInfoById(int32_t windowId) const { - for (auto iter = windowsPerDisplay_.begin(); iter != windowsPerDisplay_.end(); ++iter) { - int32_t displayId = iter->first; - const std::vector &windowsInfo = iter->second.windowsInfo; - if (displayId < 0) { - MMI_HILOGE("windowsPerDisplay_ contain invalid displayId:%{public}d", displayId); - continue; - } - for (const auto& item : windowsInfo) { - if (item.id == windowId && - (item.flags & WindowInfo::FLAG_BIT_UNTOUCHABLE) != WindowInfo::FLAG_BIT_UNTOUCHABLE && - transparentWins_.find(item.id) == transparentWins_.end()) { + std::unique_lock lock(displayGroupInfoMtx); + for (const auto &it : windowsPerDisplayMap_) { + for (auto iter = it.second.begin(); iter != it.second.end(); ++iter) { + int32_t displayId = iter->first; + if (displayId < 0) { + MMI_HILOGE("windowsPerDisplay_ contain invalid displayId:%{public}d", displayId); + continue; + } + for (const auto& item : iter->second.windowsInfo) { + CHKCC(item.id == windowId && + (item.flags & WindowInfo::FLAG_BIT_UNTOUCHABLE) != WindowInfo::FLAG_BIT_UNTOUCHABLE && + transparentWins_.find(item.id) == transparentWins_.end()); return std::make_optional(item); } } @@ -6708,6 +7119,18 @@ std::pair InputWindowsManager::CalcDrawCoordinate(const Displa return {static_cast(physicalX), static_cast(physicalY)}; } +void InputWindowsManager::SetDragFlagByPointer(std::shared_ptr lastPointerEvent) +{ + if (lastPointerEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_BUTTON_DOWN) { + dragFlag_ = true; + MMI_HILOGD("Is in drag scene"); + } + if (lastPointerEvent->GetPointerAction() == PointerEvent::POINTER_ACTION_BUTTON_UP) { + dragFlag_ = false; + isDragBorder_ = false; + } +} + #ifdef OHOS_BUILD_ENABLE_ONE_HAND_MODE void InputWindowsManager::TouchEnterLeaveEvent(int32_t logicalX, int32_t logicalY, const std::shared_ptr pointerEvent, const WindowInfo* touchWindow) diff --git a/service/window_manager/test/input_windows_manager_ex_test.cpp b/service/window_manager/test/input_windows_manager_ex_test.cpp index 2a43f316a11e10bfbe81d454ef4883bb5df4885c..22a145ba8bcdf3c53cd00fd3a8d552d3e22e5074 100644 --- a/service/window_manager/test/input_windows_manager_ex_test.cpp +++ b/service/window_manager/test/input_windows_manager_ex_test.cpp @@ -92,16 +92,21 @@ HWTEST_F(InputWindowsManagerTest, UpdateTarget_002, TestSize.Level1) ASSERT_NE(inputWindowsManager, nullptr); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; - inputWindowsManager->displayGroupInfo_.focusWindowId = 1; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = 1; WindowInfo windowInfo; windowInfo.id = 1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); std::shared_ptr keyEvent = KeyEvent::Create(); ASSERT_NE(keyEvent, nullptr); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateTarget(keyEvent)); - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.focusWindowId = -1; + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->udsServer_ = nullptr; } @@ -120,16 +125,21 @@ HWTEST_F(InputWindowsManagerTest, UpdateTarget_003, TestSize.Level1) ASSERT_NE(inputWindowsManager, nullptr); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; - inputWindowsManager->displayGroupInfo_.focusWindowId = 1; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = 1; WindowInfo windowInfo; windowInfo.id = 1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); std::shared_ptr keyEvent = KeyEvent::Create(); ASSERT_NE(keyEvent, nullptr); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateTarget(keyEvent)); - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.focusWindowId = -1; + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->udsServer_ = nullptr; } #endif // OHOS_BUILD_ENABLE_KEYBOARD @@ -167,13 +177,18 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_002, TestSi ASSERT_NE(inputWindowsManager, nullptr); DisplayInfo displayInfo; displayInfo.id = 0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsManager->lastPointerEvent_, nullptr); inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE); DisplayGroupInfo displayGroupInfo; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->lastPointerEvent_.reset(); inputWindowsManager->lastPointerEvent_ = nullptr; } @@ -193,14 +208,19 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_003, TestSi ASSERT_NE(inputWindowsManager, nullptr); DisplayInfo displayInfo; displayInfo.id = 0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsManager->lastPointerEvent_, nullptr); inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE); inputWindowsManager->lastPointerEvent_->SetButtonPressed(1); DisplayGroupInfo displayGroupInfo; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->lastPointerEvent_.reset(); inputWindowsManager->lastPointerEvent_ = nullptr; } @@ -220,13 +240,18 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_004, TestSi ASSERT_NE(inputWindowsManager, nullptr); DisplayInfo displayInfo; displayInfo.id = 0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsManager->lastPointerEvent_, nullptr); inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN); DisplayGroupInfo displayGroupInfo; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->lastPointerEvent_.reset(); inputWindowsManager->lastPointerEvent_ = nullptr; } @@ -249,7 +274,12 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_005, TestSi displayInfo.id = 0; displayInfo.x = 8; displayInfo.y = 8; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); WindowInfo windowInfo; windowInfo.id = 1; windowInfo.pid = 11; @@ -260,14 +290,14 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_005, TestSi rect.width = 10; rect.height = 10; windowInfo.pointerHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsManager->lastPointerEvent_, nullptr); inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE); DisplayGroupInfo displayGroupInfo; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->lastPointerEvent_.reset(); inputWindowsManager->lastPointerEvent_ = nullptr; } @@ -289,7 +319,12 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_006, TestSi displayInfo.id = 0; displayInfo.x = 8; displayInfo.y = 8; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); WindowInfo windowInfo; windowInfo.id = 1; windowInfo.pid = 11; @@ -300,7 +335,7 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_006, TestSi rect.width = 10; rect.height = 10; windowInfo.pointerHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsManager->lastPointerEvent_, nullptr); inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_DOWN); @@ -308,8 +343,8 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_006, TestSi inputWindowsManager->dragFlag_ = true; DisplayGroupInfo displayGroupInfo; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->lastPointerEvent_.reset(); inputWindowsManager->lastPointerEvent_ = nullptr; inputWindowsManager->isDragBorder_ = false; @@ -333,7 +368,12 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_007, TestSi displayInfo.id = 0; displayInfo.x = 8; displayInfo.y = 8; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); WindowInfo windowInfo; windowInfo.id = 1; windowInfo.pid = 11; @@ -344,7 +384,7 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_007, TestSi rect.width = 10; rect.height = 10; windowInfo.pointerHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsManager->lastPointerEvent_, nullptr); inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_UP); @@ -352,8 +392,8 @@ HWTEST_F(InputWindowsManagerTest, PointerDrawingManagerOnDisplayInfo_007, TestSi inputWindowsManager->dragFlag_ = true; DisplayGroupInfo displayGroupInfo; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->lastPointerEvent_.reset(); inputWindowsManager->lastPointerEvent_ = nullptr; inputWindowsManager->isDragBorder_ = false; @@ -385,12 +425,17 @@ HWTEST_F(InputWindowsManagerTest, SendPointerEvent_001, TestSize.Level1) int32_t pointerAction = PointerEvent::POINTER_ACTION_UNKNOWN; DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->extraData_.appended = true; inputWindowsManager->extraData_.sourceType = PointerEvent::SOURCE_TYPE_MOUSE; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SendPointerEvent(pointerAction)); inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->extraData_.appended = false; inputWindowsManager->extraData_.sourceType = -1; } @@ -419,12 +464,17 @@ HWTEST_F(InputWindowsManagerTest, SendPointerEvent_002, TestSize.Level1) int32_t pointerAction = PointerEvent::POINTER_ACTION_ENTER_WINDOW ; DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->extraData_.appended = false; inputWindowsManager->extraData_.sourceType = PointerEvent::SOURCE_TYPE_MOUSE; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SendPointerEvent(pointerAction)); inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->extraData_.sourceType = -1; } @@ -452,12 +502,17 @@ HWTEST_F(InputWindowsManagerTest, SendPointerEvent_003, TestSize.Level1) int32_t pointerAction = PointerEvent::POINTER_ACTION_UNKNOWN; DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->extraData_.appended = false; inputWindowsManager->extraData_.sourceType = PointerEvent::SOURCE_TYPE_MOUSE; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SendPointerEvent(pointerAction)); inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->extraData_.sourceType = -1; } @@ -509,13 +564,18 @@ HWTEST_F(InputWindowsManagerTest, SendPointerEvent_005, TestSize.Level1) int32_t pointerAction = PointerEvent::POINTER_ACTION_UNKNOWN; DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->extraData_.appended = true; inputWindowsManager->extraData_.sourceType = PointerEvent::SOURCE_TYPE_MOUSE; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SendPointerEvent(pointerAction)); inputWindowsManager->udsServer_ = nullptr; inputWindowsManager->extraData_.appended = false; - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->extraData_.sourceType = -1; } @@ -563,12 +623,17 @@ HWTEST_F(InputWindowsManagerTest, TransformTipPoint_001, TestSize.Level1) displayInfo.id = 0; displayInfo.uniq = "default0"; displayInfo.direction = DIRECTION90; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); libinput_event_tablet_tool event {}; PhysicalCoordinate coord; int32_t displayId; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TransformTipPoint(&event, coord, displayId)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); } /** @@ -588,12 +653,17 @@ HWTEST_F(InputWindowsManagerTest, TransformTipPoint_002, TestSize.Level1) displayInfo.id = 0; displayInfo.uniq = "default0"; displayInfo.direction = DIRECTION270; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); libinput_event_tablet_tool event {}; PhysicalCoordinate coord; int32_t displayId; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TransformTipPoint(&event, coord, displayId)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); } /** @@ -612,12 +682,17 @@ HWTEST_F(InputWindowsManagerTest, TransformTipPoint_003, TestSize.Level1) displayInfo.id = 0; displayInfo.uniq = "default0"; displayInfo.direction = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); libinput_event_tablet_tool event {}; PhysicalCoordinate coord; int32_t displayId; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TransformTipPoint(&event, coord, displayId)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); } /** @@ -921,12 +996,17 @@ HWTEST_F(InputWindowsManagerTest, CalculateTipPoint_002, TestSize.Level1) displayInfo.id = 0; displayInfo.uniq = "default0"; displayInfo.direction = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); libinput_event_tablet_tool event {}; PhysicalCoordinate coord; int32_t displayId; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->CalculateTipPoint(&event, displayId, coord)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); } /** @@ -968,13 +1048,18 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_001, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); } /** @@ -992,14 +1077,19 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_002, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_DOWN); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); } /** @@ -1018,14 +1108,19 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_003, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_DOWN); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->mouseDownInfo_.id = -1; } @@ -1049,14 +1144,19 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_004, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; } @@ -1077,26 +1177,31 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_005, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; - inputWindowsManager->displayGroupInfo_.focusWindowId = 1; + displayGroupInfoRef.focusWindowId = 1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.displaysInfo.clear(); + displayGroupInfoRef.focusWindowId = -1; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1117,25 +1222,30 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_006, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1156,24 +1266,29 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_007, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1194,24 +1309,29 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_008, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1232,27 +1352,32 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_009, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; inputWindowsManager->isUiExtension_ = true; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_AXIS_UPDATE); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->isUiExtension_ = false; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1272,31 +1397,36 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_010, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; inputWindowsManager->dragFlag_ = true; inputWindowsManager->isDragBorder_ = true; inputWindowsManager->isUiExtension_ = true; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_DOWN); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->dragFlag_ = false; inputWindowsManager->isDragBorder_ = false; inputWindowsManager->isUiExtension_ = false; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1316,31 +1446,36 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_011, TestSize.Level1) WindowInfo windowInfo; windowInfo.id = -1; windowInfo.pid = 11; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; inputWindowsManager->dragFlag_ = true; inputWindowsManager->isDragBorder_ = true; inputWindowsManager->isUiExtension_ = false; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION90; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_UP); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->dragFlag_ = false; inputWindowsManager->isDragBorder_ = false; inputWindowsManager->isUiExtension_ = false; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1361,14 +1496,19 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_012, TestSize.Level1) windowInfo.id = -1; windowInfo.pid = 11; windowInfo.transform.push_back(1.1); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; inputWindowsManager->dragFlag_ = true; inputWindowsManager->isDragBorder_ = true; inputWindowsManager->isUiExtension_ = false; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; inputWindowsManager->captureModeInfo_.isCaptureMode = true; inputWindowsManager->captureModeInfo_.windowId = 1; inputWindowsManager->extraData_.appended = true; @@ -1376,14 +1516,14 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_012, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION90; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_UP); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->dragFlag_ = false; inputWindowsManager->isDragBorder_ = false; inputWindowsManager->isUiExtension_ = false; @@ -1391,7 +1531,7 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_012, TestSize.Level1) inputWindowsManager->captureModeInfo_.windowId = -1; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->extraData_.appended = false; inputWindowsManager->extraData_.sourceType = -1; } @@ -1414,14 +1554,19 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_013, TestSize.Level1) windowInfo.id = -1; windowInfo.pid = 11; windowInfo.transform.push_back(1.1); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; inputWindowsManager->dragFlag_ = true; inputWindowsManager->isDragBorder_ = true; inputWindowsManager->isUiExtension_ = false; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; inputWindowsManager->captureModeInfo_.isCaptureMode = true; inputWindowsManager->captureModeInfo_.windowId = -1; inputWindowsManager->extraData_.appended = true; @@ -1429,21 +1574,21 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_013, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION90; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_UP); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->dragFlag_ = false; inputWindowsManager->isDragBorder_ = false; inputWindowsManager->isUiExtension_ = false; inputWindowsManager->captureModeInfo_.isCaptureMode = false; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->extraData_.appended = false; inputWindowsManager->extraData_.sourceType = -1; } @@ -1466,14 +1611,19 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_014, TestSize.Level1) windowInfo.id = -1; windowInfo.pid = 11; windowInfo.transform.push_back(1.1); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); UDSServer udsServer; inputWindowsManager->udsServer_ = &udsServer; inputWindowsManager->mouseDownInfo_.id = 1; inputWindowsManager->dragFlag_ = true; inputWindowsManager->isDragBorder_ = true; inputWindowsManager->isUiExtension_ = false; - inputWindowsManager->displayGroupInfo_.focusWindowId = -1; + displayGroupInfoRef.focusWindowId = -1; inputWindowsManager->captureModeInfo_.isCaptureMode = true; inputWindowsManager->captureModeInfo_.windowId = -1; inputWindowsManager->extraData_.appended = false; @@ -1481,21 +1631,21 @@ HWTEST_F(InputWindowsManagerTest, UpdateMouseTarget_014, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 0; displayInfo.displayDirection = DIRECTION90; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); PointerEvent::PointerItem item; pointerEvent->AddPointerItem(item); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_UP); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateMouseTarget(pointerEvent)); - inputWindowsManager->displayGroupInfo_.displaysInfo.clear(); + displayGroupInfoRef.displaysInfo.clear(); inputWindowsManager->dragFlag_ = false; inputWindowsManager->isDragBorder_ = false; inputWindowsManager->isUiExtension_ = false; inputWindowsManager->captureModeInfo_.isCaptureMode = false; inputWindowsManager->mouseDownInfo_.id = -1; inputWindowsManager->udsServer_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1593,12 +1743,17 @@ HWTEST_F(InputWindowsManagerTest, DispatchTouch_001, TestSize.Level1) windowInfo.id = 1; windowInfo.pid = 11; windowInfo.flags = 1; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); int32_t pointerAction = PointerEvent::POINTER_ACTION_PULL_IN_WINDOW; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->DispatchTouch(pointerAction)); inputWindowsManager->udsServer_ = nullptr; inputWindowsManager->lastTouchEvent_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); } /** @@ -1628,14 +1783,19 @@ HWTEST_F(InputWindowsManagerTest, DispatchTouch_002, TestSize.Level1) rect.width = 10; rect.height = 10; windowInfo.defaultHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastTouchLogicX_ = 8; inputWindowsManager->lastTouchLogicY_ = 8; int32_t pointerAction = PointerEvent::POINTER_ACTION_PULL_IN_WINDOW; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->DispatchTouch(pointerAction)); inputWindowsManager->udsServer_ = nullptr; inputWindowsManager->lastTouchEvent_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->lastTouchLogicX_ = -1; inputWindowsManager->lastTouchLogicY_ = -1; inputWindowsManager->lastTouchWindowInfo_.id = -1; @@ -1680,14 +1840,19 @@ HWTEST_F(InputWindowsManagerTest, DispatchTouch_003, TestSize.Level1) rect.width = 10; rect.height = 10; windowInfo.defaultHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastTouchLogicX_ = 8; inputWindowsManager->lastTouchLogicY_ = 8; int32_t pointerAction = PointerEvent::POINTER_ACTION_PULL_IN_WINDOW; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->DispatchTouch(pointerAction)); inputWindowsManager->udsServer_ = nullptr; inputWindowsManager->lastTouchEvent_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->lastTouchLogicX_ = -1; inputWindowsManager->lastTouchLogicY_ = -1; } @@ -1727,14 +1892,19 @@ HWTEST_F(InputWindowsManagerTest, DispatchTouch_004, TestSize.Level1) rect.width = 10; rect.height = 10; windowInfo.defaultHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastTouchLogicX_ = 8; inputWindowsManager->lastTouchLogicY_ = 8; int32_t pointerAction = PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->DispatchTouch(pointerAction)); inputWindowsManager->udsServer_ = nullptr; inputWindowsManager->lastTouchEvent_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->lastTouchLogicX_ = -1; inputWindowsManager->lastTouchLogicY_ = -1; } @@ -1774,14 +1944,19 @@ HWTEST_F(InputWindowsManagerTest, DispatchTouch_005, TestSize.Level1) rect.width = 10; rect.height = 10; windowInfo.defaultHotAreas.push_back(rect); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->lastTouchLogicX_ = 8; inputWindowsManager->lastTouchLogicY_ = 8; int32_t pointerAction = PointerEvent::POINTER_ACTION_PULL_OUT_WINDOW; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->DispatchTouch(pointerAction)); inputWindowsManager->udsServer_ = nullptr; inputWindowsManager->lastTouchEvent_ = nullptr; - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); inputWindowsManager->lastTouchLogicX_ = -1; inputWindowsManager->lastTouchLogicY_ = -1; } @@ -2485,7 +2660,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_IsNeedRefreshLayer_006 displayInfo.id = 2; displayInfo.x = 2; displayInfo.y = 3; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); ret = inputWindowsManager->IsNeedRefreshLayer(windowId); EXPECT_FALSE(ret); windowId = 5; @@ -2715,22 +2895,27 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_TouchPointToDisplayPoi DisplayInfo displayInfo; displayInfo.width = -1; displayInfo.height = 3; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TouchPointToDisplayPoint (deviceId, &touch, touchInfo, physicalDisplayId)); displayInfo.width = 3; displayInfo.height = -1; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TouchPointToDisplayPoint (deviceId, &touch, touchInfo, physicalDisplayId)); displayInfo.width = -5; displayInfo.height = -6; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TouchPointToDisplayPoint (deviceId, &touch, touchInfo, physicalDisplayId)); displayInfo.width = 3; displayInfo.height = 2; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->TouchPointToDisplayPoint (deviceId, &touch, touchInfo, physicalDisplayId)); } @@ -2779,7 +2964,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_001 pointerEvent->SetPointerId(1); pointerEvent->SetTargetDisplayId(10); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->touchItemDownInfos_.insert(std::make_pair(1, winInfoEx)); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->FoldScreenRotation(pointerEvent)); } @@ -2805,7 +2995,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_002 pointerEvent->SetPointerId(1); pointerEvent->SetTargetDisplayId(10); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_UNKNOWN); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->touchItemDownInfos_.insert(std::make_pair(1, winInfoEx)); inputWindowsManager->lastDirection_ = std::make_pair(10, static_cast(-1)); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->FoldScreenRotation(pointerEvent)); @@ -2834,7 +3029,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_003 pointerEvent->SetTargetDisplayId(10); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_MOUSE); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION0); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -2862,7 +3062,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_004 pointerEvent->SetTargetDisplayId(10); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_MOUSE); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION0); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -2891,7 +3096,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_005 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_MOUSE); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION0); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -2922,7 +3132,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_006 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION0); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager.touchItemDownInfos_.insert(std::make_pair(1, winInfoEx)); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -2954,7 +3169,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_007 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_UNKNOWN); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION0); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager.touchItemDownInfos_.insert(std::make_pair(1, winInfoEx)); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -2986,7 +3206,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_008 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_UNKNOWN); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION0); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager.touchItemDownInfos_.insert(std::make_pair(1, winInfoEx)); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -3014,7 +3239,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_FoldScreenRotation_009 pointerEvent->SetTargetDisplayId(10); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_UNKNOWN); inputWindowsManager.lastDirection_ = std::make_pair(10, DIRECTION90); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.FoldScreenRotation(pointerEvent)); } @@ -3034,7 +3264,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_RotateScreen, TestSize info.height = 500; coord.x = 200; info.direction = DIRECTION0; - inputWindowsManager.cursorPos_.direction = DIRECTION90; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.direction = DIRECTION90; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); } @@ -3054,7 +3289,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_RotateScreen_001, Test info.width = 500; coord.y = 200; info.direction = DIRECTION0; - inputWindowsManager.cursorPos_.direction = DIRECTION270; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.direction = DIRECTION270; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); } @@ -3089,19 +3329,24 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_RotateScreen_003, Test info.direction = DIRECTION0; info.displayDirection = DIRECTION0; - inputWindowsManager.cursorPos_.displayDirection = DIRECTION270; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.direction = DIRECTION270; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); info.displayDirection = DIRECTION0; - inputWindowsManager.cursorPos_.displayDirection = DIRECTION0; + cursorPosRef.displayDirection = DIRECTION0; info.direction = DIRECTION0; - inputWindowsManager.cursorPos_.direction = DIRECTION270; + cursorPosRef.direction = DIRECTION270; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); info.displayDirection = DIRECTION0; - inputWindowsManager.cursorPos_.displayDirection = DIRECTION0; + cursorPosRef.displayDirection = DIRECTION0; info.direction = DIRECTION0; - inputWindowsManager.cursorPos_.direction = DIRECTION0; + cursorPosRef.direction = DIRECTION0; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); } @@ -3119,9 +3364,14 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_RotateScreen_004, Test InputWindowsManager inputWindowsManager; info.displayDirection = DIRECTION0; - inputWindowsManager.cursorPos_.displayDirection = DIRECTION0; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayDirection = DIRECTION0; info.direction = DIRECTION0; - inputWindowsManager.cursorPos_.direction = DIRECTION0; + cursorPosRef.direction = DIRECTION0; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); } @@ -3140,9 +3390,14 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_RotateScreen_005, Test InputWindowsManager inputWindowsManager; info.displayDirection = DIRECTION0; - inputWindowsManager.cursorPos_.displayDirection = DIRECTION0; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayDirection = DIRECTION0; info.direction = DIRECTION90; - inputWindowsManager.cursorPos_.direction = DIRECTION90; + cursorPosRef.direction = DIRECTION90; EXPECT_NO_FATAL_FAILURE(inputWindowsManager.RotateScreen(info, coord)); } @@ -3161,7 +3416,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_RotateScreen_006, Test InputWindowsManager inputWindowsManager; info.displayDirection = DIRECTION0; - inputWindowsManager.cursorPos_.displayDirection = DIRECTION0; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayDirection = DIRECTION0; info.direction = DIRECTION270; inputWindowsManager.cursorPos_.direction = DIRECTION270; @@ -3410,8 +3670,13 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_IsNeedRefreshLayer, Te inputWindowsManager.mouseLocation_.physicalX = 100; inputWindowsManager.mouseLocation_.physicalY = 100; winInfo.pointerHotAreas.push_back({ 100, 100, 1000, 1000 }); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.windowsInfo.push_back(displayInfo); EXPECT_TRUE(inputWindowsManager.IsNeedRefreshLayer(windowId)); } @@ -3440,8 +3705,13 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_IsNeedRefreshLayer_007 inputWindowsManager.mouseLocation_.physicalX = 100; inputWindowsManager.mouseLocation_.physicalY = 100; winInfo.pointerHotAreas.push_back({ 100, 100, 1000, 1000 }); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.windowsInfo.push_back(displayInfo); EXPECT_TRUE(inputWindowsManager.IsNeedRefreshLayer(windowId)); } @@ -3470,8 +3740,13 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_IsNeedRefreshLayer_008 inputWindowsManager.mouseLocation_.physicalX = 100; inputWindowsManager.mouseLocation_.physicalY = 100; winInfo.pointerHotAreas.push_back({ 100, 100, 1000, 1000 }); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.windowsInfo.push_back(displayInfo); EXPECT_FALSE(inputWindowsManager.IsNeedRefreshLayer(windowId)); } @@ -3499,8 +3774,13 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_IsNeedRefreshLayer_009 inputWindowsManager.mouseLocation_.physicalX = 100; inputWindowsManager.mouseLocation_.physicalY = 100; winInfo.pointerHotAreas.push_back({ 100, 100, INT32_MAX, 1000 }); - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); + displayGroupInfoRef.windowsInfo.push_back(displayInfo); EXPECT_FALSE(inputWindowsManager.IsNeedRefreshLayer(windowId)); } @@ -3519,9 +3799,19 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_AdjustDisplayRotation, DisplayInfo displayInfo; displayInfo.id = 100; displayInfo.direction = DIRECTION90; - inputWindowsManager->cursorPos_.displayId = 100; - inputWindowsManager->cursorPos_.direction = DIRECTION0; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + CursorPosition cursorPosRef; + auto it = inputWindowsManager->cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayId = 100; + cursorPosRef.direction = Direction::DIRECTION0; + DisplayGroupInfo displayGroupInfoRef; + it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->AdjustDisplayRotation()); } @@ -3540,9 +3830,19 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_AdjustDisplayRotation_ DisplayInfo displayInfo; displayInfo.id = 100; displayInfo.direction = DIRECTION90; - inputWindowsManager->cursorPos_.displayId = 100; - inputWindowsManager->cursorPos_.direction = DIRECTION90; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + CursorPosition cursorPosRef; + auto it = inputWindowsManager->cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayId = 100; + cursorPosRef.direction = Direction::DIRECTION90; + DisplayGroupInfo displayGroupInfoRef; + it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->AdjustDisplayRotation()); } @@ -3580,7 +3880,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_TouchPointToDisplayPoi displayInfo.id = 100; displayInfo.uniq = "uniq"; displayInfo.width = -1; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_FALSE(inputWindowsManager.TouchPointToDisplayPoint(deviceId, &touch, touchInfo, physicalDisplayId)); } @@ -3605,7 +3910,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_TouchPointToDisplayPoi displayInfo.uniq = "uniq"; displayInfo.width = 100; displayInfo.height = -1; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_FALSE(inputWindowsManager.TouchPointToDisplayPoint(deviceId, &touch, touchInfo, physicalDisplayId)); } @@ -3632,7 +3942,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_TouchPointToDisplayPoi displayInfo.height = 100; displayInfo.validWidth = displayInfo.width; displayInfo.validHeight = displayInfo.height; - inputWindowsManager.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_FALSE(inputWindowsManager.TouchPointToDisplayPoint(deviceId, &touch, touchInfo, physicalDisplayId)); } @@ -3972,7 +4287,12 @@ HWTEST_F(InputWindowsManagerTest, DrawTouchGraphic_004, TestSize.Level1) DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsManager->knuckleDrawMgr_ = nullptr; inputWindowsManager->knuckleDynamicDrawingManager_ = nullptr; @@ -4036,7 +4356,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_SendUIExtentionPointer DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SendUIExtentionPointerEvent (logicalX, logicalY, windowInfo, pointerEvent)); @@ -4077,7 +4402,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_SendUIExtentionPointer DisplayInfo displayInfo; displayInfo.id = 10; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SendUIExtentionPointerEvent (logicalX, logicalY, windowInfo, pointerEvent)); @@ -4110,7 +4440,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_SelectWindowInfo_003, windowInfo.id = 1; windowInfo.pid = 11; windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->SelectWindowInfo(logicalX, logicalY, pointerEvent)); } diff --git a/service/window_manager/test/input_windows_manager_one_test.cpp b/service/window_manager/test/input_windows_manager_one_test.cpp index 8aff791778940d81225917691e8895cfed665b23..72ea662abca8be9d0dadc96bdf21707d7e02a53e 100644 --- a/service/window_manager/test/input_windows_manager_one_test.cpp +++ b/service/window_manager/test/input_windows_manager_one_test.cpp @@ -119,7 +119,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_ScreenRotateAdju coord.x = 1; coord.y = 0; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION0; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.direction = Direction::DIRECTION0; NiceMock mockInputWindowsManager; EXPECT_CALL(mockInputWindowsManager, IsSceneBoardEnabled) .WillOnce(Return(false)) @@ -130,13 +135,13 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_ScreenRotateAdju coord.x = 1; coord.y = 0; info.direction = DIRECTION0; - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION180; + cursorPosRef.direction = Direction::DIRECTION180; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->ScreenRotateAdjustDisplayXY(info, coord)); coord.x = 1; coord.y = 0; info.direction = DIRECTION0; - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION90; + cursorPosRef.direction = Direction::DIRECTION90; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->ScreenRotateAdjustDisplayXY(info, coord)); } @@ -158,8 +163,13 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_RotateScreen_001 coord.x = 1; coord.y = 0; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION90; - inputWindowsManager->cursorPos_.displayDirection = Direction::DIRECTION90; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.direction = Direction::DIRECTION90; + cursorPosRef.displayDirection = Direction::DIRECTION90; std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_MOUSE); @@ -169,12 +179,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_RotateScreen_001 coord.x = 0; coord.y = 1; - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION270; + cursorPosRef.direction = Direction::DIRECTION270; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->RotateScreen(info, coord)); coord.x = 0; coord.y = 1; - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION180; + cursorPosRef.direction = Direction::DIRECTION180; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->RotateScreen(info, coord)); } @@ -196,8 +206,13 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_RotateScreen_002 coord.x = 1; coord.y = 0; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->cursorPos_.direction = Direction::DIRECTION90; - inputWindowsManager->cursorPos_.displayDirection = Direction::DIRECTION90; + CursorPosition cursorPosRef; + auto it = inputWindowsManager.cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.direction = Direction::DIRECTION90; + cursorPosRef.displayDirection = Direction::DIRECTION90; std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_UNKNOWN); @@ -349,7 +364,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.id = 1; windowInfo.windowInputType = WindowInputType::TRANSMIT_ANTI_AXIS_MOVE; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; std::unique_ptr pixelMap = nullptr; inputWindowsManager->transparentWins_.insert_or_assign(windowInfo.id, std::move(pixelMap)); @@ -380,7 +400,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.windowInputType = WindowInputType::NORMAL; windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; inputWindowsManager->isOpenPrivacyProtectionserver_ = true; inputWindowsManager->privacyProtection_.isOpen = true; @@ -416,7 +441,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.windowInputType = WindowInputType::MIX_LEFT_RIGHT_ANTI_AXIS_MOVE; windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; inputWindowsManager->isOpenPrivacyProtectionserver_ = true; inputWindowsManager->privacyProtection_.isOpen = false; @@ -454,7 +484,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.windowInputType = WindowInputType::NORMAL; windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; inputWindowsManager->isOpenPrivacyProtectionserver_ = true; inputWindowsManager->privacyProtection_.isOpen = false; @@ -493,7 +528,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.windowInputType = WindowInputType::MIX_LEFT_RIGHT_ANTI_AXIS_MOVE; windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; inputWindowsManager->isOpenPrivacyProtectionserver_ = true; inputWindowsManager->privacyProtection_.isOpen = false; @@ -517,8 +557,8 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo winInfo.id = 50; winInfo.defaultHotAreas.push_back(rect); windowInfo.uiExtentionWindowInfo.push_back(winInfo); - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.clear(); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); std::optional result1 = inputWindowsManager->SelectWindowInfo(logicalX, logicalY, pointerEvent); EXPECT_TRUE(result1.has_value()); } @@ -550,7 +590,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; windowInfo.uiExtentionWindowInfo.clear(); std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; inputWindowsManager->isOpenPrivacyProtectionserver_ = true; inputWindowsManager->privacyProtection_.isOpen = false; @@ -590,7 +635,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.isSkipSelfWhenShowOnVirtualScreen = true; windowInfo.uiExtentionWindowInfo.clear(); std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->firstBtnDownWindowInfo_.first = -1; inputWindowsManager->isOpenPrivacyProtectionserver_ = true; inputWindowsManager->privacyProtection_.isOpen = false; @@ -627,7 +677,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.id = 1; info.uiExtentionWindowInfo.push_back(windowInfo); std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(info); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->extraData_.appended = false; inputWindowsManager->firstBtnDownWindowInfo_.first = 1; WindowInfo beginWindowInfo; @@ -661,7 +716,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_SelectWindowInfo windowInfo.id = 0; info.uiExtentionWindowInfo.push_back(windowInfo); std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(info); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); inputWindowsManager->extraData_.appended = false; inputWindowsManager->firstBtnDownWindowInfo_.first = 1; inputWindowsManager->firstBtnDownWindowInfo_.second = -1; @@ -1079,7 +1139,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_DispatchTouch_00 windowInfo.id = 1; windowInfo.flags = 0; windowInfo.windowInputType = WindowInputType::MIX_LEFT_RIGHT_ANTI_AXIS_MOVE; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->DispatchTouch(pointerAction)); } @@ -1160,7 +1225,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_FindPhysicalDisp displayInfo1.id = 0; displayInfo1.dpi = -10; displayInfo1.uniq = "default0"; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo1); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo1); displayInfo.id = 1; displayInfo.x = INT32_MAX; @@ -1341,7 +1411,12 @@ HWTEST_F(InputWindowsManagerOneTest, InputWindowsManagerOneTest_GetPidByWindowId WindowInfo winInfo; winInfo.id = id; windowInfo.uiExtentionWindowInfo.push_back(winInfo); - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); EXPECT_EQ(inputWindowsManager->GetPidByWindowId(id), windowInfo.pid); id = -1; diff --git a/service/window_manager/test/input_windows_manager_test.cpp b/service/window_manager/test/input_windows_manager_test.cpp index 282378ff26c7a78233867a0b886691273af72bf8..e7fdf52898c2a8458673bf8b00d7bfc3c5425145 100644 --- a/service/window_manager/test/input_windows_manager_test.cpp +++ b/service/window_manager/test/input_windows_manager_test.cpp @@ -4417,13 +4417,18 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateCrownTarget_001, std::shared_ptr inputEvent = InputEvent::Create(); EXPECT_NE(inputEvent, nullptr); inputEvent->targetDisplayId_ = -1; - inputWindowsManager.displayGroupInfo_.focusWindowId = -1; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = -1; int32_t ret = inputWindowsManager.UpdateCrownTarget(pointerEvent); EXPECT_NE(ret, RET_OK); inputEvent->targetDisplayId_ = 5; ret = inputWindowsManager.UpdateCrownTarget(pointerEvent); EXPECT_NE(ret, RET_OK); - inputWindowsManager.displayGroupInfo_.focusWindowId = 5; + displayGroupInfoRef.focusWindowId = 5; ret = inputWindowsManager.UpdateCrownTarget(pointerEvent); EXPECT_NE(ret, RET_OK); } @@ -5106,7 +5111,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge inputWindowsMgr.extraData_.pointerId = 150; inputWindowsMgr.extraData_.sourceType = PointerEvent::SOURCE_TYPE_TOUCHSCREEN; pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN); - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5160,7 +5170,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge inputWindowsMgr.extraData_.appended = false; inputWindowsMgr.extraData_.sourceType = PointerEvent::SOURCE_TYPE_MOUSE; pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5236,7 +5251,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN); inputWindowsMgr.isOpenAntiMisTakeObserver_ = false; inputWindowsMgr.antiMistake_.isOpen = true; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5283,7 +5303,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge inputWindowsMgr.extraData_.sourceType = PointerEvent::SOURCE_TYPE_TOUCHSCREEN; inputWindowsMgr.isOpenAntiMisTakeObserver_ = true; inputWindowsMgr.antiMistake_.isOpen = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5326,7 +5351,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge winGroupInfo.windowsInfo.push_back(winInfo); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5371,7 +5401,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge winGroupInfo.windowsInfo.push_back(winInfo); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5414,7 +5449,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge winGroupInfo.windowsInfo.push_back(winInfo); pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5460,7 +5500,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN); inputWindowsMgr.lastTouchEventOnBackGesture_->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5506,7 +5551,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsMgr.lastTouchEventOnBackGesture_->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5552,7 +5602,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsMgr.lastTouchEventOnBackGesture_->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5598,7 +5653,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateTouchScreenTarge pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsMgr.lastTouchEventOnBackGesture_->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL); inputWindowsMgr.extraData_.appended = false; - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); inputWindowsMgr.windowsPerDisplay_.insert(std::make_pair(100, winGroupInfo)); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.UpdateTouchScreenTarget(pointerEvent)); } @@ -5737,17 +5797,22 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_HandleKeyEventWindowId ASSERT_NE(keyEvent, nullptr); WindowInfo winInfo; keyEvent->SetTargetDisplayId(-1); - inputWindowsMgr.displayGroupInfo_.focusWindowId = 50; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = 50; winInfo.id = 50; winInfo.agentWindowId = 100; winInfo.privacyMode = SecureFlag::PRIVACY_MODE; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.HandleKeyEventWindowId(keyEvent)); - inputWindowsMgr.displayGroupInfo_.windowsInfo[0].privacyMode = SecureFlag::DEFAULT_MODE; + displayGroupInfoRef.windowsInfo[0].privacyMode = SecureFlag::DEFAULT_MODE; EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.HandleKeyEventWindowId(keyEvent)); - inputWindowsMgr.displayGroupInfo_.focusWindowId = 80; + displayGroupInfoRef.focusWindowId = 80; EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.HandleKeyEventWindowId(keyEvent)); } @@ -5766,7 +5831,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetDisplayId, TestSize DisplayInfo displayInfo; displayInfo.id = 100; inputEvent->SetTargetDisplayId(-1); - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.GetDisplayId(inputEvent)); } @@ -5793,7 +5863,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetClientFd_004, TestS winInfo.uiExtentionWindowInfo.push_back(winInfo); winInfo.pid = 50; winInfo.flags = 15; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.GetClientFd(pointerEvent, windowId)); windowId = 100; EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.GetClientFd(pointerEvent, windowId)); @@ -5819,11 +5894,16 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetPidAndUpdateTarget, winInfo.privacyUIFlag = true; winInfo.uiExtentionWindowInfo.push_back(winInfo); keyEvent->SetTargetDisplayId(-1); - inputWindowsMgr.displayGroupInfo_.focusWindowId = 10; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = 10; + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.GetPidAndUpdateTarget(keyEvent)); - inputWindowsMgr.displayGroupInfo_.windowsInfo[0].uiExtentionWindowInfo[0].privacyUIFlag = false; + displayGroupInfoRef.windowsInfo[0].uiExtentionWindowInfo[0].privacyUIFlag = false; EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.GetPidAndUpdateTarget(keyEvent)); } @@ -5912,7 +5992,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_DispatchUIExtentionPoi winInfo.agentWindowId = 200; winInfo.uiExtentionWindowInfo.push_back(winInfo); winInfo.id = 300; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.DispatchUIExtentionPointerEvent(logicalX, logicalY, pointerEvent)); } @@ -5959,13 +6044,18 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateCrownTarget, Tes std::shared_ptr pointerEvent = PointerEvent::Create(); ASSERT_NE(pointerEvent, nullptr); pointerEvent->SetTargetDisplayId(-1); - inputWindowsMgr.displayGroupInfo_.focusWindowId = 100; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = 100; winInfo.id = 200; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + displayGroupInfoRef.windowsInfo.push_back(winInfo); winInfo.id = 100; winInfo.agentWindowId = 500; winInfo.privacyMode = SecureFlag::DEFAULT_MODE; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_EQ(inputWindowsMgr.UpdateCrownTarget(pointerEvent), RET_OK); } #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_CROWN @@ -6057,9 +6147,14 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_ReverseXY_001, TestSiz int32_t y = 100; DisplayInfo displayInfo; displayInfo.direction = static_cast(-1); - inputWindowsMgr.displayGroupInfo_.displaysInfo.push_back(displayInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.ReverseXY(x, y)); - inputWindowsMgr.displayGroupInfo_.displaysInfo[0].direction = static_cast(10); + displayGroupInfoRef.displaysInfo[0].direction = static_cast(10); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.ReverseXY(x, y)); } @@ -6110,11 +6205,16 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_DispatchPointerCancel, inputWindowsMgr.lastPointerEvent_ = PointerEvent::Create(); ASSERT_NE(inputWindowsMgr.lastPointerEvent_, nullptr); winInfo.id = 10; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.DispatchPointerCancel(displayId)); - inputWindowsMgr.displayGroupInfo_.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.clear(); winInfo.id = 100; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsMgr.DispatchPointerCancel(displayId)); } @@ -6132,7 +6232,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetPidByWindowId, Test WindowInfo winInfo; winInfo.id = 100; winInfo.pid = 150; - inputWindowsMgr.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsMgr.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsMgr.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_EQ(inputWindowsMgr.GetPidByWindowId(id), winInfo.pid); id = 300; EXPECT_EQ(inputWindowsMgr.GetPidByWindowId(id), RET_ERR); @@ -6355,7 +6460,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateKeyEventDisplayI EXPECT_EQ(keyEvent->GetTargetDisplayId(), 1); DisplayInfo info1 = {.id = 0, .x = 0, .y = 0, .width = 100, .height = 200}; - inputWindowsManager.displayGroupInfo_.displaysInfo.emplace_back(info1); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.emplace_back(info1); inputWindowsManager.UpdateKeyEventDisplayId(keyEvent, focusWindowId); EXPECT_EQ(keyEvent->GetTargetDisplayId(), 0); } @@ -6376,7 +6486,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_OnDisplayRemovedOrComb DisplayInfo info1 = {.id = 0, .x = 0, .y = 0, .width = 100, .height = 200}; DisplayInfo info2 = {.id = 1, .x = 100, .y = 0, .width = 100, .height = 200}; - inputWindowsManager.displayGroupInfo_.displaysInfo = {info1, info2}; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo = {info1, info2}; displayGroupInfo.displaysInfo = {info2}; ret = inputWindowsManager.OnDisplayRemovedOrCombinationChanged(displayGroupInfo); EXPECT_TRUE(ret); @@ -6620,7 +6735,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_CleanInvalidPiexMap, T winInfo.id = 10; std::unique_ptr pixelMap = nullptr; inputWindowsManager.transparentWins_.insert_or_assign(windowId, std::move(pixelMap)); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.CleanInvalidPiexMap()); } @@ -6639,7 +6759,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_CleanInvalidPiexMap_00 winInfo.id = 10; std::unique_ptr pixelMap = nullptr; inputWindowsManager.transparentWins_.insert_or_assign(windowId, std::move(pixelMap)); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(winInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(winInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.CleanInvalidPiexMap()); } @@ -6996,8 +7121,13 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_JudgeCaramaInFore_001, WindowInfo windowInfo; windowInfo.id = 20; - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(windowInfo); - inputWindowsManager.displayGroupInfo_.focusWindowId = 20; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.focusWindowId = 20; EXPECT_EQ(inputWindowsManager.JudgeCaramaInFore(), false); } @@ -7269,7 +7399,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetClientFd_010, TestS WindowInfo windowInfo1; windowInfo1.id = 1; windowInfo1.uiExtentionWindowInfo.push_back(windowInfo1); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(windowInfo1); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo1); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.GetClientFd(pointerEvent)); } @@ -7292,7 +7427,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetClientFd_011, TestS WindowInfo windowInfo1; windowInfo1.id = 1; - windowInfo1.uiExtentionWindowInfo.push_back(windowInfo1); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo1); inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(windowInfo1); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.GetClientFd(pointerEvent)); @@ -7354,7 +7494,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetWindowPid_002, Test WindowInfo windowInfo2; windowInfo2.id = 1; windowInfo1.uiExtentionWindowInfo.push_back(windowInfo2); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(windowInfo1); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo1); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.GetWindowPid(windowId)); } @@ -7375,7 +7520,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetWindowPid_003, Test WindowInfo windowInfo2; windowInfo2.id = 3; windowInfo1.uiExtentionWindowInfo.push_back(windowInfo2); - inputWindowsManager.displayGroupInfo_.windowsInfo.push_back(windowInfo1); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager.displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager.displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo1); EXPECT_NO_FATAL_FAILURE(inputWindowsManager.GetWindowPid(windowId)); } @@ -8569,10 +8719,15 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateCaptureMode_003, DisplayGroupInfo displayGroupInfo; WindowInfo windowInfo; inputWindowsManager->captureModeInfo_.isCaptureMode = true; - inputWindowsManager->displayGroupInfo_.focusWindowId = 25; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.focusWindowId = 25; displayGroupInfo.focusWindowId = 26; windowInfo.id = 10; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + displayGroupInfoRef.windowsInfo.push_back(windowInfo); displayGroupInfo.windowsInfo.push_back(windowInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdateCaptureMode(displayGroupInfo)); @@ -8632,7 +8787,13 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_PointerDrawingManagerO displayInfo.dpi++; displayInfo.x = 300; displayInfo.y = 300; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displayInfo); + inputWindowsManager->lastDpi_ = displayInfo.dpi + 1; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displayInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PointerDrawingManagerOnDisplayInfo(displayGroupInfo)); } @@ -8654,7 +8815,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdatePointerDrawingMa DisplayInfo displaysInfo; inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); inputWindowsManager->lastPointerEvent_->SetButtonPressed(1); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdatePointerDrawingManagerWindowInfo()); } @@ -8672,7 +8838,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdatePointerDrawingMa EXPECT_NE(inputWindowsManager->lastPointerEvent_, nullptr); DisplayInfo displaysInfo; inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdatePointerDrawingManagerWindowInfo()); } @@ -8690,7 +8861,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdatePointerDrawingMa EXPECT_NE(inputWindowsManager->lastPointerEvent_, nullptr); DisplayInfo displaysInfo; inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_UP); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdatePointerDrawingManagerWindowInfo()); } @@ -8708,7 +8884,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdatePointerDrawingMa EXPECT_NE(inputWindowsManager->lastPointerEvent_, nullptr); DisplayInfo displaysInfo; inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_BUTTON_UP); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdatePointerDrawingManagerWindowInfo()); } @@ -8726,7 +8907,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdatePointerDrawingMa EXPECT_NE(inputWindowsManager->lastPointerEvent_, nullptr); DisplayInfo displaysInfo; inputWindowsManager->lastPointerEvent_->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN); - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->UpdatePointerDrawingManagerWindowInfo()); } @@ -8744,9 +8930,14 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_UpdateDisplayIdAndName displaysInfo.id = 1; displaysInfo.uniqueId = 1; displaysInfo.uniq = "abc"; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); displaysInfo.uniqueId = 1000; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); inputWindowsManager->bindInfo_.AddDisplay(1, "abc"); inputWindowsManager->bindInfo_.AddDisplay(1, "abc"); @@ -8765,7 +8956,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetCursorPos_003, Test { CALL_TEST_DEBUG; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->cursorPos_.displayId = -1; + CursorPosition cursorPosRef; + auto it = inputWindowsManager->cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayId = -1; DisplayInfo displaysInfo; displaysInfo.id = 2; displaysInfo.width = 30; @@ -8774,9 +8970,14 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetCursorPos_003, Test displaysInfo.validHeight = displaysInfo.height; displaysInfo.name = "name2"; displaysInfo.uniq = "uniq2"; - inputWindowsManager->displayGroupInfo_.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto iter = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (iter != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = iter->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->GetCursorPos()); - EXPECT_EQ(inputWindowsManager->cursorPos_.displayId, displaysInfo.id); + EXPECT_EQ(cursorPosRef.displayId, displaysInfo.id); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->GetCursorPos()); } @@ -8790,7 +8991,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_GetCursorPos_004, Test { CALL_TEST_DEBUG; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->cursorPos_.displayId = -1; + CursorPosition cursorPosRef; + auto it = inputWindowsManager->cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayId = -1; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->GetCursorPos()); } @@ -8814,9 +9020,14 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_ResetPointerPositionIf displaysInfo.name = "name2"; displaysInfo.uniq = "uniq2"; displayGroupInfo.displaysInfo.push_back(displaysInfo); - inputWindowsManager->cursorPos_.displayId = displaysInfo.id; - inputWindowsManager->cursorPos_.cursorPos.x = 300; - inputWindowsManager->cursorPos_.cursorPos.y = 300; + CursorPosition cursorPosRef; + auto it = inputWindowsManager->cursorPosMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->cursorPosMap_.end()) { + cursorPosRef = it->second; + } + cursorPosRef.displayId = displaysInfo.id; + cursorPosRef.cursorPos.x = 300; + cursorPosRef.cursorPos.y = 300; EXPECT_NO_FATAL_FAILURE(inputWindowsManager->ResetPointerPositionIfOutValidDisplay(displayGroupInfo)); } @@ -8842,7 +9053,12 @@ HWTEST_F( DisplayInfo displaysInfo; displaysInfo.id = 100; pointerEvent->SetTargetDisplayId(displaysInfo.id); - displayGroupInfo.displaysInfo.push_back(displaysInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.displaysInfo.push_back(displaysInfo); pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->CancelTouchScreenEventIfValidDisplayChange(displayGroupInfo)); } @@ -9002,7 +9218,12 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_PrintWindowNavbar_001, WindowInfo windowInfo; windowInfo.id = 20; windowInfo.windowInputType = WindowInputType::MIX_BUTTOM_ANTI_AXIS_MOVE; - inputWindowsManager->displayGroupInfo_.windowsInfo.push_back(windowInfo); + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.push_back(windowInfo); EXPECT_NO_FATAL_FAILURE(inputWindowsManager->PrintWindowNavbar()); } @@ -9193,15 +9414,20 @@ HWTEST_F(InputWindowsManagerTest, InputWindowsManagerTest_CheckAppFocused_001, T windowInfo.pid = pid; windowInfo.id = pid; std::shared_ptr inputWindowsManager = std::make_shared(); - inputWindowsManager->displayGroupInfo_.windowsInfo.clear(); - inputWindowsManager->displayGroupInfo_.windowsInfo.emplace_back(windowInfo); - inputWindowsManager->displayGroupInfo_.focusWindowId = pid; + DisplayGroupInfo displayGroupInfoRef; + auto it = inputWindowsManager->displayGroupInfoMap_.find(DEFAULT_GROUP_ID); + if (it != inputWindowsManager->displayGroupInfoMap_.end()) { + displayGroupInfoRef = it->second; + } + displayGroupInfoRef.windowsInfo.clear(); + displayGroupInfoRef.windowsInfo.emplace_back(windowInfo); + displayGroupInfoRef.focusWindowId = pid; EXPECT_TRUE(inputWindowsManager->CheckAppFocused(pid)); pid++; EXPECT_FALSE(inputWindowsManager->CheckAppFocused(pid)); - inputWindowsManager->displayGroupInfo_.focusWindowId = pid + 1; + displayGroupInfoRef.focusWindowId = pid + 1; EXPECT_FALSE(inputWindowsManager->CheckAppFocused(pid)); } diff --git a/util/common/include/define_multimodal.h b/util/common/include/define_multimodal.h index 56347164b0e17141a52ddd1d9650759ba4c2d799..a7f7308a45804b3a10dc4ad48d366046e2c50571 100644 --- a/util/common/include/define_multimodal.h +++ b/util/common/include/define_multimodal.h @@ -124,6 +124,13 @@ inline constexpr int32_t INVALID_PID { -1 }; } \ } while (0) +#define CHKCC(cond) \ + { \ + if (!(cond)) { \ + continue; \ + } \ + } + #define CHK_PID_AND_TID() \ do { \ MMI_HILOGD("%{public}s, (%{public}d), pid:%{public}d threadId:%{public}" PRIu64, \ @@ -266,6 +273,13 @@ inline constexpr int32_t INVALID_PID { -1 }; } \ } while (0) +#define CHKCC(cond) \ + { \ + if (!(cond)) { \ + continue; \ + } \ + } + #define CHK_PID_AND_TID() \ do { \ MMI_HILOGD("pid:%{public}d threadId:%{public}" PRIu64, GetPid(), GetThisThreadId()); \