diff --git a/frameworks/base/ressched/ressched_touch_optimizer.cpp b/frameworks/base/ressched/ressched_touch_optimizer.cpp index 8a69a8f3d3ec387289500a6931f6e219073f873e..cccd09fd40f349087586073e8067b7ef3c4e8bd9 100644 --- a/frameworks/base/ressched/ressched_touch_optimizer.cpp +++ b/frameworks/base/ressched/ressched_touch_optimizer.cpp @@ -236,7 +236,7 @@ bool ResSchedTouchOptimizer::RVSPointCheckWithSignal(TouchEvent& touchEvent, con // Calculate gap for the last element if (std::next(it) == curDeque.rend()) { gap = pointCurrent - pointBefore; - uint32_t direction = gap < 0 ? RVS_DIRECTION::RVS_DOWN_LEFT : RVS_DIRECTION::RVS_UP_RIGHT; + int32_t direction = gap < 0 ? RVS_DIRECTION::RVS_DOWN_LEFT : RVS_DIRECTION::RVS_UP_RIGHT; // Update reverse signal for the specified axis if (axis == RVS_AXIS::RVS_AXIS_X) { touchEvent.xReverse = direction; @@ -291,7 +291,7 @@ bool ResSchedTouchOptimizer::RVSPointCheckWithoutSignal(TouchEvent& touchEvent, } // Process the last element if (std::next(it) == curDeque.rend()) { - uint32_t direction = gap2 < 0 ? RVS_DIRECTION::RVS_DOWN_LEFT : RVS_DIRECTION::RVS_UP_RIGHT; + int32_t direction = gap2 < 0 ? RVS_DIRECTION::RVS_DOWN_LEFT : RVS_DIRECTION::RVS_UP_RIGHT; // Update reverse signal for the specified axis if (axis == RVS_AXIS::RVS_AXIS_X) { touchEvent.xReverse = direction; @@ -429,10 +429,10 @@ void ResSchedTouchOptimizer::SelectSinglePoint(std::list& touchEvent if (!RVSEnableCheck()) { return; } - // Group points by ID std::map> groupedPoints; for (const auto& point : touchEvents) { + // Non-touch events are not processed if (point.sourceTool != SourceTool::FINGER) { return; } @@ -454,14 +454,11 @@ void ResSchedTouchOptimizer::SelectSinglePoint(std::list& touchEvent break; } } - - // If no reversal found, use the last point - if (!foundReverse && !points.empty()) { - selectedPoint = points.back(); - } // Add selected point to result if reversal was found - if (foundReverse && !points.empty()) { + if (foundReverse) { selectedPoints.push_back(selectedPoint); + } else if (!points.empty()) { + selectedPoints.push_back(points.back()); } } touchEvents.clear(); @@ -530,7 +527,7 @@ double ResSchedTouchOptimizer::HandleMainDelta(double& mainDelta, const double& */ void ResSchedTouchOptimizer::SetSlideAcceptOffset(Offset offset) { - if (!RVSEnableCheck()) { + if (RVSEnableCheck()) { slideAcceptOffset_.SetX(offset.GetX()); slideAcceptOffset_.SetY(offset.GetY()); accumulatedDistance_ = 0.0; @@ -626,6 +623,10 @@ bool ResSchedTouchOptimizer::HandleState1(const TouchEvent& point, const bool re std::unordered_map& dptGap = (axis == RVS_AXIS::RVS_AXIS_X) ? dptGapX_ : dptGapY_; int32_t rvsSignal = (axis == RVS_AXIS::RVS_AXIS_X) ? point.xReverse : point.yReverse; + if (dptQueue.size() < RVS_QUEUE_RTWO_INDEX) { + return false; + } + // Handle reverse signal if (rvsSignal) { // Transition to OFFSET state if rvsPoint is not sent to display