diff --git a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_layout_algorithm.cpp index 5f71f66b7c64634020d9a9275f6a8224bb086ac4..ec9351a629795bd9bdeb40b69472ceceea5932e7 100755 --- a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_layout_algorithm.cpp @@ -129,6 +129,9 @@ void SheetPresentationLayoutAlgorithm::ComputeWidthAndHeight(LayoutWrapper* layo auto layoutProperty = AceType::DynamicCast(layoutWrapper->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); auto parentConstraint = layoutWrapper->GetGeometryNode()->GetParentLayoutConstraint(); + if (!parentConstraint.has_value()) { + return; + } LayoutConstraintF layoutConstraint = parentConstraint.value(); layoutProperty->UpdateLayoutConstraint(layoutConstraint); auto maxSize = layoutConstraint.maxSize; @@ -190,7 +193,7 @@ void SheetPresentationLayoutAlgorithm::Measure(LayoutWrapper* layoutWrapper) CHECK_NULL_VOID(layoutWrapper); auto layoutProperty = AceType::DynamicCast(layoutWrapper->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); - sheetStyle_ = layoutProperty->GetSheetStyleValue(); + sheetStyle_ = layoutProperty->GetSheetStyleValue(SheetStyle()); auto layoutConstraint = layoutProperty->GetLayoutConstraint(); if (!layoutConstraint) { TAG_LOGE(AceLogTag::ACE_SHEET, "fail to measure sheet due to layoutConstraint is nullptr"); 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 120064bada73ff25afeffa226f08e3b2a722062a..5b88095409676fe24725daef84ab112fd1e0bc39 100644 --- a/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp +++ b/frameworks/core/components_ng/pattern/overlay/sheet_presentation_pattern.cpp @@ -99,7 +99,7 @@ void SheetPresentationPattern::OnModifyDone() CHECK_NULL_VOID(sheetTheme); auto layoutProperty = GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); BlurStyle blurStyle = static_cast(sheetTheme->GetSheetBackgroundBlurStyle()); if (Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_TWELVE) && blurStyle != BlurStyle::NO_MATERIAL) { @@ -168,7 +168,7 @@ float SheetPresentationPattern::GetSheetTopSafeArea() if (!Container::GreatOrEqualAPITargetVersion(PlatformVersion::VERSION_EIGHTEEN)) { auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_RETURN(layoutProperty, 0.0f); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.sheetType.has_value() && sheetStyle.sheetType.value() == SheetType::SHEET_BOTTOM && IsPhoneInLandScape()) { sheetTopSafeArea = 0.0f; @@ -202,7 +202,7 @@ void SheetPresentationPattern::InitPageHeight() } auto layoutProperty = GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.sheetType.has_value() && sheetStyle.sheetType.value() == SheetType::SHEET_BOTTOM && IsPhoneInLandScape()) { sheetTopSafeArea_ = 0.0f; @@ -268,7 +268,7 @@ void SheetPresentationPattern::CheckBuilderChange() CHECK_NULL_VOID(sheetPattern); auto layoutProperty = sheetNode->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.sheetHeight.sheetMode == SheetMode::AUTO) { auto sheetWrapper = sheetNode->GetParent(); CHECK_NULL_VOID(sheetWrapper); @@ -430,7 +430,7 @@ void SheetPresentationPattern::SetSheetBorderWidth(bool isPartialUpdate) CHECK_NULL_VOID(sheetTheme); auto layoutProperty = host->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); auto renderContext = host->GetRenderContext(); CHECK_NULL_VOID(renderContext); renderContext->SetClipToBounds(true); @@ -540,7 +540,7 @@ void SheetPresentationPattern::SetShadowStyle(bool isFocused) CHECK_NULL_VOID(host); auto layoutProperty = host->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.shadow.has_value()) { return; } @@ -1244,7 +1244,7 @@ void SheetPresentationPattern::UpdateTitleColumnSize() CHECK_NULL_VOID(host); auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); auto operationColumn = GetTitleBuilderNode(); auto pipeline = host->GetContext(); CHECK_NULL_VOID(pipeline); @@ -1283,7 +1283,7 @@ bool SheetPresentationPattern::IsShowCloseIcon() CHECK_NULL_RETURN(host, false); auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_RETURN(layoutProperty, false); - return layoutProperty->GetSheetStyleValue().showCloseIcon.value_or(true); + return layoutProperty->GetSheetStyleValue(SheetStyle()).showCloseIcon.value_or(true); } RefPtr SheetPresentationPattern::GetTitleNode() @@ -1315,7 +1315,7 @@ void SheetPresentationPattern::UpdateTitleTextColor() auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.sheetSubtitle.has_value()) { auto subRow = sheetTitleColumn->GetChildAtIndex(1); CHECK_NULL_VOID(subRow); @@ -1333,7 +1333,7 @@ void SheetPresentationPattern::UpdateTitlePadding() CHECK_NULL_VOID(host); auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); - if (!layoutProperty->GetSheetStyleValue().isTitleBuilder.has_value()) { + if (!layoutProperty->GetSheetStyleValue(SheetStyle()).isTitleBuilder.has_value()) { return; } @@ -1389,7 +1389,7 @@ void SheetPresentationPattern::UpdateSheetTitle() CHECK_NULL_VOID(pipeline); auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.sheetTitle.has_value()) { auto titleId = GetTitleId(); auto titleNode = DynamicCast(ElementRegister::GetInstance()->GetNodeById(titleId)); @@ -1432,7 +1432,7 @@ void SheetPresentationPattern::UpdateFontScaleStatus() CHECK_NULL_VOID(pipeline); auto layoutProperty = DynamicCast(host->GetLayoutProperty()); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (pipeline->GetFontScale() != scale_) { auto operationNode = GetTitleBuilderNode(); CHECK_NULL_VOID(operationNode); @@ -1569,7 +1569,7 @@ void SheetPresentationPattern::UpdateMaskBackgroundColor() CHECK_NULL_VOID(sheetTheme); auto layoutProperty = host->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); sheetMaskColor_ = sheetStyle.maskColor.value_or(sheetTheme->GetMaskColor()); if (!AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_ELEVEN)) { if (sheetStyle.maskColor.has_value()) { @@ -1639,7 +1639,7 @@ void SheetPresentationPattern::CheckSheetHeightChange() CHECK_NULL_VOID(overlayManager); auto layoutProperty = host->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); overlayManager->ComputeSheetOffset(sheetStyle, host); overlayManager->PlaySheetTransition(host, true, false); auto maskNode = overlayManager->GetSheetMask(host); @@ -1685,7 +1685,7 @@ void SheetPresentationPattern::InitSheetDetents() // record input detents auto layoutProperty = GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); IsCustomDetentsChanged(sheetStyle); preDetents_.clear(); sheetDetentHeight_.clear(); @@ -1829,7 +1829,7 @@ SheetType SheetPresentationPattern::ComputeSheetTypeInSubWindow() const } auto layoutProperty = GetLayoutProperty(); CHECK_NULL_RETURN(layoutProperty, SheetType::SHEET_CENTER); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); auto sheetType = SheetType::SHEET_CENTER; if (manager && manager->IsPcOrPadFreeMultiWindowMode()) { // Two in one or pad free-window mode @@ -1854,7 +1854,8 @@ SheetType SheetPresentationPattern::ComputeSheetTypeInSubWindow() const if (sheetStyle.sheetType.has_value()) { sheetType = sheetStyle.sheetType.value(); } - if (sheetStyle.sheetType.value() == SheetType::SHEET_POPUP && !sheetKey_.hasValidTargetNode) { + if (sheetStyle.sheetType.has_value() && + sheetStyle.sheetType.value() == SheetType::SHEET_POPUP && !sheetKey_.hasValidTargetNode) { sheetType = SheetType::SHEET_CENTER; } return sheetType; @@ -2022,7 +2023,7 @@ void SheetPresentationPattern::GetSheetTypeWithAuto(SheetType& sheetType) const sheetType = SheetType::SHEET_CENTER; auto layoutProperty = GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (AceApplicationInfo::GetInstance().GreatOrEqualTargetAPIVersion(PlatformVersion::VERSION_FOURTEEN) && sheetStyle.sheetType.has_value() && sheetStyle.sheetType.value() == SheetType::SHEET_POPUP) { sheetType = SheetType::SHEET_POPUP; @@ -2047,7 +2048,7 @@ void SheetPresentationPattern::GetSheetTypeWithPopup(SheetType& sheetType) const } auto layoutProperty = GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); #ifdef PREVIEW rootWidth = pipelineContext->GetDisplayWindowRectInfo().Width(); #endif @@ -2076,7 +2077,7 @@ void SheetPresentationPattern::GetSheetTypeWithCenter(SheetType& sheetType) cons { auto layoutProperty = GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetStyle.sheetType.has_value()) { sheetType = sheetStyle.sheetType.value(); return; @@ -2496,7 +2497,7 @@ void SheetPresentationPattern::CalculateSheetRadius(BorderRadiusProperty& sheetR auto sheetSize = geometryNode->GetFrameSize(); auto layoutProperty = host->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); if (sheetSize.IsPositive()) { CalculateAloneSheetRadius(sheetRadius.radiusTopLeft, sheetStyle.radius->radiusTopLeft); CalculateAloneSheetRadius(sheetRadius.radiusTopRight, sheetStyle.radius->radiusTopRight); diff --git a/frameworks/core/components_ng/pattern/overlay/sheet_wrapper_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/overlay/sheet_wrapper_layout_algorithm.cpp index 73336470289da1e076436e68935b4a814238698b..ec695e0374e27e5ead9178f482bded3bf1984807 100644 --- a/frameworks/core/components_ng/pattern/overlay/sheet_wrapper_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/overlay/sheet_wrapper_layout_algorithm.cpp @@ -193,7 +193,7 @@ void SheetWrapperLayoutAlgorithm::InitParameter(LayoutWrapper* layoutWrapper) sheetPattern->CalculateSheetRadius(sheetRadius_); auto layoutProperty = sheetPage->GetLayoutProperty(); CHECK_NULL_VOID(layoutProperty); - auto sheetStyle = layoutProperty->GetSheetStyleValue(); + auto sheetStyle = layoutProperty->GetSheetStyleValue(SheetStyle()); placement_ = sheetStyle.placement.value_or(Placement::BOTTOM); sheetPopupInfo_.Reset(); // everytime sheetWrapper changed, we need to reset sheetPopupInfo to default value sheetPopupInfo_.finalPlacement = placement_; diff --git a/frameworks/core/components_ng/pattern/particle/particle_pattern.cpp b/frameworks/core/components_ng/pattern/particle/particle_pattern.cpp index f079a48e4ed868fb84f73cd1936e7cd9250b87d8..e790ecf67bb04033f265fa89b443a70d8953e3d1 100644 --- a/frameworks/core/components_ng/pattern/particle/particle_pattern.cpp +++ b/frameworks/core/components_ng/pattern/particle/particle_pattern.cpp @@ -42,6 +42,9 @@ void ParticlePattern::OnVisibleChange(bool isVisible) if (isVisible) { auto host = GetHost(); auto context = host->GetRenderContext(); + if (!context->GetParticleOptionArray().has_value()) { + return; + } context->OnParticleOptionArrayUpdate(context->GetParticleOptionArray().value()); } } diff --git a/test/unittest/core/pattern/indexer/indexer_pattern_test_three_ng.cpp b/test/unittest/core/pattern/indexer/indexer_pattern_test_three_ng.cpp index a470850636a7059276757707a0f245c7c5b57e7f..75f67710b2bc8280ac80a046f5d28307700a7274 100644 --- a/test/unittest/core/pattern/indexer/indexer_pattern_test_three_ng.cpp +++ b/test/unittest/core/pattern/indexer/indexer_pattern_test_three_ng.cpp @@ -537,4 +537,37 @@ HWTEST_F(IndexerPatternTestThreeNg, IndexerPatternTestThreeNg007, TestSize.Level EXPECT_EQ(pattern_->GetActualIndex(-1), 0); EXPECT_EQ(pattern_->GetActualIndex(pattern_->fullArrayValue_.size() + 1), pattern_->fullArrayValue_.size() - 1); } + +/** + * @tc.name: IndexerPatternTestThreeNg008 + * @tc.desc: Test indexer pattern OnHover function. + * @tc.type: FUNC + */ +HWTEST_F(IndexerPatternTestThreeNg, IndexerPatternTestThreeNg008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Test with voidArray. + * @tc.expected: isHover_ false. + */ + IndexerModelNG model = CreateIndexer(std::vector(), 0); + CreateDone(); + pattern_->OnHover(true); + EXPECT_FALSE(pattern_->isHover_); + + /** + * @tc.steps: step2. Test with MidArray. + * @tc.expected: isHover_ true. + */ + model.SetArrayValue(AceType::RawPtr(frameNode_), GetMidArrayValue()); + frameNode_->MarkModifyDone(); + FlushUITasks(); + pattern_->OnHover(true); + EXPECT_TRUE(pattern_->isHover_); + EXPECT_FALSE(pattern_->isTouch_); + pattern_->OnHover(true); + EXPECT_TRUE(pattern_->isHover_); + pattern_->OnHover(false); + EXPECT_FALSE(pattern_->isHover_); + EXPECT_FALSE(pattern_->isTouch_); +} } // namespace OHOS::Ace::NG