list item action builder can be decreased

Signed-off-by: huzeqi <huzeqi@huawei.com>
Change-Id: Iecf205dc36c50c78913f8cf910e6721c77366a9e
This commit is contained in:
huzeqi 2023-11-17 09:46:21 +08:00
parent 89cdbd10cf
commit f4ec734765
9 changed files with 105 additions and 163 deletions

View File

@ -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<JSVal>& jsValue, bool isStartArea)
{
auto deleteAreaObj = JSRef<JSObject>::Cast(jsValue);
auto listItemTheme = GetTheme<ListItemTheme>();
std::function<void()> builderAction;
auto builderObject = deleteAreaObj->GetProperty("builder");
@ -179,15 +178,8 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::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<void()> onActionCallback;
if (onAction->IsFunction()) {
onActionCallback = [execCtx = args.GetExecutionContext(), func = JSRef<JSFunc>::Cast(onAction)]() {
@ -196,9 +188,6 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
};
}
auto onEnterActionArea = deleteAreaObj->GetProperty("onEnterActionArea");
if (!onEnterActionArea->IsFunction()) {
onEnterActionArea = deleteAreaObj->GetProperty("onEnterDeleteArea");
}
std::function<void()> onEnterActionAreaCallback;
if (onEnterActionArea->IsFunction()) {
onEnterActionAreaCallback = [execCtx = args.GetExecutionContext(),
@ -208,9 +197,6 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
};
}
auto onExitActionArea = deleteAreaObj->GetProperty("onExitActionArea");
if (!onExitActionArea->IsFunction()) {
onExitActionArea = deleteAreaObj->GetProperty("onExitDeleteArea");
}
std::function<void()> onExitActionAreaCallback;
if (onExitActionArea->IsFunction()) {
onExitActionAreaCallback = [execCtx = args.GetExecutionContext(),
@ -222,10 +208,8 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
auto actionAreaDistance = deleteAreaObj->GetProperty("actionAreaDistance");
CalcDimension length;
if (!ParseJsDimensionVp(actionAreaDistance, length)) {
actionAreaDistance = deleteAreaObj->GetProperty("deleteAreaDistance");
if (!ParseJsDimensionVp(actionAreaDistance, length)) {
length = listItemTheme->GetDeleteDistance();
}
auto listItemTheme = GetTheme<ListItemTheme>();
length = listItemTheme->GetDeleteDistance();
}
auto onStateChange = deleteAreaObj->GetProperty("onStateChange");
std::function<void(SwipeActionState state)> onStateChangeCallback;
@ -239,9 +223,9 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
};
}
ListItemModel::GetInstance()->SetDeleteArea(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<JSObject> obj = JSRef<JSObject>::Cast(args[0]);
std::function<void()> startAction;
auto startObject = obj->GetProperty("start");
if (startObject->IsFunction()) {
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(startObject));
startAction = [builderFunc]() { builderFunc->Execute(); };
} else if (startObject->IsObject()) {
JsParseDeleteArea(args, startObject, true);
if (startObject->IsObject()) {
if (startObject->IsFunction()) {
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::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<void()> endAction;
auto endObject = obj->GetProperty("end");
if (endObject->IsFunction()) {
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(endObject));
endAction = [builderFunc]() { builderFunc->Execute(); };
} else if (endObject->IsObject()) {
JsParseDeleteArea(args, endObject, false);
if (startObject->IsObject()) {
if (startObject->IsFunction()) {
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::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)

View File

@ -117,8 +117,8 @@ void ListItemModelImpl::SetSelectCallback(OnSelectFunc&& selectCallback)
JSViewSetProperty(&V2::ListItemComponent::SetOnSelectId, std::move(selectCallback));
}
void ListItemModelImpl::SetDeleteArea(std::function<void()>&& builderAction, bool useDefaultDeleteAnimation,
OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
void ListItemModelImpl::SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) {};
void ListItemModelImpl::SetOnDragStart(NG::OnDragStartFunc&& onDragStart)

View File

@ -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<void()>&& builderAction, bool useDefaultDeleteAnimation, OnDeleteEvent&& onDelete,
void SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) override;

View File

@ -43,12 +43,13 @@ public:
virtual void SetSelectable(bool selectable) = 0;
virtual void SetSelected(bool selected) = 0;
virtual void SetSelectChangeEvent(std::function<void(bool)>&& changeEvent) = 0;
// use SetDeleteArea to update builder function
virtual void SetSwiperAction(std::function<void()>&& startAction, std::function<void()>&& 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<void()>&& builderAction, bool useDefaultDeleteAnimation,
OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
virtual void SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) = 0;
private:

View File

@ -38,8 +38,7 @@ void ListItemModelNG::Create(std::function<void(int32_t)>&& 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<ShallowBuilder>(std::move(deepRender)), itemStyle = listItemStyle]() {
return AceType::MakeRefPtr<ListItemPattern>(shallowBuilder, itemStyle);
});
@ -54,7 +53,7 @@ void ListItemModelNG::Create()
[]() { return AceType::MakeRefPtr<ListItemPattern>(nullptr, V2::ListItemStyle::NONE); });
stack->Push(frameNode);
}
// use SetDeleteArea to update builder function
void ListItemModelNG::SetSwiperAction(std::function<void()>&& startAction, std::function<void()>&& endAction,
OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect)
{
@ -62,27 +61,7 @@ void ListItemModelNG::SetSwiperAction(std::function<void()>&& startAction, std::
CHECK_NULL_VOID(frameNode);
auto pattern = frameNode->GetPattern<ListItemPattern>();
CHECK_NULL_VOID(pattern);
RefPtr<NG::UINode> startNode;
if (startAction) {
NG::ScopedViewStackProcessor builderViewStackProcessor;
startAction();
startNode = NG::ViewStackProcessor::GetInstance()->Finish();
}
if (startNode) {
pattern->SetStartNode(startNode);
}
RefPtr<NG::UINode> 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<void()>&& builderAction, bool useDefaultDeleteAnimation,
OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
void ListItemModelNG::SetDeleteArea(std::function<void()>&& 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<void()>&& 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<NG::UINode> endNode;
@ -166,12 +142,9 @@ void ListItemModelNG::SetDeleteArea(std::function<void()>&& 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<ListItemEventHub> 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

View File

@ -19,8 +19,8 @@
#include <functional>
#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<void()>&& builderAction, bool useDefaultDeleteAnimation, OnDeleteEvent&& onDelete,
void SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
OnStateChangedEvent&& onStateChangeEvent, const Dimension& length, bool isStartArea) override;
private:
void InstallSwiperCallBack(RefPtr<ListItemEventHub> eventHub,
OnDeleteEvent&& onDelete,

View File

@ -124,6 +124,7 @@ void ListItemPattern::SetStartNode(const RefPtr<NG::UINode>& 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<NG::UINode>& 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)) {

View File

@ -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> shallowBuilder_;
@ -257,8 +250,6 @@ private:
bool hasEndDeleteArea_ = false;
bool inStartDeleteArea_ = false;
bool inEndDeleteArea_ = false;
bool useStartDefaultDeleteAnimation_ = false;
bool useEndDefaultDeleteAnimation_ = false;
RefPtr<PanEvent> panEvent_;
RefPtr<Animator> springController_;

View File

@ -109,8 +109,8 @@ protected:
void Create(const std::function<void(ListModelNG)>& callback = nullptr);
void CreateWithItem(const std::function<void(ListModelNG)>& 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> listItemPattern = GetChildPattern<ListItemPattern>(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> listItemPattern = GetChildPattern<ListItemPattern>(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> listItemPattern = GetChildPattern<ListItemPattern>(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> listItemPattern = GetChildPattern<ListItemPattern>(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> listItemPattern = GetChildPattern<ListItemPattern>(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> listItemPattern = GetChildPattern<ListItemPattern>(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> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE;