diff --git a/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp b/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp index e44bd52fc25..1b9561794ab 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp @@ -22,10 +22,10 @@ #include "bridge/declarative_frontend/engine/functions/js_drag_function.h" #include "bridge/declarative_frontend/engine/functions/js_function.h" #include "bridge/declarative_frontend/jsview/js_utils.h" -#include "core/components_ng/base/view_abstract_model.h" #include "bridge/declarative_frontend/jsview/js_view_common_def.h" #include "bridge/declarative_frontend/jsview/models/list_item_model_impl.h" #include "core/common/container.h" +#include "core/components_ng/base/view_abstract_model.h" #include "core/components_ng/event/gesture_event_hub.h" #include "core/components_ng/pattern/list/list_item_model.h" #include "core/components_ng/pattern/list/list_item_model_ng.h" @@ -171,7 +171,6 @@ void JSListItem::SetSelected(const JSCallbackInfo& info) void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef& jsValue, bool isStartArea) { auto deleteAreaObj = JSRef::Cast(jsValue); - auto listItemTheme = GetTheme(); std::function builderAction; auto builderObject = deleteAreaObj->GetProperty("builder"); @@ -179,15 +178,8 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef(JSRef::Cast(builderObject)); builderAction = [builderFunc]() { builderFunc->Execute(); }; } - auto defaultDeleteAnimation = deleteAreaObj->GetProperty("useDefaultDeleteAnimation"); - bool useDefaultDeleteAnimation = true; - if (defaultDeleteAnimation->IsBoolean()) { - useDefaultDeleteAnimation = defaultDeleteAnimation->ToBoolean(); - } + auto onAction = deleteAreaObj->GetProperty("onAction"); - if (!onAction->IsFunction()) { - onAction = deleteAreaObj->GetProperty("onDelete"); - } std::function onActionCallback; if (onAction->IsFunction()) { onActionCallback = [execCtx = args.GetExecutionContext(), func = JSRef::Cast(onAction)]() { @@ -196,9 +188,6 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRefGetProperty("onEnterActionArea"); - if (!onEnterActionArea->IsFunction()) { - onEnterActionArea = deleteAreaObj->GetProperty("onEnterDeleteArea"); - } std::function onEnterActionAreaCallback; if (onEnterActionArea->IsFunction()) { onEnterActionAreaCallback = [execCtx = args.GetExecutionContext(), @@ -208,9 +197,6 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRefGetProperty("onExitActionArea"); - if (!onExitActionArea->IsFunction()) { - onExitActionArea = deleteAreaObj->GetProperty("onExitDeleteArea"); - } std::function onExitActionAreaCallback; if (onExitActionArea->IsFunction()) { onExitActionAreaCallback = [execCtx = args.GetExecutionContext(), @@ -222,10 +208,8 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRefGetProperty("actionAreaDistance"); CalcDimension length; if (!ParseJsDimensionVp(actionAreaDistance, length)) { - actionAreaDistance = deleteAreaObj->GetProperty("deleteAreaDistance"); - if (!ParseJsDimensionVp(actionAreaDistance, length)) { - length = listItemTheme->GetDeleteDistance(); - } + auto listItemTheme = GetTheme(); + length = listItemTheme->GetDeleteDistance(); } auto onStateChange = deleteAreaObj->GetProperty("onStateChange"); std::function onStateChangeCallback; @@ -239,9 +223,9 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRefSetDeleteArea(std::move(builderAction), useDefaultDeleteAnimation, - std::move(onActionCallback), std::move(onEnterActionAreaCallback), std::move(onExitActionAreaCallback), - std::move(onStateChangeCallback), length, isStartArea); + ListItemModel::GetInstance()->SetDeleteArea(std::move(builderAction), std::move(onActionCallback), + std::move(onEnterActionAreaCallback), std::move(onExitActionAreaCallback), std::move(onStateChangeCallback), + length, isStartArea); } void JSListItem::SetSwiperAction(const JSCallbackInfo& args) @@ -253,20 +237,34 @@ void JSListItem::SetSwiperAction(const JSCallbackInfo& args) JSRef obj = JSRef::Cast(args[0]); std::function startAction; auto startObject = obj->GetProperty("start"); - if (startObject->IsFunction()) { - auto builderFunc = AceType::MakeRefPtr(JSRef::Cast(startObject)); - startAction = [builderFunc]() { builderFunc->Execute(); }; - } else if (startObject->IsObject()) { - JsParseDeleteArea(args, startObject, true); + if (startObject->IsObject()) { + if (startObject->IsFunction()) { + auto builderFunc = AceType::MakeRefPtr(JSRef::Cast(startObject)); + startAction = [builderFunc]() { builderFunc->Execute(); }; + ListItemModel::GetInstance()->SetDeleteArea( + std::move(startAction), nullptr, nullptr, nullptr, nullptr, CalcDimension(0), true); + } else { + JsParseDeleteArea(args, startObject, true); + } + } else { + ListItemModel::GetInstance()->SetDeleteArea( + nullptr, nullptr, nullptr, nullptr, nullptr, CalcDimension(0), true); } std::function endAction; auto endObject = obj->GetProperty("end"); - if (endObject->IsFunction()) { - auto builderFunc = AceType::MakeRefPtr(JSRef::Cast(endObject)); - endAction = [builderFunc]() { builderFunc->Execute(); }; - } else if (endObject->IsObject()) { - JsParseDeleteArea(args, endObject, false); + if (startObject->IsObject()) { + if (startObject->IsFunction()) { + auto builderFunc = AceType::MakeRefPtr(JSRef::Cast(endObject)); + endAction = [builderFunc]() { builderFunc->Execute(); }; + ListItemModel::GetInstance()->SetDeleteArea( + std::move(endAction), nullptr, nullptr, nullptr, nullptr, CalcDimension(0), false); + } else { + JsParseDeleteArea(args, endObject, false); + } + } else { + ListItemModel::GetInstance()->SetDeleteArea( + nullptr, nullptr, nullptr, nullptr, nullptr, CalcDimension(0), false); } auto edgeEffect = obj->GetProperty("edgeEffect"); @@ -286,8 +284,9 @@ void JSListItem::SetSwiperAction(const JSCallbackInfo& args) return; }; } - ListItemModel::GetInstance()->SetSwiperAction(std::move(startAction), std::move(endAction), - std::move(onOffsetChangeCallback), swipeEdgeEffect); + + // use SetDeleteArea to update builder function + ListItemModel::GetInstance()->SetSwiperAction(nullptr, nullptr, std::move(onOffsetChangeCallback), swipeEdgeEffect); } void JSListItem::SelectCallback(const JSCallbackInfo& args) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.cpp index b7ccd1f9502..e9ffb1489a9 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.cpp @@ -117,8 +117,8 @@ void ListItemModelImpl::SetSelectCallback(OnSelectFunc&& selectCallback) JSViewSetProperty(&V2::ListItemComponent::SetOnSelectId, std::move(selectCallback)); } -void ListItemModelImpl::SetDeleteArea(std::function&& builderAction, bool useDefaultDeleteAnimation, - OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, +void ListItemModelImpl::SetDeleteArea(std::function&& builderAction, OnDeleteEvent&& onDelete, + OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) {}; void ListItemModelImpl::SetOnDragStart(NG::OnDragStartFunc&& onDragStart) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.h index 07864149c42..9dfd7ab3af8 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/list_item_model_impl.h @@ -39,7 +39,7 @@ public: [[maybe_unused]] OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) override; void SetSelectCallback(OnSelectFunc&& selectCallback) override; void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) override; - void SetDeleteArea(std::function&& builderAction, bool useDefaultDeleteAnimation, OnDeleteEvent&& onDelete, + void SetDeleteArea(std::function&& builderAction, OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) override; diff --git a/frameworks/core/components_ng/pattern/list/list_item_model.h b/frameworks/core/components_ng/pattern/list/list_item_model.h index 8748cb6bfcb..f26f20ce1d5 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_model.h +++ b/frameworks/core/components_ng/pattern/list/list_item_model.h @@ -43,12 +43,13 @@ public: virtual void SetSelectable(bool selectable) = 0; virtual void SetSelected(bool selected) = 0; virtual void SetSelectChangeEvent(std::function&& changeEvent) = 0; + // use SetDeleteArea to update builder function virtual void SetSwiperAction(std::function&& startAction, std::function&& endAction, OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) = 0; virtual void SetSelectCallback(OnSelectFunc&& selectCallback) = 0; virtual void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) = 0; - virtual void SetDeleteArea(std::function&& builderAction, bool useDefaultDeleteAnimation, - OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, + virtual void SetDeleteArea(std::function&& builderAction, OnDeleteEvent&& onDelete, + OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) = 0; private: diff --git a/frameworks/core/components_ng/pattern/list/list_item_model_ng.cpp b/frameworks/core/components_ng/pattern/list/list_item_model_ng.cpp index 97e74874059..d81f610219d 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/list/list_item_model_ng.cpp @@ -38,8 +38,7 @@ void ListItemModelNG::Create(std::function&& deepRenderFunc, V2:: return ViewStackProcessor::GetInstance()->Finish(); }; ACE_SCOPED_TRACE("Create[%s][self:%d]", V2::LIST_ITEM_ETS_TAG, nodeId); - auto frameNode = FrameNode::GetOrCreateFrameNode( - V2::LIST_ITEM_ETS_TAG, nodeId, + auto frameNode = FrameNode::GetOrCreateFrameNode(V2::LIST_ITEM_ETS_TAG, nodeId, [shallowBuilder = AceType::MakeRefPtr(std::move(deepRender)), itemStyle = listItemStyle]() { return AceType::MakeRefPtr(shallowBuilder, itemStyle); }); @@ -54,7 +53,7 @@ void ListItemModelNG::Create() []() { return AceType::MakeRefPtr(nullptr, V2::ListItemStyle::NONE); }); stack->Push(frameNode); } - +// use SetDeleteArea to update builder function void ListItemModelNG::SetSwiperAction(std::function&& startAction, std::function&& endAction, OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) { @@ -62,27 +61,7 @@ void ListItemModelNG::SetSwiperAction(std::function&& startAction, std:: CHECK_NULL_VOID(frameNode); auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); - RefPtr startNode; - if (startAction) { - NG::ScopedViewStackProcessor builderViewStackProcessor; - startAction(); - startNode = NG::ViewStackProcessor::GetInstance()->Finish(); - } - if (startNode) { - pattern->SetStartNode(startNode); - } - RefPtr endNode; - if (endAction) { - NG::ScopedViewStackProcessor builderViewStackProcessor; - endAction(); - endNode = NG::ViewStackProcessor::GetInstance()->Finish(); - } - if (endNode) { - pattern->SetEndNode(endNode); - } - if (onOffsetChangeFunc) { - pattern->SetOffsetChangeCallBack(std::move(onOffsetChangeFunc)); - } + pattern->SetOffsetChangeCallBack(std::move(onOffsetChangeFunc)); ACE_UPDATE_LAYOUT_PROPERTY(ListItemLayoutProperty, EdgeEffect, edgeEffect); } @@ -135,8 +114,8 @@ void ListItemModelNG::SetSelectCallback(OnSelectFunc&& selectCallback) eventHub->SetOnSelect(std::move(selectCallback)); } -void ListItemModelNG::SetDeleteArea(std::function&& builderAction, bool useDefaultDeleteAnimation, - OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, +void ListItemModelNG::SetDeleteArea(std::function&& builderAction, OnDeleteEvent&& onDelete, + OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) { auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); @@ -152,12 +131,9 @@ void ListItemModelNG::SetDeleteArea(std::function&& builderAction, bool builderAction(); startNode = NG::ViewStackProcessor::GetInstance()->Finish(); } - if (startNode) { - pattern->SetStartNode(startNode); - } + pattern->SetStartNode(startNode); InstallSwiperCallBack(eventHub, std::move(onDelete), std::move(onEnterDeleteArea), std::move(onExitDeleteArea), std::move(onStateChange), isStartArea); - pattern->SetUseStartDefaultDeleteAnimation(useDefaultDeleteAnimation); ACE_UPDATE_LAYOUT_PROPERTY(ListItemLayoutProperty, StartDeleteAreaDistance, length); } else { RefPtr endNode; @@ -166,12 +142,9 @@ void ListItemModelNG::SetDeleteArea(std::function&& builderAction, bool builderAction(); endNode = NG::ViewStackProcessor::GetInstance()->Finish(); } - if (endNode) { - pattern->SetEndNode(endNode); - } + pattern->SetEndNode(endNode); InstallSwiperCallBack(eventHub, std::move(onDelete), std::move(onEnterDeleteArea), std::move(onExitDeleteArea), std::move(onStateChange), isStartArea); - pattern->SetUseEndDefaultDeleteAnimation(useDefaultDeleteAnimation); ACE_UPDATE_LAYOUT_PROPERTY(ListItemLayoutProperty, EndDeleteAreaDistance, length); } } @@ -185,31 +158,15 @@ void ListItemModelNG::InstallSwiperCallBack(RefPtr eventHub, { CHECK_NULL_VOID(eventHub); if (isStartArea) { - if (onDelete) { - eventHub->SetStartOnDelete(std::move(onDelete)); - } - if (onEnterDeleteArea) { - eventHub->SetOnEnterStartDeleteArea(std::move(onEnterDeleteArea)); - } - if (onExitDeleteArea) { - eventHub->SetOnExitStartDeleteArea(std::move(onExitDeleteArea)); - } - if (onStateChange) { - eventHub->SetStartOnStateChange(std::move(onStateChange)); - } + eventHub->SetStartOnDelete(std::move(onDelete)); + eventHub->SetOnEnterStartDeleteArea(std::move(onEnterDeleteArea)); + eventHub->SetOnExitStartDeleteArea(std::move(onExitDeleteArea)); + eventHub->SetStartOnStateChange(std::move(onStateChange)); } else { - if (onDelete) { - eventHub->SetEndOnDelete(std::move(onDelete)); - } - if (onEnterDeleteArea) { - eventHub->SetOnEnterEndDeleteArea(std::move(onEnterDeleteArea)); - } - if (onExitDeleteArea) { - eventHub->SetOnExitEndDeleteArea(std::move(onExitDeleteArea)); - } - if (onStateChange) { - eventHub->SetEndOnStateChange(std::move(onStateChange)); - } + eventHub->SetEndOnDelete(std::move(onDelete)); + eventHub->SetOnEnterEndDeleteArea(std::move(onEnterDeleteArea)); + eventHub->SetOnExitEndDeleteArea(std::move(onExitDeleteArea)); + eventHub->SetEndOnStateChange(std::move(onStateChange)); } } } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/list/list_item_model_ng.h b/frameworks/core/components_ng/pattern/list/list_item_model_ng.h index 52370953c25..65338aa4f93 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_model_ng.h +++ b/frameworks/core/components_ng/pattern/list/list_item_model_ng.h @@ -19,8 +19,8 @@ #include #include "base/utils/macros.h" -#include "core/components_ng/pattern/list/list_item_model.h" #include "core/components_ng/pattern/list/list_item_event_hub.h" +#include "core/components_ng/pattern/list/list_item_model.h" namespace OHOS::Ace::NG { class ACE_EXPORT ListItemModelNG : public ListItemModel { @@ -39,9 +39,10 @@ public: OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) override; void SetSelectCallback(OnSelectFunc&& selectCallback) override; void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) override {} - void SetDeleteArea(std::function&& builderAction, bool useDefaultDeleteAnimation, OnDeleteEvent&& onDelete, + void SetDeleteArea(std::function&& builderAction, OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea, OnStateChangedEvent&& onStateChangeEvent, const Dimension& length, bool isStartArea) override; + private: void InstallSwiperCallBack(RefPtr eventHub, OnDeleteEvent&& onDelete, diff --git a/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp b/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp index d3cdc3672cd..86e37f3c3e5 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp +++ b/frameworks/core/components_ng/pattern/list/list_item_pattern.cpp @@ -124,6 +124,7 @@ void ListItemPattern::SetStartNode(const RefPtr& startNode) host->ReplaceChild(host->GetChildAtIndex(startNodeIndex_), startNode); } } else if (HasStartNode()) { + host->RemoveChildAtIndex(startNodeIndex_); if (endNodeIndex_ > startNodeIndex_) { endNodeIndex_--; } @@ -152,6 +153,7 @@ void ListItemPattern::SetEndNode(const RefPtr& endNode) host->ReplaceChild(host->GetChildAtIndex(endNodeIndex_), endNode); } } else if (HasEndNode()) { + host->RemoveChildAtIndex(endNodeIndex_); if (startNodeIndex_ > endNodeIndex_) { startNodeIndex_--; } @@ -239,6 +241,9 @@ void ListItemPattern::OnModifyDone() InitSwiperAction(axisChanged); return; } + auto gestureHub = listItemEventHub->GetOrCreateGestureEventHub(); + CHECK_NULL_VOID(gestureHub); + gestureHub->RemovePanEvent(panEvent_); panEvent_.Reset(); springController_.Reset(); SetAccessibilityAction(); @@ -527,6 +532,7 @@ void ListItemPattern::StartSpringMotion(float start, float end, float velocity, CHECK_NULL_VOID(listItem); if (NearZero(listItem->curOffset_)) { listItem->ResetToItemChild(); + listItem->ResetNodeSize(); listItem->FireSwipeActionOffsetChange(SWIPE_SPRING_MASS, listItem->curOffset_); } listItem->MarkDirtyNode(); @@ -611,27 +617,17 @@ void ListItemPattern::HandleDragEnd(const GestureEvent& info) auto endOnDelete = listItemEventHub->GetEndOnDelete(); if (hasStartDeleteArea_ && !HasStartNode() && startOnDelete && GreatOrEqual(curOffset_, startDeleteAreaDistance_)) { - if (!useStartDefaultDeleteAnimation_) { - startOnDelete(); - FireSwipeActionStateChange(SwipeActionState::ACTIONING); - } else { - DoDeleteAnimation(true); - startOnDelete(); - return; - } + DoDeleteAnimation(true); + startOnDelete(); + return; } else if (hasStartDeleteArea_ && !HasStartNode()) { FireSwipeActionStateChange(SwipeActionState::COLLAPSED); } if (hasEndDeleteArea_ && !HasEndNode() && endOnDelete && GreatOrEqual(-curOffset_, endDeleteAreaDistance_)) { - if (!useEndDefaultDeleteAnimation_) { - endOnDelete(); - FireSwipeActionStateChange(SwipeActionState::ACTIONING); - } else { - DoDeleteAnimation(false); - endOnDelete(); - return; - } + DoDeleteAnimation(false); + endOnDelete(); + return; } else if (hasEndDeleteArea_ && !HasEndNode()) { FireSwipeActionStateChange(SwipeActionState::COLLAPSED); } @@ -644,14 +640,9 @@ void ListItemPattern::HandleDragEnd(const GestureEvent& info) return; } if (hasStartDeleteArea_ && startOnDelete && GreatOrEqual(curOffset_, width + startDeleteAreaDistance_)) { - if (!useStartDefaultDeleteAnimation_) { - startOnDelete(); - FireSwipeActionStateChange(SwipeActionState::ACTIONING); - } else { - DoDeleteAnimation(true); - startOnDelete(); - return; - } + DoDeleteAnimation(true); + startOnDelete(); + return; } if (swiperIndex_ == ListItemSwipeIndex::ITEM_CHILD && width > 0 && (curOffset_ > width * threshold || reachRightSpeed)) { @@ -672,14 +663,9 @@ void ListItemPattern::HandleDragEnd(const GestureEvent& info) return; } if (hasEndDeleteArea_ && endOnDelete && GreatOrEqual(-curOffset_, width + endDeleteAreaDistance_)) { - if (!useEndDefaultDeleteAnimation_) { - endOnDelete(); - FireSwipeActionStateChange(SwipeActionState::ACTIONING); - } else { - DoDeleteAnimation(false); - endOnDelete(); - return; - } + DoDeleteAnimation(false); + endOnDelete(); + return; } if (swiperIndex_ == ListItemSwipeIndex::ITEM_CHILD && width > 0 && (width * threshold < -curOffset_ || reachLeftSpeed)) { diff --git a/frameworks/core/components_ng/pattern/list/list_item_pattern.h b/frameworks/core/components_ng/pattern/list/list_item_pattern.h index 849c71adfe2..bdf5dc1da10 100644 --- a/frameworks/core/components_ng/pattern/list/list_item_pattern.h +++ b/frameworks/core/components_ng/pattern/list/list_item_pattern.h @@ -153,16 +153,6 @@ public: } } - void SetUseStartDefaultDeleteAnimation(bool useStartDefaultDeleteAnimation) - { - useStartDefaultDeleteAnimation_ = useStartDefaultDeleteAnimation; - } - - void SetUseEndDefaultDeleteAnimation(bool useEndDefaultDeleteAnimation) - { - useEndDefaultDeleteAnimation_ = useEndDefaultDeleteAnimation; - } - int32_t GetIndexInList() const { return indexInList_; @@ -229,9 +219,12 @@ private: void ResetToItemChild() { swiperIndex_ = ListItemSwipeIndex::ITEM_CHILD; + FireSwipeActionStateChange(SwipeActionState::COLLAPSED); + } + void ResetNodeSize() + { startNodeSize_ = 0.0f; endNodeSize_ = 0.0f; - FireSwipeActionStateChange(SwipeActionState::COLLAPSED); } RefPtr shallowBuilder_; @@ -257,8 +250,6 @@ private: bool hasEndDeleteArea_ = false; bool inStartDeleteArea_ = false; bool inEndDeleteArea_ = false; - bool useStartDefaultDeleteAnimation_ = false; - bool useEndDefaultDeleteAnimation_ = false; RefPtr panEvent_; RefPtr springController_; diff --git a/test/unittest/core/pattern/list/list_test_ng.cpp b/test/unittest/core/pattern/list/list_test_ng.cpp index 22dbcef9277..ef1c62c71b4 100644 --- a/test/unittest/core/pattern/list/list_test_ng.cpp +++ b/test/unittest/core/pattern/list/list_test_ng.cpp @@ -109,8 +109,8 @@ protected: void Create(const std::function& callback = nullptr); void CreateWithItem(const std::function& callback = nullptr); void CreateWithSwipe(bool isStartNode, V2::SwipeEdgeEffect swipeEdgeEffect, int32_t itemNumber = TOTAL_LINE_NUMBER); - void CreateWithSwipeAction(SwipeActionItem& item, bool useDefaultDeleteAnimation, bool isStartArea, - OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect); + void CreateWithSwipeAction( + SwipeActionItem& item, bool isStartArea, OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect); static void CreateItem( int32_t itemNumber, Axis axis = Axis::VERTICAL, V2::ListItemStyle listItemStyle = V2::ListItemStyle::NONE); @@ -251,8 +251,8 @@ void ListTestNg::CreateWithSwipe(bool isStartNode, V2::SwipeEdgeEffect swipeEdge }); } -void ListTestNg::CreateWithSwipeAction(SwipeActionItem& item, bool useDefaultDeleteAnimation, bool isStartArea, - OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect) +void ListTestNg::CreateWithSwipeAction( + SwipeActionItem& item, bool isStartArea, OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect) { ListModelNG model; model.Create(); @@ -261,9 +261,8 @@ void ListTestNg::CreateWithSwipeAction(SwipeActionItem& item, bool useDefaultDel SetHeight(Dimension(ITEM_HEIGHT)); SetWidth(FILL_LENGTH); itemModel.SetSwiperAction(nullptr, nullptr, std::move(onOffsetChange), effect); - itemModel.SetDeleteArea(std::move(item.builderAction), useDefaultDeleteAnimation, std::move(item.onDelete), - std::move(item.onEnterDeleteArea), std::move(item.onExitDeleteArea), std::move(item.onStateChange), - item.actionAreaDistance, isStartArea); + itemModel.SetDeleteArea(std::move(item.builderAction), std::move(item.onDelete), std::move(item.onEnterDeleteArea), + std::move(item.onExitDeleteArea), std::move(item.onStateChange), item.actionAreaDistance, isStartArea); { RowModelNG rowModel; rowModel.Create(std::nullopt, nullptr, ""); @@ -331,6 +330,14 @@ void ListTestNg::CreateItemWithSwipe( SetWidth(FILL_LENGTH); SetHeight(Dimension(ITEM_HEIGHT)); itemModel.SetSwiperAction(std::move(startAction), std::move(endAction), nullptr, effect); + if (startAction) { + itemModel.SetDeleteArea( + std::move(startAction), nullptr, nullptr, nullptr, nullptr, Dimension(DELETE_AREA_DISTANCE), true); + } + if (endAction) { + itemModel.SetDeleteArea( + std::move(endAction), nullptr, nullptr, nullptr, nullptr, Dimension(DELETE_AREA_DISTANCE), false); + } { RowModelNG rowModel; rowModel.Create(std::nullopt, nullptr, ""); @@ -1993,7 +2000,7 @@ HWTEST_F(ListTestNg, SwiperItem007, TestSize.Level1) .onStateChange = nullptr }; - CreateWithSwipeAction(item, true, true, nullptr, V2::SwipeEdgeEffect::None); + CreateWithSwipeAction(item, true, nullptr, V2::SwipeEdgeEffect::None); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); EXPECT_NE(listItemPattern, nullptr); @@ -2044,7 +2051,7 @@ HWTEST_F(ListTestNg, SwiperItem008, TestSize.Level1) .onStateChange = nullptr }; - CreateWithSwipeAction(item, true, false, nullptr, V2::SwipeEdgeEffect::None); + CreateWithSwipeAction(item, false, nullptr, V2::SwipeEdgeEffect::None); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE; @@ -2095,7 +2102,7 @@ HWTEST_F(ListTestNg, SwiperItem009, TestSize.Level1) .onEnterDeleteArea = nullptr, .onExitDeleteArea = nullptr, .onStateChange = std::move(onStateChangeFunc) }; - CreateWithSwipeAction(item, true, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); const float maxDistance = START_NODE_LEN + DELETE_AREA_DISTANCE; @@ -2149,7 +2156,7 @@ HWTEST_F(ListTestNg, SwiperItem010, TestSize.Level1) .onEnterDeleteArea = nullptr, .onExitDeleteArea = nullptr, .onStateChange = std::move(onStateChangeFunc) }; - CreateWithSwipeAction(item, true, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE; @@ -2205,7 +2212,7 @@ HWTEST_F(ListTestNg, SwiperItem011, TestSize.Level1) .onEnterDeleteArea = std::move(enterEvent), .onExitDeleteArea = std::move(exitEvent), .onStateChange = nullptr }; - CreateWithSwipeAction(item, true, true, nullptr, V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, true, nullptr, V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; /** @@ -2275,7 +2282,7 @@ HWTEST_F(ListTestNg, SwiperItem012, TestSize.Level1) .onEnterDeleteArea = std::move(enterEvent), .onExitDeleteArea = std::move(exitEvent), .onStateChange = nullptr }; - CreateWithSwipeAction(item, true, false, nullptr, V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, false, nullptr, V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; const float exceedArea = DELETE_AREA_DISTANCE + 1; @@ -2344,7 +2351,7 @@ HWTEST_F(ListTestNg, SwiperItem013, TestSize.Level1) .onEnterDeleteArea = std::move(enterEvent), .onExitDeleteArea = std::move(exitEvent), .onStateChange = nullptr }; - CreateWithSwipeAction(item, true, true, nullptr, V2::SwipeEdgeEffect::None); + CreateWithSwipeAction(item, true, nullptr, V2::SwipeEdgeEffect::None); const int32_t listItemIndex = 0; /** @@ -2405,7 +2412,7 @@ HWTEST_F(ListTestNg, SwiperItem014, TestSize.Level1) .onEnterDeleteArea = std::move(enterEvent), .onExitDeleteArea = std::move(exitEvent), .onStateChange = nullptr }; - CreateWithSwipeAction(item, true, false, nullptr, V2::SwipeEdgeEffect::None); + CreateWithSwipeAction(item, false, nullptr, V2::SwipeEdgeEffect::None); const int32_t listItemIndex = 0; const float exceedArea = DELETE_AREA_DISTANCE + 1; @@ -2529,7 +2536,7 @@ HWTEST_F(ListTestNg, SwiperItem018, TestSize.Level1) .onEnterDeleteArea = nullptr, .onExitDeleteArea = nullptr, .onStateChange = [&curState](SwipeActionState state) { curState = state; } }; - CreateWithSwipeAction(item, true, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); @@ -2591,7 +2598,7 @@ HWTEST_F(ListTestNg, SwiperItem019, TestSize.Level1) .onEnterDeleteArea = nullptr, .onExitDeleteArea = nullptr, .onStateChange = [&curState](SwipeActionState state) { curState = state; } }; - CreateWithSwipeAction(item, true, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); @@ -2653,7 +2660,7 @@ HWTEST_F(ListTestNg, SwiperItem020, TestSize.Level1) .onEnterDeleteArea = nullptr, .onExitDeleteArea = nullptr, .onStateChange = std::move(onStateChangeFunc) }; - CreateWithSwipeAction(item, true, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); + CreateWithSwipeAction(item, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring); const int32_t listItemIndex = 0; const RefPtr listItemPattern = GetChildPattern(frameNode_, listItemIndex); const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE;