From 2c260dc7c077433169508b2b216971e4dbad32a2 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Mon, 21 Jul 2025 15:59:56 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=9F=BA=E7=A1=80=E8=83=BD=E5=8A=9B?= =?UTF-8?q?=E3=80=91=E5=85=A8=E6=A8=A1=E6=80=81=E5=9C=A8=E5=A4=9A=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=B8=8B=E7=9A=84=E5=BD=A2=E6=80=81=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E4=B8=8E=E4=BE=A7=E6=BB=91=E5=8A=A8=E6=95=88?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangweiyuan --- .../overlay/sheet_presentation_pattern.cpp | 10 +- .../overlay/sheet_presentation_pattern.h | 2 - .../sheet_content_cover_object.cpp | 147 +++++--- .../sheet_content_cover_object.h | 5 + .../pattern/sheet/sheet_object.cpp | 23 +- .../pattern/sheet/sheet_object.h | 3 +- .../overlay/sheet_content_cover_test_ng.cpp | 325 +++++++++++++++++- 7 files changed, 444 insertions(+), 71 deletions(-) diff --git a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp index 38ac2112499..ee8fb4c0214 100644 --- a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp +++ b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp @@ -1067,14 +1067,6 @@ float SheetPresentationPattern::UpdateSheetTransitionOffset() return offset; } -void SheetPresentationPattern::SetSheetAnimationOption(AnimationOption& option) const -{ - option.SetFillMode(FillMode::FORWARDS); - if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_EIGHTEEN)) { - option.SetDuration(SHEET_ANIMATION_DURATION); - } -} - void SheetPresentationPattern::SheetTransition(bool isTransitionIn, float dragVelocity) { if ((HasOnHeightDidChange() && IsSheetBottomStyle() && isTransitionIn && isNeedProcessHeight_) @@ -1088,7 +1080,7 @@ void SheetPresentationPattern::SheetTransition(bool isTransitionIn, float dragVe AnimationOption option; const RefPtr curve = sheetObject_->GetSheetTransitionCurve(dragVelocity); option.SetCurve(curve); - SetSheetAnimationOption(option); + sheetObject_->SetSheetAnimationOption(option); auto offset = UpdateSheetTransitionOffset(); if (!isTransitionIn) { const auto& overlayManager = GetOverlayManager(); diff --git a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h index ebb390fa4a6..ce37eb24957 100644 --- a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h +++ b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.h @@ -349,8 +349,6 @@ public: void SheetInteractiveDismiss(BindSheetDismissReason dismissReason, float dragVelocity = 0.0f); - void SetSheetAnimationOption(AnimationOption& option) const; - void SetSheetBorderWidth(bool isPartialUpdate = false); void SetCurrentOffset(float currentOffset) diff --git a/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.cpp b/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.cpp index e2f056b5da8..ae578d3eb09 100644 --- a/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.cpp +++ b/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.cpp @@ -103,68 +103,15 @@ void SheetContentCoverObject::ClipSheetNode() void SheetContentCoverObject::SetFinishEventForAnimationOption( AnimationOption& option, bool isTransitionIn, bool isFirstTransition) { - auto sheetPattern = GetPattern(); - CHECK_NULL_VOID(sheetPattern); - auto sheetNode = sheetPattern->GetHost(); - CHECK_NULL_VOID(sheetNode); - if (isTransitionIn) { - option.SetOnFinishEvent( - [sheetWK = WeakClaim(RawPtr(sheetNode)), isFirst = isFirstTransition] { - auto sheetNode = sheetWK.Upgrade(); - CHECK_NULL_VOID(sheetNode); - auto pattern = sheetNode->GetPattern(); - CHECK_NULL_VOID(pattern); - pattern->OnAppear(); - pattern->AvoidAiBar(); - pattern->FireOnTypeDidChange(); - pattern->FireOnWidthDidChange(); - auto sheetObject = pattern->GetSheetObject(); - CHECK_NULL_VOID(sheetObject); - sheetObject->FireHeightDidChange(); - }); - } else { - option.SetOnFinishEvent( - [sheetWK = WeakClaim(RawPtr(sheetNode))] { - auto sheet = sheetWK.Upgrade(); - CHECK_NULL_VOID(sheet); - auto pattern = sheet->GetPattern(); - CHECK_NULL_VOID(pattern); - auto overlayManager = pattern->GetOverlayManager(); - CHECK_NULL_VOID(overlayManager); - pattern->OnDisappear(); - overlayManager->FireAutoSave(sheet); - overlayManager->RemoveSheet(sheet); - }); - } + option.SetOnFinishEvent(GetSheetTransitionFinishEvent(isTransitionIn)); } AnimationOption SheetContentCoverObject::GetAnimationOptionForOverlay(bool isTransitionIn, bool isFirstTransition) { - auto sheetPattern = GetPattern(); - CHECK_NULL_RETURN(sheetPattern, AnimationOption()); - auto layoutProperty = sheetPattern->GetLayoutProperty(); - CHECK_NULL_RETURN(layoutProperty, AnimationOption()); - auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); - AnimationOption option; - auto transition = sheetStyle.modalTransition.value_or(ModalTransition::DEFAULT); - switch (transition) { - case ModalTransition::ALPHA: - option.SetCurve(Curves::FRICTION); - option.SetDuration(FULL_MODAL_ALPHA_ANIMATION_DURATION); - option.SetFillMode(FillMode::FORWARDS); - break; - case ModalTransition::NONE: - option.SetDuration(0); - break; - case ModalTransition::DEFAULT: - default: - const RefPtr curve = - AceType::MakeRefPtr(0.0f, CURVE_MASS, CURVE_STIFFNESS, CURVE_DAMPING); - option.SetCurve(curve); - option.SetFillMode(FillMode::FORWARDS); - break; - } + SetSheetAnimationOption(option); + const RefPtr curve = GetSheetTransitionCurve(0.0f); + option.SetCurve(curve); SetFinishEventForAnimationOption(option, isTransitionIn, isFirstTransition); return option; } @@ -251,6 +198,92 @@ std::function SheetContentCoverObject::GetAnimationPropertyCallForOverla } } +void SheetContentCoverObject::SetSheetAnimationOption(AnimationOption& option) const +{ + auto sheetPattern = GetPattern(); + CHECK_NULL_VOID(sheetPattern); + auto layoutProperty = sheetPattern->GetLayoutProperty(); + CHECK_NULL_VOID(layoutProperty); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); + + auto transition = sheetStyle.modalTransition.value_or(ModalTransition::DEFAULT); + switch (transition) { + case ModalTransition::ALPHA: + option.SetDuration(FULL_MODAL_ALPHA_ANIMATION_DURATION); + option.SetFillMode(FillMode::FORWARDS); + break; + case ModalTransition::NONE: + option.SetDuration(0); + break; + case ModalTransition::DEFAULT: + default: + option.SetFillMode(FillMode::FORWARDS); + break; + } +} + +RefPtr SheetContentCoverObject::GetSheetTransitionCurve(float dragVelocity) const +{ + auto sheetPattern = GetPattern(); + CHECK_NULL_RETURN(sheetPattern, AceType::MakeRefPtr(0.0f, 0.0f, 0.0f, 0.0f)); + auto layoutProperty = sheetPattern->GetLayoutProperty(); + CHECK_NULL_RETURN(layoutProperty, AceType::MakeRefPtr(0.0f, 0.0f, 0.0f, 0.0f)); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); + + auto transition = sheetStyle.modalTransition.value_or(ModalTransition::DEFAULT); + switch (transition) { + case ModalTransition::ALPHA: + return AceType::MakeRefPtr(0.2f, 0.0f, 0.2f, 1.0f); + case ModalTransition::NONE: + return AceType::MakeRefPtr(0.0f, 0.0f, 0.0f, 0.0f); + case ModalTransition::DEFAULT: + default: + return AceType::MakeRefPtr(0.0f, CURVE_MASS, CURVE_STIFFNESS, CURVE_DAMPING); + } +} + +std::function SheetContentCoverObject::GetSheetTransitionFinishEvent(bool isTransitionIn) +{ + auto sheetPattern = GetPattern(); + CHECK_NULL_RETURN(sheetPattern, nullptr); + auto sheetNode = sheetPattern->GetHost(); + CHECK_NULL_RETURN(sheetNode, nullptr); + + if (isTransitionIn) { + return [sheetWK = WeakClaim(RawPtr(sheetNode))] { + auto sheetNode = sheetWK.Upgrade(); + CHECK_NULL_VOID(sheetNode); + auto pattern = sheetNode->GetPattern(); + CHECK_NULL_VOID(pattern); + pattern->OnAppear(); + pattern->AvoidAiBar(); + pattern->FireOnTypeDidChange(); + pattern->FireOnWidthDidChange(); + auto sheetObject = pattern->GetSheetObject(); + CHECK_NULL_VOID(sheetObject); + sheetObject->FireHeightDidChange(); + }; + } else { + return [sheetWK = WeakClaim(RawPtr(sheetNode))] { + auto sheet = sheetWK.Upgrade(); + CHECK_NULL_VOID(sheet); + auto pattern = sheet->GetPattern(); + CHECK_NULL_VOID(pattern); + auto overlayManager = pattern->GetOverlayManager(); + CHECK_NULL_VOID(overlayManager); + pattern->OnDisappear(); + overlayManager->FireAutoSave(sheet); + overlayManager->RemoveSheet(sheet); + }; + } +} + +std::function SheetContentCoverObject::GetSheetAnimationEvent(bool isTransitionIn, float offset) +{ + InitAnimationForOverlay(isTransitionIn, true); + return GetAnimationPropertyCallForOverlay(isTransitionIn); +} + void SheetContentCoverObject::FireHeightDidChange() { auto pattern = GetPattern(); diff --git a/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.h b/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.h index 47645de35c5..4b9c0f8ed7e 100644 --- a/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.h +++ b/frameworks/core/components_ng/pattern/sheet/content_cover/sheet_content_cover_object.h @@ -36,6 +36,11 @@ public: void InitAnimationForOverlay(bool isTransitionIn, bool isFirstTransition) override; std::function GetAnimationPropertyCallForOverlay(bool isTransitionIn) override; + void SetSheetAnimationOption(AnimationOption& option) const override; + RefPtr GetSheetTransitionCurve(float dragVelocity) const override; + std::function GetSheetTransitionFinishEvent(bool isTransitionIn) override; + std::function GetSheetAnimationEvent(bool isTransitionIn, float offset) override; + ScrollResult HandleScroll(float scrollOffset, int32_t source, NestedState state, float velocity = 0.f) override { return { 0.0f, true }; diff --git a/frameworks/core/components_ng/pattern/sheet/sheet_object.cpp b/frameworks/core/components_ng/pattern/sheet/sheet_object.cpp index 5d503f028f2..6b2b77d9901 100644 --- a/frameworks/core/components_ng/pattern/sheet/sheet_object.cpp +++ b/frameworks/core/components_ng/pattern/sheet/sheet_object.cpp @@ -66,6 +66,14 @@ void SheetObject::DirtyLayoutProcess(const RefPtr& layou pattern->CheckBuilderChange(); } +void SheetObject::SetSheetAnimationOption(AnimationOption& option) const +{ + option.SetFillMode(FillMode::FORWARDS); + if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_EIGHTEEN)) { + option.SetDuration(SHEET_ANIMATION_DURATION); + } +} + RefPtr SheetObject::GetSheetTransitionCurve(float dragVelocity) const { return AceType::MakeRefPtr( @@ -244,7 +252,7 @@ AnimationOption SheetObject::GetAnimationOptionForOverlay(bool isTransitionIn, b const RefPtr curve = AceType::MakeRefPtr(0.0f, CURVE_MASS, CURVE_STIFFNESS, CURVE_DAMPING); option.SetCurve(curve); - sheetPattern->SetSheetAnimationOption(option); + SetSheetAnimationOption(option); if (isTransitionIn && sheetPattern->IsFoldStatusChanged()) { option.SetDuration(0); option.SetCurve(Curves::LINEAR); @@ -654,6 +662,19 @@ void SheetObject::CreatePropertyCallback() sheetPattern->SetProperty(property); } +void SheetObject::BeforeCreateLayoutWrapper() +{ + auto pattern = GetPattern(); + CHECK_NULL_VOID(pattern); + auto host = pattern->GetHost(); + CHECK_NULL_VOID(host); + auto scrollNode = pattern->GetSheetScrollNode(); + CHECK_NULL_VOID(scrollNode); + auto scrollLayoutProperty = scrollNode->GetLayoutProperty(); + CHECK_NULL_VOID(scrollLayoutProperty); + scrollLayoutProperty->ResetSafeAreaPadding(); +} + SheetKeyboardAvoidMode SheetObject::GetAvoidKeyboardModeByDefault() const { if (sheetType_ == SheetType::SHEET_POPUP) { diff --git a/frameworks/core/components_ng/pattern/sheet/sheet_object.h b/frameworks/core/components_ng/pattern/sheet/sheet_object.h index 008d856226a..ff5dd3dd6d9 100644 --- a/frameworks/core/components_ng/pattern/sheet/sheet_object.h +++ b/frameworks/core/components_ng/pattern/sheet/sheet_object.h @@ -36,6 +36,7 @@ public: SheetObject(SheetType sheetType) : sheetType_(sheetType) {} virtual BorderWidthProperty PostProcessBorderWidth(const BorderWidthProperty& borderWidth); virtual void DirtyLayoutProcess(const RefPtr& layoutAlgorithmWrapper); + virtual void SetSheetAnimationOption(AnimationOption& option) const; virtual RefPtr GetSheetTransitionCurve(float dragVelocity) const; virtual std::function GetSheetTransitionFinishEvent(bool isTransitionIn); virtual std::function GetSheetAnimationEvent(bool isTransitionIn, float offset); @@ -52,7 +53,7 @@ public: virtual void HandleDragEnd(float dragVelocity); virtual void ModifyFireSheetTransition(float dragVelocity); virtual void CreatePropertyCallback(); - virtual void BeforeCreateLayoutWrapper() {}; + virtual void BeforeCreateLayoutWrapper(); virtual SheetKeyboardAvoidMode GetAvoidKeyboardModeByDefault() const; virtual void AvoidKeyboardInDirtyLayoutProcess(); virtual void AvoidKeyboard(bool forceAvoid); diff --git a/test/unittest/core/pattern/overlay/sheet_content_cover_test_ng.cpp b/test/unittest/core/pattern/overlay/sheet_content_cover_test_ng.cpp index 1c1376ad9c7..af5814beff6 100644 --- a/test/unittest/core/pattern/overlay/sheet_content_cover_test_ng.cpp +++ b/test/unittest/core/pattern/overlay/sheet_content_cover_test_ng.cpp @@ -548,7 +548,10 @@ HWTEST_F(SheetContentCoverObjectTestNG, GetAnimationOptionForOverlay001, TestSiz * @tc.expected: GetCurve is Curves::FRICTION, GetDuration is 200, GetFillMode is FillMode::FORWARDS. */ auto option = object->GetAnimationOptionForOverlay(true, true); - EXPECT_EQ(option.GetCurve(), Curves::FRICTION); + auto curve = option.GetCurve(); + auto springCurve = AceType::DynamicCast(curve); + ASSERT_NE(springCurve, nullptr); + EXPECT_TRUE(springCurve->IsEqual(AceType::MakeRefPtr(0.2f, 0.0f, 0.2f, 1.0f))); EXPECT_EQ(option.GetDuration(), 200); EXPECT_EQ(option.GetFillMode(), FillMode::FORWARDS); } @@ -1171,6 +1174,326 @@ HWTEST_F(SheetContentCoverObjectTestNG, GetAnimationPropertyCallForOverlay006, T EXPECT_EQ(renderContext->GetTransformTranslate()->z.ConvertToPx(), 0.0f); } +/** + * @tc.name: SetSheetAnimationOption001 + * @tc.desc: Test SheetContentCoverObject::SetSheetAnimationOption + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, SetSheetAnimationOption001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and layoutProperty. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + auto layoutProperty = sheetNode->GetLayoutProperty(); + ASSERT_NE(layoutProperty, nullptr); + /** + * @tc.steps: step2. create sheetStyle, set modalTransition is ModalTransition::ALPHA, + * set sheetType_ is SheetType::SHEET_CONTENT_COVER. + */ + SheetStyle sheetStyle; + sheetStyle.modalTransition = ModalTransition::ALPHA; + sheetStyle.sheetType = SheetType::SHEET_CONTENT_COVER; + layoutProperty->UpdateSheetStyle(sheetStyle); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + /** + * @tc.steps: step3. InitSheetObject and create object. + */ + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step4. parameter setting for test option. + * @tc.expected: GetDuration is 200, GetFillMode is FillMode::FORWARDS. + */ + AnimationOption option; + object->SetSheetAnimationOption(option); + EXPECT_EQ(option.GetDuration(), 200); + EXPECT_EQ(option.GetFillMode(), FillMode::FORWARDS); +} + +/** + * @tc.name: SetSheetAnimationOption002 + * @tc.desc: Test SheetContentCoverObject::SetSheetAnimationOption + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, SetSheetAnimationOption002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and layoutProperty. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + auto layoutProperty = sheetNode->GetLayoutProperty(); + ASSERT_NE(layoutProperty, nullptr); + /** + * @tc.steps: step2. create sheetStyle, set modalTransition is ModalTransition::NONE, + * set sheetType_ is SheetType::SHEET_CONTENT_COVER. + */ + SheetStyle sheetStyle; + sheetStyle.modalTransition = ModalTransition::NONE; + sheetStyle.sheetType = SheetType::SHEET_CONTENT_COVER; + layoutProperty->UpdateSheetStyle(sheetStyle); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + /** + * @tc.steps: step3. InitSheetObject and create object. + */ + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step4. parameter setting for test option. + * @tc.expected: GetDuration is 0 + */ + AnimationOption option; + object->SetSheetAnimationOption(option); + EXPECT_EQ(option.GetDuration(), 0); +} + +/** + * @tc.name: SetSheetAnimationOption003 + * @tc.desc: Test SheetContentCoverObject::SetSheetAnimationOption + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, SetSheetAnimationOption003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and layoutProperty. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + auto layoutProperty = sheetNode->GetLayoutProperty(); + ASSERT_NE(layoutProperty, nullptr); + /** + * @tc.steps: step2. create sheetStyle, set modalTransition is ModalTransition::DEFAULT, + * set sheetType_ is SheetType::SHEET_CONTENT_COVER. + */ + SheetStyle sheetStyle; + sheetStyle.modalTransition = ModalTransition::DEFAULT; + sheetStyle.sheetType = SheetType::SHEET_CONTENT_COVER; + layoutProperty->UpdateSheetStyle(sheetStyle); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + /** + * @tc.steps: step3. InitSheetObject and create object. + */ + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step4. parameter setting for test option. + * @tc.expected: GetFillMode is FillMode::FORWARDS. + */ + AnimationOption option; + object->SetSheetAnimationOption(option); + EXPECT_EQ(option.GetFillMode(), FillMode::FORWARDS); +} + +/** + * @tc.name: GetSheetTransitionCurve001 + * @tc.desc: Test SheetContentCoverObject::GetSheetTransitionCurve + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, GetSheetTransitionCurve001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and layoutProperty. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + auto layoutProperty = sheetNode->GetLayoutProperty(); + ASSERT_NE(layoutProperty, nullptr); + /** + * @tc.steps: step2. create sheetStyle, set modalTransition is ModalTransition::ALPHA, + * set sheetType_ is SheetType::SHEET_CONTENT_COVER. + */ + SheetStyle sheetStyle; + sheetStyle.modalTransition = ModalTransition::ALPHA; + sheetStyle.sheetType = SheetType::SHEET_CONTENT_COVER; + layoutProperty->UpdateSheetStyle(sheetStyle); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + /** + * @tc.steps: step3. InitSheetObject and create object. + */ + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step4. parameter setting for test option. + * @tc.expected: curve = (0.2f, 0.0f, 0.2f, 1.0f). + */ + auto curve = object->GetSheetTransitionCurve(0.0f); + EXPECT_TRUE(curve->IsEqual(AceType::MakeRefPtr(0.2f, 0.0f, 0.2f, 1.0f))); +} + +/** + * @tc.name: GetSheetTransitionCurve002 + * @tc.desc: Test SheetContentCoverObject::GetSheetTransitionCurve + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, GetSheetTransitionCurve002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and layoutProperty. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + auto layoutProperty = sheetNode->GetLayoutProperty(); + ASSERT_NE(layoutProperty, nullptr); + /** + * @tc.steps: step2. create sheetStyle, set modalTransition is ModalTransition::NONE, + * set sheetType_ is SheetType::SHEET_CONTENT_COVER. + */ + SheetStyle sheetStyle; + sheetStyle.modalTransition = ModalTransition::NONE; + sheetStyle.sheetType = SheetType::SHEET_CONTENT_COVER; + layoutProperty->UpdateSheetStyle(sheetStyle); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + /** + * @tc.steps: step3. InitSheetObject and create object. + */ + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step4. parameter setting for test option. + * @tc.expected: curve = (0.0f, 0.0f, 0.0f, 0.0f). + */ + auto curve = object->GetSheetTransitionCurve(0.0f); + EXPECT_TRUE(curve->IsEqual(AceType::MakeRefPtr(0.0f, 0.0f, 0.0f, 0.0f))); +} + +/** + * @tc.name: GetSheetTransitionCurve003 + * @tc.desc: Test SheetContentCoverObject::GetSheetTransitionCurve + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, GetSheetTransitionCurve003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and layoutProperty. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + auto layoutProperty = sheetNode->GetLayoutProperty(); + ASSERT_NE(layoutProperty, nullptr); + /** + * @tc.steps: step2. create sheetStyle, set modalTransition is ModalTransition::DEFAULT, + * set sheetType_ is SheetType::SHEET_CONTENT_COVER. + */ + SheetStyle sheetStyle; + sheetStyle.modalTransition = ModalTransition::DEFAULT; + sheetStyle.sheetType = SheetType::SHEET_CONTENT_COVER; + layoutProperty->UpdateSheetStyle(sheetStyle); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + /** + * @tc.steps: step3. InitSheetObject and create object. + */ + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step4. parameter setting for test option. + * @tc.expected: curve = (0.0f, 1.0f, 328.0f, 36.0f). + */ + auto curve = object->GetSheetTransitionCurve(0.0f); + EXPECT_TRUE(curve->IsEqual(AceType::MakeRefPtr(0.0f, 1.0f, 328.0f, 36.0f))); +} + +/** + * @tc.name: GetSheetTransitionFinishEvent001 + * @tc.desc: Test SheetContentCoverObject::GetSheetTransitionFinishEvent + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, GetSheetTransitionFinishEvent001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and object. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step2. parameter setting for test option. + * @tc.expected: func is not nullptr. + */ + auto func = object->GetSheetTransitionFinishEvent(true); + ASSERT_NE(func, nullptr); + sheetPattern->preDidHeight_ = 0.0f; + object->sheetHeight_ = 1.0f; + /** + * @tc.steps: step3. call func to verify it executes normally. + * @tc.expected: preDidHeight_ is 1.0f. + */ + func(); + EXPECT_EQ(sheetPattern->preDidHeight_, 1.0f); +} + +/** + * @tc.name: GetSheetTransitionFinishEvent002 + * @tc.desc: Test SheetContentCoverObject::GetSheetTransitionFinishEvent + * @tc.type: FUNC + */ +HWTEST_F(SheetContentCoverObjectTestNG, GetSheetTransitionFinishEvent002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create sheet pattern and object. + */ + auto callback = [](const std::string&) {}; + auto sheetNode = FrameNode::CreateFrameNode(V2::SHEET_PAGE_TAG, ElementRegister::GetInstance()->MakeUniqueId(), + AceType::MakeRefPtr(0, "", std::move(callback))); + ASSERT_NE(sheetNode, nullptr); + auto sheetPattern = sheetNode->GetPattern(); + ASSERT_NE(sheetPattern, nullptr); + sheetPattern->sheetType_ = SheetType::SHEET_CONTENT_COVER; + sheetPattern->InitSheetObject(); + auto object = AceType::DynamicCast(sheetPattern->GetSheetObject()); + ASSERT_NE(object, nullptr); + /** + * @tc.steps: step2. parameter setting for test option. + * @tc.expected: func is not nullptr. + */ + auto func = object->GetSheetTransitionFinishEvent(false); + ASSERT_NE(func, nullptr); + /** + * @tc.steps: step3. call func to verify it executes normally. + * @tc.expected: isDismissProcess_ is false. + */ + func(); + EXPECT_EQ(sheetPattern->isDismissProcess_, false); +} + /** * @tc.name: ContentCoverSheetLayoutAlgorithm1 * @tc.desc: ContentCoverSheetLayoutAlgorithm Width Measure -- Gitee