diff --git a/frameworks/core/components_ng/pattern/marquee/marquee_pattern_multi_thread.cpp b/frameworks/core/components_ng/pattern/marquee/marquee_pattern_multi_thread.cpp index 3f65827c420a726bcce336cb0e468bcd6666a063..60ba613d1144d1c12f5b23338944330174f3b836 100644 --- a/frameworks/core/components_ng/pattern/marquee/marquee_pattern_multi_thread.cpp +++ b/frameworks/core/components_ng/pattern/marquee/marquee_pattern_multi_thread.cpp @@ -28,9 +28,11 @@ void MarqueePattern::OnAttachToMainTreeMultiThread() { auto host = GetHost(); CHECK_NULL_VOID(host); - host->GetRenderContext()->SetUsingContentRectForRenderFrame(true); - host->GetRenderContext()->SetClipToFrame(true); - auto pipeline = PipelineContext::GetCurrentContext(); + auto context = host->GetRenderContext(); + CHECK_NULL_VOID(context); + context->SetUsingContentRectForRenderFrame(true); + context->SetClipToFrame(true); + auto pipeline = host->GetContext(); CHECK_NULL_VOID(pipeline); pipeline->AddWindowSizeChangeCallback(host->GetId()); pipeline->AddWindowStateChangedCallback(host->GetId()); @@ -40,7 +42,8 @@ void MarqueePattern::OnAttachToMainTreeMultiThread() void MarqueePattern::OnDetachFromMainTreeMultiThread() { auto host = GetHost(); - auto pipeline = PipelineContext::GetCurrentContext(); + CHECK_NULL_VOID(host); + auto pipeline = host->GetContext(); CHECK_NULL_VOID(pipeline); pipeline->RemoveWindowSizeChangeCallback(host->GetId()); pipeline->RemoveWindowStateChangedCallback(host->GetId()); diff --git a/frameworks/core/components_ng/pattern/search/search_model_ng_multi_thread.cpp b/frameworks/core/components_ng/pattern/search/search_model_ng_multi_thread.cpp index c9fa6ae11b80123da821cbac9c4b45dd3db087db..8780329dee7e6c534fcf3c79e14f4bf0a74d8f19 100644 --- a/frameworks/core/components_ng/pattern/search/search_model_ng_multi_thread.cpp +++ b/frameworks/core/components_ng/pattern/search/search_model_ng_multi_thread.cpp @@ -50,9 +50,11 @@ void SearchModelNG::CreateTextFieldMultiThread(const RefPtr& parentN const RefPtr& searchTheme) { CHECK_NULL_VOID(searchTheme); + CHECK_NULL_VOID(parentNode); auto nodeId = parentNode->GetTextFieldId(); auto frameNode = FrameNode::GetOrCreateFrameNode( V2::SEARCH_Field_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); + CHECK_NULL_VOID(frameNode); auto textFieldLayoutProperty = frameNode->GetLayoutProperty(); auto textFieldPaintProperty = frameNode->GetPaintProperty(); std::set allowDropSet({ DROP_TYPE_PLAIN_TEXT, DROP_TYPE_HYPERLINK, DROP_TYPE_STYLED_STRING }); diff --git a/frameworks/core/components_ng/pattern/text/text_pattern_multi_thread.cpp b/frameworks/core/components_ng/pattern/text/text_pattern_multi_thread.cpp index 88c26808c7693056e5aea7a4e9350eed728793de..9d5154b3ae6f63057e8b2021a2034298b1f4687e 100644 --- a/frameworks/core/components_ng/pattern/text/text_pattern_multi_thread.cpp +++ b/frameworks/core/components_ng/pattern/text/text_pattern_multi_thread.cpp @@ -99,6 +99,7 @@ void TextPattern::OnDetachFromMainTreeMultiThread() auto host = GetHost(); CHECK_NULL_VOID(host); FrameNode* node = RawPtr(host); + CHECK_NULL_VOID(dataDetectorAdapter_); dataDetectorAdapter_->aiDetectDelayTask_.Cancel(); CloseSelectOverlay(); auto pipeline = pipeline_.Upgrade(); @@ -232,6 +233,7 @@ void TextPattern::SetStyledStringMultiThread(const RefPtr& value, bo if (closeSelectOverlay) { pattern->CloseSelectOverlay(); } + CHECK_NULL_VOID(pattern->styledString_); auto length = pattern->styledString_->GetLength(); pattern->styledString_->RemoveCustomSpan(); pattern->styledString_->ReplaceSpanString(0, length, value); diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_pattern_multi_thread.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_pattern_multi_thread.cpp index c134903f2d64ba1116c620ef474cbe0158465294..43feeeecbb49cc1a88dacf57eb89204c49ffd4d9 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_pattern_multi_thread.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_pattern_multi_thread.cpp @@ -105,7 +105,9 @@ void TextFieldPattern::OnAttachToMainTreeMultiThread() { auto host = GetHost(); CHECK_NULL_VOID(host); - + + auto instance = StylusDetectorMgr::GetInstance(); + CHECK_NULL_VOID(instance); StylusDetectorMgr::GetInstance()->AddTextFieldFrameNode(host, WeakClaim(this)); auto layoutProperty = GetLayoutProperty(); @@ -115,7 +117,6 @@ void TextFieldPattern::OnAttachToMainTreeMultiThread() CHECK_NULL_VOID(pipeline); auto fontManager = pipeline->GetFontManager(); if (fontManager) { - auto host = GetHost(); fontManager->AddFontNodeNG(host); } auto onTextSelectorChange = [weak = WeakClaim(this)]() { @@ -125,6 +126,7 @@ void TextFieldPattern::OnAttachToMainTreeMultiThread() CHECK_NULL_VOID(host); host->OnAccessibilityEvent(AccessibilityEventType::TEXT_SELECTION_UPDATE); }; + CHECK_NULL_VOID(selectController_); selectController_->SetOnAccessibility(std::move(onTextSelectorChange)); isDetachFromMainTree_ = false; auto autoFillContainerNode = host->GetFirstAutoFillContainerNode(); @@ -443,9 +445,11 @@ void TextFieldPattern::SetSelectionFlagMultiThread( showSelect_ = true; HandleSetSelection(selectionStart, selectionEnd, false); if (isForward) { + CHECK_NULL_VOID(selectController_); selectController_->MoveSecondHandleToContentRect(selectionEnd); selectController_->MoveFirstHandleToContentRect(selectionStart, false); } else { + CHECK_NULL_VOID(selectController_); selectController_->MoveFirstHandleToContentRect(selectionStart); selectController_->MoveSecondHandleToContentRect(selectionEnd); } diff --git a/test/unittest/core/pattern/text_input/text_field_pattern_testten.cpp b/test/unittest/core/pattern/text_input/text_field_pattern_testten.cpp index df728198cf45e6e3646b6e994962d3d9912a9c38..7fdf835cf7349a8c83ee47472ee6800cbb65c7c6 100755 --- a/test/unittest/core/pattern/text_input/text_field_pattern_testten.cpp +++ b/test/unittest/core/pattern/text_input/text_field_pattern_testten.cpp @@ -2467,6 +2467,67 @@ HWTEST_F(TextFieldPatternTestten, NotifyKeyboardClosed001, TestSize.Level1) EXPECT_EQ(textFieldPattern->selectController_, 1); } +/** + * @tc.name: NotifyKeyboardClosed002 + * @tc.desc: Test NotifyKeyboardClosed + * @tc.type: FUNC + */ +HWTEST_F(TextFieldPatternTestten, NotifyKeyboardClosed002, TestSize.Level1) +{ + auto frameNode = FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 0, AceType::MakeRefPtr()); + ASSERT_NE(frameNode, nullptr); + auto textFieldPattern = frameNode->GetPattern(); + ASSERT_NE(textFieldPattern, nullptr); + textFieldPattern->customKeyboardBuilder_ = []() {}; + textFieldPattern->customKeyboard_ = + AceType::DynamicCast(AceType::MakeRefPtr("node", -1, AceType::MakeRefPtr())); + ASSERT_NE(textFieldPattern->customKeyboard_, nullptr); + auto focusHub = textFieldPattern->GetFocusHub(); + focusHub->currentFocus_ = true; + textFieldPattern->NotifyKeyboardClosed(); + EXPECT_EQ(textFieldPattern->isKeyboardClosedByUser_, false); +} + +/** + * @tc.name: NotifyKeyboardClosed003 + * @tc.desc: Test NotifyKeyboardClosed + * @tc.type: FUNC + */ +HWTEST_F(TextFieldPatternTestten, NotifyKeyboardClosed003, TestSize.Level1) +{ + auto frameNode = FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 0, AceType::MakeRefPtr()); + ASSERT_NE(frameNode, nullptr); + auto textFieldPattern = frameNode->GetPattern(); + ASSERT_NE(textFieldPattern, nullptr); + textFieldPattern->customKeyboardBuilder_ = nullptr; + textFieldPattern->customKeyboard_ = + AceType::DynamicCast(AceType::MakeRefPtr("node", -1, AceType::MakeRefPtr())); + ASSERT_NE(textFieldPattern->customKeyboard_, nullptr); + auto focusHub = textFieldPattern->GetFocusHub(); + focusHub->currentFocus_ = true; + textFieldPattern->NotifyKeyboardClosed(); + EXPECT_EQ(textFieldPattern->isKeyboardClosedByUser_, false); +} + +/** + * @tc.name: NotifyKeyboardClosed004 + * @tc.desc: Test NotifyKeyboardClosed + * @tc.type: FUNC + */ +HWTEST_F(TextFieldPatternTestten, NotifyKeyboardClosed004, TestSize.Level1) +{ + auto frameNode = FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 0, AceType::MakeRefPtr()); + ASSERT_NE(frameNode, nullptr); + auto textFieldPattern = frameNode->GetPattern(); + ASSERT_NE(textFieldPattern, nullptr); + textFieldPattern->customKeyboardBuilder_ = []() {}; + textFieldPattern->customKeyboard_ = nullptr; + auto focusHub = textFieldPattern->GetFocusHub(); + focusHub->currentFocus_ = true; + textFieldPattern->NotifyKeyboardClosed(); + EXPECT_EQ(textFieldPattern->isKeyboardClosedByUser_, false); +} + /** * @tc.name: BetweenSelectedPosition002 * @tc.desc: Test BetweenSelectedPosition