From 89f1fa9858d45f5be8e9a1d6d2dd9440197a84d2 Mon Sep 17 00:00:00 2001 From: jjxxx123 Date: Wed, 4 Dec 2024 20:46:12 +0800 Subject: [PATCH 1/5] =?UTF-8?q?hopper=E9=80=82=E9=85=8D=E6=9B=B4=E6=96=B0p?= =?UTF-8?q?ointerEvent->GetDisplayY()=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jjxxx123 --- wm/src/input_transfer_station.cpp | 34 +++++++++++++++++++ .../unittest/input_transfer_station_test.cpp | 19 +++++++++++ 2 files changed, 53 insertions(+) diff --git a/wm/src/input_transfer_station.cpp b/wm/src/input_transfer_station.cpp index 080e4251f8..e71c3993e1 100644 --- a/wm/src/input_transfer_station.cpp +++ b/wm/src/input_transfer_station.cpp @@ -67,12 +67,46 @@ void InputEventListener::OnInputEvent(std::shared_ptr axisEvent) axisEvent->MarkProcessed(); } +void InputEventListener::ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const +{ + auto foldCreaseRegion = Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion(); + if (foldCreaseRegion == nullptr) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "foldCreaseRegion is nullptr"); + return; + } + auto creaseRects = foldCreaseRegion->GetCreaseRects(); + if (creaseRects && creaseRects.empty()) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "creaseRects is empty"); + return; + } + auto rect = creaseRects.front(); + auto display = SingletonContainer::Get().GetDisplayById(property_->GetDisplayId); + if (display == nullptr) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "display is empty"); + return; + } + sptr displayInfo = display->GetDisplayInfo(); + if (displayInfo == nullptr) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "displayInfo is empty"); + return; + } + auto offsetY = rect.height_ + displayInfo->GetHeight(); + if (pointerEvent->GetDisplayY() > offsetY) { + pointerEvent->GetDisplayY() -= offsetY; + TLOGD(WmsLogTag::WMS_EVENT, "rect.height_: %{public}d, displayHeight: %{public}d", rect.height_, displayInfo->GetHeight()); + } +} + void InputEventListener::OnInputEvent(std::shared_ptr pointerEvent) const { if (pointerEvent == nullptr) { TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "PointerEvent is nullptr"); return; } + if (FoldScreenStateInternel::IsSuperFoldDisplayDevice() && + SingletonContainer::Get().GetFoldStatus() == FoldStatus::HALF_FOLD) { + ResetSuperFoldDisplayY(pointerEvent); + } HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "IEL:PointerEvent id:%d action:%d", pointerEvent->GetId(), pointerEvent->GetPointerAction()); // If handling input event at server, client will receive pointEvent that the winId is -1, intercept log error diff --git a/wm/test/unittest/input_transfer_station_test.cpp b/wm/test/unittest/input_transfer_station_test.cpp index a66799de7d..d239325bdb 100644 --- a/wm/test/unittest/input_transfer_station_test.cpp +++ b/wm/test/unittest/input_transfer_station_test.cpp @@ -183,6 +183,25 @@ HWTEST_F(InputTransferStationTest, GetInputChannel, Function | SmallTest | Level InputTransferStation::GetInstance().AddInputWindow(window_); InputTransferStation::GetInstance().GetInputChannel(0); } + +/** + * @tc.name: ResetSuperFoldDisplayY + * @tc.desc: ResetSuperFoldDisplayY + * @tc.type: FUNC + */ +HWTEST_F(InputTransferStationTest, ResetSuperFoldDisplayY, Function | SmallTest | Level2) +{ + auto pointerEvent = MMI::PointerEvent::Create(); + if (!pointerEvent || !listener) { + GTEST_LOG_(INFO) << "Null Pointer"; + return; + } + pointerEvent->SetDisplayY(150); + Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion()->GetCreaseRects().front().height_ = 50; + SingletonContainer::Get().GetDisplayById(property_->GetDisplayId)->GetDisplayInfo()->GetHeight() = 100; + InputTransferStation::GetInstance().ResetSuperFoldDisplayY(pointerEvent); + ASSERT_EQ(pointerEvent->GetDisplayY(), 0); +} } } // namespace Rosen } // namespace OHOS -- Gitee From 8321cae17aee4aa1c8b17ce889164af215c35655 Mon Sep 17 00:00:00 2001 From: jjxxx123 Date: Sat, 7 Dec 2024 14:24:44 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=88=B0=E7=B1=BB=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jjxxx123 --- wm/include/input_transfer_station.h | 2 ++ wm/src/input_transfer_station.cpp | 31 ++++++++++--------- .../unittest/input_transfer_station_test.cpp | 9 ++++-- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/wm/include/input_transfer_station.h b/wm/include/input_transfer_station.h index eae23bacc1..8b0170c71e 100644 --- a/wm/include/input_transfer_station.h +++ b/wm/include/input_transfer_station.h @@ -53,6 +53,8 @@ private: } sptr GetInputChannel(uint32_t windowId); + void ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const + std::mutex mtx_; bool destroyed_ { false }; std::unordered_map> windowInputChannels_; diff --git a/wm/src/input_transfer_station.cpp b/wm/src/input_transfer_station.cpp index e71c3993e1..c803f0b2c7 100644 --- a/wm/src/input_transfer_station.cpp +++ b/wm/src/input_transfer_station.cpp @@ -21,6 +21,10 @@ #include "wm_common_inner.h" #include "gtx_input_event_sender.h" #include +#include +#include "display_manager.h" +#include "fold_screen_controller/super_fold_state_manager.h" +#include "singleton_container.h" namespace OHOS { namespace Rosen { @@ -67,7 +71,7 @@ void InputEventListener::OnInputEvent(std::shared_ptr axisEvent) axisEvent->MarkProcessed(); } -void InputEventListener::ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const +void InputTransferStation::ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const { auto foldCreaseRegion = Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion(); if (foldCreaseRegion == nullptr) { @@ -75,25 +79,22 @@ void InputEventListener::ResetSuperFoldDisplayY(std::shared_ptrGetCreaseRects(); - if (creaseRects && creaseRects.empty()) { + if (creaseRects.empty()) { TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "creaseRects is empty"); return; } auto rect = creaseRects.front(); - auto display = SingletonContainer::Get().GetDisplayById(property_->GetDisplayId); - if (display == nullptr) { - TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "display is empty"); + auto offsetY = rect.height_ + rect.posY_; + MMI::PointerEvent::PointerItem pointerItem; + if (!pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), pointerItem)) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "pointerItem is empty"); return; } - sptr displayInfo = display->GetDisplayInfo(); - if (displayInfo == nullptr) { - TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "displayInfo is empty"); - return; - } - auto offsetY = rect.height_ + displayInfo->GetHeight(); - if (pointerEvent->GetDisplayY() > offsetY) { - pointerEvent->GetDisplayY() -= offsetY; - TLOGD(WmsLogTag::WMS_EVENT, "rect.height_: %{public}d, displayHeight: %{public}d", rect.height_, displayInfo->GetHeight()); + auto displayY_ = pointerItem.GetDisplayY(); + if (displayY_ > offsetY) { + pointerItem.SetDisplayY(displayY_ - offsetY); + pointerEvent->AddPointerItem(pointerItem); + TLOGD(WmsLogTag::WMS_EVENT, "rect.height_: %{public}d, rect.posY_: %{public}d", rect.height_, rect.posY_); } } @@ -105,7 +106,7 @@ void InputEventListener::OnInputEvent(std::shared_ptr pointer } if (FoldScreenStateInternel::IsSuperFoldDisplayDevice() && SingletonContainer::Get().GetFoldStatus() == FoldStatus::HALF_FOLD) { - ResetSuperFoldDisplayY(pointerEvent); + InputTransferStation::GetInstance().ResetSuperFoldDisplayY(pointerEvent); } HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "IEL:PointerEvent id:%d action:%d", pointerEvent->GetId(), pointerEvent->GetPointerAction()); diff --git a/wm/test/unittest/input_transfer_station_test.cpp b/wm/test/unittest/input_transfer_station_test.cpp index d239325bdb..87695d49d9 100644 --- a/wm/test/unittest/input_transfer_station_test.cpp +++ b/wm/test/unittest/input_transfer_station_test.cpp @@ -19,6 +19,7 @@ #include "window_impl.h" #include "mock_window_adapter.h" #include "singleton_mocker.h" +#include "display_manager.h" using namespace testing; using namespace testing::ext; @@ -196,11 +197,13 @@ HWTEST_F(InputTransferStationTest, ResetSuperFoldDisplayY, Function | SmallTest GTEST_LOG_(INFO) << "Null Pointer"; return; } - pointerEvent->SetDisplayY(150); + MMI::PointerEvent::PointerItem pointerItem; + pointerItem.SetDisplayY(150); + pointerEvent->AddPointerItem(pointerItem); Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion()->GetCreaseRects().front().height_ = 50; - SingletonContainer::Get().GetDisplayById(property_->GetDisplayId)->GetDisplayInfo()->GetHeight() = 100; + Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion()->GetCreaseRects().front().posY_ = 100; InputTransferStation::GetInstance().ResetSuperFoldDisplayY(pointerEvent); - ASSERT_EQ(pointerEvent->GetDisplayY(), 0); + ASSERT_EQ(pointerItem.GetDisplayY(), 0); } } } // namespace Rosen -- Gitee From 9dc5cb35bf73c17e92326548696eb83faee11d4d Mon Sep 17 00:00:00 2001 From: jjxxx123 Date: Sat, 7 Dec 2024 16:13:30 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=81=97=E6=BC=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jjxxx123 --- wm/include/input_transfer_station.h | 2 +- wm/src/input_transfer_station.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wm/include/input_transfer_station.h b/wm/include/input_transfer_station.h index 8b0170c71e..d13ff84a71 100644 --- a/wm/include/input_transfer_station.h +++ b/wm/include/input_transfer_station.h @@ -53,7 +53,7 @@ private: } sptr GetInputChannel(uint32_t windowId); - void ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const + void ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const; std::mutex mtx_; bool destroyed_ { false }; diff --git a/wm/src/input_transfer_station.cpp b/wm/src/input_transfer_station.cpp index c803f0b2c7..eb884c2235 100644 --- a/wm/src/input_transfer_station.cpp +++ b/wm/src/input_transfer_station.cpp @@ -21,7 +21,7 @@ #include "wm_common_inner.h" #include "gtx_input_event_sender.h" #include -#include +#include "common/include/fold_screen_state_internel.h" #include "display_manager.h" #include "fold_screen_controller/super_fold_state_manager.h" #include "singleton_container.h" -- Gitee From 9392060745285b8e234a0c042c91b0934c96f55b Mon Sep 17 00:00:00 2001 From: jjxxx123 Date: Sat, 21 Dec 2024 21:16:31 +0800 Subject: [PATCH 4/5] =?UTF-8?q?hopper=E9=9C=80=E6=B1=82=E6=9B=B4=E6=96=B0d?= =?UTF-8?q?isplayY=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jjxxx123 --- wm/include/input_transfer_station.h | 3 +- wm/src/input_transfer_station.cpp | 30 +++++++++++-------- .../unittest/input_transfer_station_test.cpp | 13 ++++++-- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/wm/include/input_transfer_station.h b/wm/include/input_transfer_station.h index d13ff84a71..6aac345a91 100644 --- a/wm/include/input_transfer_station.h +++ b/wm/include/input_transfer_station.h @@ -61,8 +61,9 @@ private: std::shared_ptr inputListener_ = nullptr; std::shared_ptr eventHandler_ = nullptr; const std::string INPUT_AND_VSYNC_THREAD = "InputAndVsyncThread"; + mutable int32_t offsetY_ = -1; - bool isRegisteredMMI_ { false }; + bool isRegisteredMMI_ { false }; }; class InputEventListener : public MMI::IInputEventConsumer { diff --git a/wm/src/input_transfer_station.cpp b/wm/src/input_transfer_station.cpp index eb884c2235..8b37e44110 100644 --- a/wm/src/input_transfer_station.cpp +++ b/wm/src/input_transfer_station.cpp @@ -73,28 +73,32 @@ void InputEventListener::OnInputEvent(std::shared_ptr axisEvent) void InputTransferStation::ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const { - auto foldCreaseRegion = Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion(); - if (foldCreaseRegion == nullptr) { - TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "foldCreaseRegion is nullptr"); - return; - } - auto creaseRects = foldCreaseRegion->GetCreaseRects(); - if (creaseRects.empty()) { - TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "creaseRects is empty"); - return; + if (offsetY_ == -1) { + auto foldCreaseRegion = Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion(); + if (foldCreaseRegion == nullptr) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "foldCreaseRegion is nullptr"); + return; + } + auto creaseRects = foldCreaseRegion->GetCreaseRects(); + if (creaseRects.empty()) { + TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "creaseRects is empty"); + return; + } + auto rect = creaseRects.front(); + offsetY_ = rect.height_ + rect.posY_; + TLOGI(WmsLogTag::WMS_EVENT, "rect.height_: %{public}d, rect.posY_: %{public}d", rect.height_, rect.posY_); } - auto rect = creaseRects.front(); - auto offsetY = rect.height_ + rect.posY_; + auto offsetY = offsetY_; MMI::PointerEvent::PointerItem pointerItem; if (!pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), pointerItem)) { TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "pointerItem is empty"); return; } auto displayY_ = pointerItem.GetDisplayY(); - if (displayY_ > offsetY) { + if (displayY_ >= offsetY) { pointerItem.SetDisplayY(displayY_ - offsetY); pointerEvent->AddPointerItem(pointerItem); - TLOGD(WmsLogTag::WMS_EVENT, "rect.height_: %{public}d, rect.posY_: %{public}d", rect.height_, rect.posY_); + TLOGD(WmsLogTag::WMS_EVENT, "Calculated offsetY: %{public}d", offsetY); } } diff --git a/wm/test/unittest/input_transfer_station_test.cpp b/wm/test/unittest/input_transfer_station_test.cpp index 87695d49d9..933b05ff80 100644 --- a/wm/test/unittest/input_transfer_station_test.cpp +++ b/wm/test/unittest/input_transfer_station_test.cpp @@ -200,10 +200,17 @@ HWTEST_F(InputTransferStationTest, ResetSuperFoldDisplayY, Function | SmallTest MMI::PointerEvent::PointerItem pointerItem; pointerItem.SetDisplayY(150); pointerEvent->AddPointerItem(pointerItem); - Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion()->GetCreaseRects().front().height_ = 50; - Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion()->GetCreaseRects().front().posY_ = 100; + int originalDisplayY = pointerItem.GetDisplayY(); InputTransferStation::GetInstance().ResetSuperFoldDisplayY(pointerEvent); - ASSERT_EQ(pointerItem.GetDisplayY(), 0); + pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), pointerItem); + int updatedDisplayY = pointerItem.GetDisplayY(); + ASSERT_EQ(updatedDisplayY, originalDisplayY); + + InputTransferStation::GetInstance().offsetY_ = 150; + InputTransferStation::GetInstance().ResetSuperFoldDisplayY(pointerEvent); + pointerEvent->GetPointerItem(pointerEvent->GetPointerId(), pointerItem); + updatedDisplayY = pointerItem.GetDisplayY(); + ASSERT_EQ(updatedDisplayY, originalDisplayY - 150); } } } // namespace Rosen -- Gitee From 9abf9f7db7293c3a9e85c450990242420d15aadb Mon Sep 17 00:00:00 2001 From: jjxxx123 Date: Mon, 23 Dec 2024 09:47:59 +0800 Subject: [PATCH 5/5] =?UTF-8?q?hopper=E6=8A=98=E5=8F=A0=E6=80=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0displayY=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jjxxx123 --- wm/include/input_transfer_station.h | 2 +- wm/src/input_transfer_station.cpp | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/wm/include/input_transfer_station.h b/wm/include/input_transfer_station.h index 6aac345a91..8a46755d98 100644 --- a/wm/include/input_transfer_station.h +++ b/wm/include/input_transfer_station.h @@ -53,7 +53,7 @@ private: } sptr GetInputChannel(uint32_t windowId); - void ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const; + void ResetSuperFoldDisplayY(std::shared_ptr pointerEvent); std::mutex mtx_; bool destroyed_ { false }; diff --git a/wm/src/input_transfer_station.cpp b/wm/src/input_transfer_station.cpp index 8b37e44110..af53fa3457 100644 --- a/wm/src/input_transfer_station.cpp +++ b/wm/src/input_transfer_station.cpp @@ -71,7 +71,7 @@ void InputEventListener::OnInputEvent(std::shared_ptr axisEvent) axisEvent->MarkProcessed(); } -void InputTransferStation::ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) const +void InputTransferStation::ResetSuperFoldDisplayY(std::shared_ptr pointerEvent) { if (offsetY_ == -1) { auto foldCreaseRegion = Rosen::DisplayManager::GetInstance().GetCurrentFoldCreaseRegion(); @@ -88,17 +88,20 @@ void InputTransferStation::ResetSuperFoldDisplayY(std::shared_ptrGetPointerItem(pointerEvent->GetPointerId(), pointerItem)) { TLOGE(WmsLogTag::WMS_INPUT_KEY_FLOW, "pointerItem is empty"); return; } auto displayY_ = pointerItem.GetDisplayY(); - if (displayY_ >= offsetY) { - pointerItem.SetDisplayY(displayY_ - offsetY); + if (displayY_ >= offsetY_) { + pointerItem.SetDisplayY(displayY_ - offsetY_); pointerEvent->AddPointerItem(pointerItem); - TLOGD(WmsLogTag::WMS_EVENT, "Calculated offsetY: %{public}d", offsetY); + TLOGD(WmsLogTag::WMS_EVENT, "Calculated offsetY_: %{public}d", offsetY_); } } -- Gitee